web-dev-qa-db-ja.com

AJAX呼び出しごとに不要な/重複したファイル読み取りを回避することで、AJAXベースのサイトを最適化するにはどうすればよいですか?

私はIT担当者で(読み取り:プロのプログラマーではありません)、ユーザーがプリントサーバー上のプリンターを検索できる内部監視Webツールを作成しました。指定されたフィルタリング基準に基づいて、一致するプリンターを表す一連のdivを返します。各プリンタのdivには、関連するプリンタに関する一連のライブ情報が含まれています。

JSは、実際のプリンターからポーリングされるライブ情報であり、プリンターごとにしばらく時間がかかり、異なるプリンターの応答が速くなったり遅くなったり、まったく応答しないため、divを実際に非同期AJAX-yの方法で生成します。

各AJAX呼び出しはいくつかのPHPを呼び出して、さまざまなものと通信する方法に関する情報を含む1つ以上のCSVファイルからデータをプルしますただし、この設計では、特定の検索のためにポーリングされるすべてのプリンターがこれらのファイルを再読み取りし、ファイルからプルされたデータを大量に処理する必要があります。

確かに、ツールはこのようにうまく機能し、何年もの間機能しますが、私は常にそれを最適化したいと思っていました。繰り返されるファイルの読み取りは無駄に見えます。しかし、AJAX=の実装を考えると、これを回避する方法を想像することはできませんでした。このデータを何らかの方法で一度だけ読み取り、メモリに保存し、次のようにアクセスできればもっといいでしょう。すべての必要なAJAX呼び出しは特定の検索によって促されます。しかし、各呼び出しが個別のPHPプロセスであるため、どのように機能するかわかりません。

(ファイルを使用する代わりに)効率的なデータベースが明白な答えだと思いますが、いくつかの理由でそれを常に避けてきました:

  • このツールについては、新しい情報や銀行の履歴情報を保存する必要はありません。 CSVファイルに保持されているすべてのデータは、外部のスケジュールされたタスクによって、または必要に応じて手動で、時々のみ更新されます。
  • このツールのすべては、リアルタイムデータ(つまり、キャッシュされておらず、ユーザーに依存しない)であることを目的としています。
  • データベースは、維持が必要なもう1つの依存関係であり、ツールのテキストファイルから分離されているため、移植性が低下し、ツールの維持が複雑になります。
  • それでも、プルされたデータの一連の繰り返し処理(非同期ではありますが)の問題は解決しません。

したがって、多分、上記の私の好みは、私が望ましい改善をする特権から私を排除し、それで結構です。しかし、私はあなたがこのデザインに適合すると考えることができる潜在的な解決策があるかどうか尋ねたかったのです。

御時間ありがとうございます。

1
mmseng

探しているものはcachingと呼ばれ、クライアント側とサーバー側という2つのオプションがあります。

クライアント側のキャッシングの場合、JavaScriptコードで通常のAJAXフローを実行し、次に返されたAJAXデータをブラウザのさまざまなストレージメカニズム(cookies、localstorageなど)です。使いやすく、大量のデータを処理し、箱から出してすぐに安全なため、この選択にはlocalStorageを使用することをお勧めします。javaScriptコードでは、データがlocalStorageにあるかどうかを確認し、そうである場合は、AJAXを完全に呼び出してスキップし、localstorageからデータを返すだけです。

サーバーサイドキャッシングの場合、基本的にPHPランタイムにページロードから結果を返す方法を伝えます(これはAJAX)で起動されます)。多くの情報を再検索または処理します。PHP特定のコードを提案するのに十分なほどよくわかりませんが、キャッシュは真剣に標準的な方法です。 「PHP」で見つけた結果を確認してください。JavaScriptを変更する必要はありません。

いくつかのPHPキャッシングの例を見つけることができると仮定すると、私は個人的にそのルートに行きます。

1
Graham