1000行のphpセッションファイルがあり、ユーザーに1つずつ表示する必要があります。データのローテーションを回避または削減したいと思います。どちらが最善の方法ですか?
2 に答える
製品データを保存したり、データを回避したりするためにセッション変数を使用することはありません。重量を減らしたい場合は、html ファイルで css を使用でき、短い関数名と変数名を使用できます。通常、製品データは (mysql) データベースに保存されます。特別なデータベースを避けたい場合は、通常のファイルで動作する sqlite もあります。製品データを圧縮してブラウザで解凍することもできますが、最新のサーバーとブラウザはすでに圧縮をサポートしているため、製品データが適切に圧縮されない場合、または共有 Web ホスティング サービスを使用している場合や管理者が圧縮を使用していない場合にのみ意味があります。圧縮を有効にしたい。
通常、セッション データにはユーザー固有の情報のみを保持します。たとえば、ユーザーがショッピング カートに入れたアイテムがそこに移動する可能性があります。
カタログを取得するときの db サーバーの負荷を軽減したい場合は、何らかのキャッシングを行う必要があります。多くの選択肢がありますが、最も一般的なものは次のとおりです。
- memcached。これは、Web サーバー (または近くのサーバー) で別のプロセスとして実行されます。
- APC。これは、単純な展開のための私の個人的なお気に入りです。これは PHP のアドオンですが、一度インストールすると、追加のサーバー プロセスを管理または監視する必要はありません。
- ファイルシステム。これは簡単に実装でき、新しいソフトウェアやアドオン、プロセスは必要ありません。必要なのは、Web サーバーが書き込むことができるディレクトリだけです。
基本的な考え方は次のとおりです。カタログ データを取得する関数は次のようになります。
Retrieve the catalog from the cache.
If the catalog is not in cache
Get the data from the database
Create the catalog object/array
Save the catalog to the cache
Return the catalog
memcached と APC を使用すると、データが自動的にシリアル化され、データをキャッシュする期間を宣言できます。時間がなくなると、データはキャッシュから消えます。そうすれば、適切な間隔でデータベースからカタログを更新することができます。
ファイルシステムを使用している場合は、自分でもう少し作業を行う必要があります。キャッシュ ファイルの経過時間 (データを更新する時期かどうかを確認するため) を確認する必要があります。また、 を呼び出しserialize()
てunserialize()
、データ オブジェクトを保存可能なバイト ストリームに変換し、元に戻す必要があります。
HTML ページをレンダリングするときは、ユーザーに表示される情報を HTML ページに入れるだけで済みます。通常、カタログ全体を一度にユーザーに送信する必要はありません。
カタログが非常に大きい場合は、全体をキャッシュに入れるのではなく、カタログ内の個々のアイテムを個別のキャッシュ エントリにキャッシュすることを検討してください。どの程度が「大きすぎる」かは、実際に判断する必要があります。通常、ネットワーク I/O は Web サーバーとデータベースの大きな遅延の問題であるため、ディスクから驚くほどの量のデータを読み取ることができても、パフォーマンスの低下は見られません (何も気付かないうちに 100 キロバイト以上)。