今、サーバーから写真を表示するアプリを作りたいのですが、写真が出てくるのがとても遅いことがわかりました。http リクエストをより高速にする方法またはコードはありますか?
1 に答える
別の角度から問題にアプローチします。エントロピー/経済的なものと考えてください。
あなたが説明している問題には2つの遠い点があり、それらの間でデータを転送したいと考えています。これを理想的な条件で実現するには 100 単位の費用がかかるとしましょう。そして、このコストをさらに下げることは不可能であると仮定します。このコストは、転送に必要なエネルギーが最小になる場所です
ここで、転送速度が当社の管理下にないと仮定します。ここでは、実際にはさまざまなトレードオフ セットにすぎない、理論的な「一見」の改善点をいくつか示します。
フォワード キャッシング / キャッシング: 可能な限りすべての画像をプリロード/ダウンロードして、ユーザーが要求したときに準備できるようにします。最初のインストールですべてを静的にインストールします。
トレードオフ: 100 ポイントのほとんどをディスク領域と前処理能力に費やしました。これにより、アプリの動作が常に少し遅くなる可能性がありますが、ディスクに読み込まれると、パフォーマンスは向上します。欲しい画像が頻繁に変わると効果が落ちる
圧縮/マッピング: ボトルネックが転送速度にある場合は、画像をできる限り圧縮/マッピングして低コストで転送しますが、画像がアプリに到着すると、多くのプロセッサ パワーを使用します。
トレードオフ: CPU パワーは以前よりも多く使用されますが、転送中は高速に動作します。圧縮する側はより多くのメモリを使用し、解凍する側もより多くのメモリと CPU を使用します。画像が巨大で動きが遅い場合にのみ有効であり、このトレードオフの利点が見られます。これを試してみたい場合は、7z をインストールし、高度な圧縮設定を確認して、非常に巨大なマップを試してください。
描画アルゴリズム: 画像がビットマップ/実際の画像ではなく描画である場合。ベクター グラフィック フォーマットのみを送信し、すべての写真 (ラスター イメージを技術的なものにする) をベクター イメージに変更します。画像をアプリに運ぶためのバイト数を大幅に削減しますが、最終的にはより多くのプロセッサ パワーが必要になります。
トレードオフ: すべての画像をベクター グラフィックスに変換できるわけではありません。より多くの CPU とメモリを使用することになりますが、非常に最適化された優れたライブラリが既に組み込まれています。これは、x = y + 1 などの単純な 1 行の数式が宇宙のどのコンピューターにも格納できない単一の無限行を「数学的圧縮」と見なすこともできます。
独自のサーバーを作成する: ボトルネックがサービス プロバイダーとの通信時間にあることが確実な場合 (この場合、おそらく非常に効率的な http サーバー)。非常に迅速に応答し、ファイルの送信を開始する独自のサーバーを作成します。この改善の可能性は低いため、トレードオフについて話すことさえできません。
繰り返し情報を送信することを強制されることはありません: そのような方法で情報や写真をデザインしてタグ付けします。情報のキャッシュをさらに改善するために、受信側が受信したチャンクを保存する非反復チャンクのみを送信します。
トレードオフ: 1、2、3 の組み合わせは、100 ポイントのコストを邪魔する別の形です。あなたは要点を理解します。
BitTorrentのイデオロギー: ボトルネックがサーバーの帯域幅である場合、ユーザーの帯域幅を使用することが論理的であり、プラスの効果があるかどうかを確認する簡単な公式があります。繰り返しますが、おそらくデータ セットが非常に大きい場合にのみ有効です。
トレードオフ: これは、トレードオフについて議論するための興味深いオプションです。サーバーの帯域幅の不足を補うために、ユーザーの帯域幅と近接性を使用します。データを取得する従来の方法よりも少し多くの CPU が必要です (より多くの TCP 接続を維持します)。
締めくくりとして: 情報転送のコストを 100 ポイントから 95 ポイントに改善し、改善できる関数呼び出しはあり得ません。現在の技術レベルでは、効果的な転送に本当に近づいているようです。つまり、ネットワーク転送方法論を含め、圧縮、マッピング、およびその他のさまざまな手法はかなり成熟していますが、常に改善の余地があります。例えば、現在では電気信号なので光速でデータを送ることが絶対最大と考えられていますが、量子もつれ観測技術はこの限界を否定し、理論的には絡み合った2つの粒子が宇宙全体で無限の速度で情報を送受信します(??)。また、より優れた効率的な圧縮方法を開発できれば、それは素晴らしいことです。
とにかく、私たちが話すことができる多くの情報を提供しない質問をしたように. エンジニアのように考え、主な原因を指摘するテスト環境を作成し、全力で攻撃することを強くお勧めします。問題をより適切な数式で定義したり、ボトルネックを指摘したりすることができれば、一般的な情報理論よりも適切に答えることができます。
また、最後に 1 つ注意事項があります。情報伝達がこれ以上効率的ではないと言っているのではなく、明日は 1000% 向上する可能性があります。この分野はかなり成熟しており、数学や理論に何年も取り組んでいなくても大きな改善が得られると言っているだけです。他の研究分野と同じように。