1

私は過去数日間プロジェクトに参加しており、サイトの 1 つの領域のギャラリーに大量の画像 (+20 GB 合計 ~1-2 GB/ディレクトリ) を表示する際に問題が発生しました。このサイトは、ブートストラップ フレームワークで構築されています。/images のサイズの組み合わせが原因で、最終的に流動的に機能しない大規模なカルーセルを作成しようとしています。

  • 質問 A: この状況では、データベースからの I/O が必要で、そこに画像を保存する必要がありますか? これは、フロント エンドの /images フォルダーよりも高速ですか?
  • そして b) 私の php スクリプトでは、ディレクトリを変数に設定する必要があります/反復して画像を < li > に表示しますが、ブラウザーに過負荷をかけないようにメモリ使用量を制御するにはどうすればよいですか? 追加、提案、または代替案は大歓迎です。ここで終了するための最も直接的な手段を探しています。

  • 4

    2 に答える 2

    0

    A)大量のバイナリ データをデータベースに保存するのは悪い考えです。たとえ DB で許可されていても、使用しないでください。また、メモリ消費量が大幅に増加します。すべてのデータはデータベースのこれにより、2 倍のメモリが消費され、さらにデータベース サーバーの実行やクエリなどのオーバーヘッドが発生します。データベースを使用してファイルシステムに直接アクセスするのは遅くなります。ニスやその他のフロントエンド キャッシング システムも使用すると、コンテンツをより高速に提供することもできます。

    私がすることは、ファイルシステムにファイルを保存することです。そのような静的サービスを処理するのに最適なサーバーは G-WAN または NGINX Sourceですが、よく読んで、自分に最適なものを自分で決定してください。ポイントは、apache から離れて、軽量の http サーバーを実行している別のサーバーにすべての静的ファイルをホストすることです。

    プロのヒント:同じ画像の複数のコピーを、たとえば 50% 縮小したサイズで保存し、別のバージョンを元の画像サイズの 25% で保存します。画像を表示するには、画面サイズに応じて 50% または 100% のサイズで提供します。このようにして、帯域幅とメモリを節約できます。また、モバイル ユーザーの 3G 料金も大幅に節約できます。

    B)これは、データベースを使用するのがある程度理にかなっている場所です。すべてのディレクトリをデータベースにインデックス付けし、それを使用して FS 内の画像の場所、おそらくいくつかのタグ、さらにはビューの数を保存できます。等...

    forntend では、たとえば 1 ページあたり 50 個のサムネイルをフェッチするスクリプトを実装します。ユーザーは、派手な JQuery を使用してスクロールできます。さらにフェッチする必要がある場合は、50 個のサムネールで新しい結果セットを取得するだけです。等..

    このようにして、メモリと帯域幅を節約でき、ユーザーでさえ、このような軽量のブラウジング体験に感謝するでしょう!

    もう 1 つのヒント: より大きなトラフィックを処理できるようにしたい場合は、CDN の使用を検討することをお勧めします。Amazon S3 ほど高価ではない多くの CDN サービスがあり、簡単な検索で大量のリソースが得られます。

    ハッピーハッキング!

    于 2013-09-12T13:52:52.977 に答える