2011-07-05 11 views
1

は、私はいくつかのJSONとXML APIを使用して他のサイトからコンテンツを取得し、サイトを持っています。読み込みの問題や制限の問題を防ぐために、私は次のことを行います。PHPとJavaScript/Ajaxのキャッシング - JSONとSimpleXMLを

  1. PHP - キャッシュされたコンテンツがあればそれを表示します。
  2. PHP - 空のエラーページを表示して404を返します(ページが2回目に読み込まれると成功 "成功200")
  3. Ajax - データベースに日付フィールドが存在しない場合、または現在の日付が保存された日付より前の場合は、APIからコンテンツをロード/追加します。将来の日付をデータベースに追加します。 (これにより、ページのロードが高速になり、Ajaxはページがロードされた後にコンテンツをキャッシュします)。私はPHPファイルを実行するためのAjaxを使用し

。私はPHPでコンテンツを取得します。

質問

  1. それはユーザーが古いコンテンツが表示されますロードされた後、私はコンテンツをキャッシュするので。新しいコンテンツをユーザーに表示するには、どの方法が最適です。私はJavascriptを自動的に再読み込みすることを考えていますページまたはメッセージnag。その他の方法は?
  2. 私は非常に多くのAPIを使用する場合:SをAjaxのロード時は長くなり、それはいくつかのエラーがaccurすることを大きなリスクです。負荷を分ける巧妙な方法はありますか?

2つ目の質問は、重要なものです。

+0

JavaScriptを使用する理由はありますか?単純で効果的な解決策はmemcacheです。 X秒後にデータを簡単にキャッシュして期限切れにすることができます。 – alexn

答えて

1

のコンテンツをキャッシュしているので、ユーザーには古い のコンテンツが表示されます。新しいコンテンツをユーザーに表示するには、どの方法が最適ですか? 私は Javascriptを と自動的に考えているページまたはメッセージ-NAGをリロードします。他の の方法がありますか?

JavaScriptを使用してページをリロードする必要はありませんが、Jquery's .load()を使用してください。このようにして、新しいコンテンツはページ全体をリロードせずにDOMに挿入されます。おそらく、新しく挿入されたコンテンツに、でCSSを追加することを強調してください。

私は非常に多くのAPIを使用する場合:SをAjaxの ロード時は長くなり、それはいくつかのエラーが accurすること 大きなリスクです。負荷を分割する巧妙な方法がありますか?

あなたは最初の場所で分割コンテンツであってはなりません。 minimize number of HTTP requestsにお問い合わせください。可能であれば、たとえばbeanstalkd、redisのようなメッセージキューを使用して、すべてのAPIをオフラインで呼び出す必要があります。また、redisのようなメモリ内データベースにデータをキャッシュします。 http://redistogo.comのおかげで、redisの無料インスタンスを利用できます。

AJAX load content.php 

やコンテンツにおける次の構造を使用しないのはなぜredistogoに接続するためには、おそらくpredis

1

を使用する必要があります。PHP

  • コンテンツが読み込まれているかどうかを確認します。 yes>日付が新しいかどうかを確認します。はい>返品の内容
  • コンテンツはありますが、古いものは外部から返却します>返品の内容
  • 外部からのコンテンツの再読み込み>返品コンテンツ。

あなたの2番目の質問です。これは、APIのコンテンツをリフレッシュする必要がある頻度によって異なります。日常的に夜間にスクリプトを実行することができれば、新しいコンテンツをすべて取得し、その日にそのコンテンツを表示することができます。これにより、ピーク時に外部リソースへの呼び出しを最小限に抑えることができます。

複数のサーバーにアクセスできる場合は、賢明な方法で負荷を分割しています。各サーバーに要求の一部を処理させます。