0

プロファイル テーブルのユーザー プロファイルと別のテーブルのプロファイル イメージがある API をリファクタリングしています。現在、API はプロファイル テーブルにクエリを実行し、関連付けられた画像データ (パスなど) について画像テーブルをループ処理します。プロファイル画像が設定されていない場合にデフォルトの img パスを追加するロジックが組み込まれています。したがって、50 個のプロファイルを表示している場合、51 個のクエリが実行されています。

最初のプロファイル クエリが画像テーブルに結合する場所をリファクタリングすることを検討しています。2 つのオプションが残っています。

  1. 結果サーバー側をループして、画像パスを構築できます。結果を表示するには、クライアント側で再度ループする必要があります。
  2. 結果をクライアント側で 1 回ループして、そこでイメージ パスを構築できます。パス ロジックは簡単で単純な if ステートメントです。

2 が論理的な選択のようです。しかし、そうですか?これは、API とクライアント側のインターフェイスをいつ構築するかという大きな問題の一部だと思います。ブラウザの速度を低下させるリスクを冒して API を高速に保つために、サーバーからクライアントにコードを移動するのはいつですか? このダンスはどうやるの?私は Node を使用して jquery datatables プラグイン用の別の API に取り組んでおり、バックエンドと結合するにはさらに多くのコードが必要であり、ブラウザーにどれだけ引き渡す必要があるかを決定するのは少し綱引きでした。訪問者のブラウザーをクラッシュさせている場合、高速な API はあまり役に立ちません。

4

3 に答える 3

1

私にとっての決定のヒントは、コンポーネントパスの一部を公開することで、クライアントがそれを構築して、私が望まないものを公開できるようにすることです。

vs

私は、クライアントが必要としないかもしれない、またはクライアントが時々それらを切り刻むなど、やり直さなければならないかもしれない作業を行うイメージパスサーバー側を構築することによっていますか?

必要以上のデータを渡すという点では、あなたの言ったことから問題は見られません。最初の質問は、私にとって最も優先度の高い質問です。

このシナリオでは一種のストレッチですが、クライアントはイメージパスの作成方法を知っている必要があり、いくつかの制約を設定します。一方、すべてがサーバー側で行われる場合、実装の詳細は非表示になります。それらは単純ですが、それが私のデフォルトオプションになります

あなたが言ったように、それは綱引きです。このような問題を見る別の方法は、「正しい」答えは、質問をするときに依存する可能性があるということです。あなたは一方向に行くことができ、それらは少し後で、いくつかの新しい要件がポップアップします、そして今それは間違ったものです....

シンプルで一貫性のあるものを目指すことです。最高のように正しいですか?20/20後知恵の時間。

于 2012-10-15T21:37:25.703 に答える
0

私があなたを正しく理解していれば..各プロファイルに画像が関連付けられているある種のプロファイルリストを表示しています...そうですか?

イメージを保存する方法からの抽象化 (db または vfs イメージは高速ですが、ストレート ファイル (少なくともマイナーな MRU キャッシュを使用) の方が保守が容易です)。

解決策 numero uno は正しい方法です。

それは、よりシンプルでより「安らかな」ものです。私はクライアント ロジックの大ファンですが、正当な目的のために使用する必要があります (Soopa-UI など)。db ロジック コードとサーバー ロジック コードについても同様です。私はSQLが嫌いで、問題の別のレイヤーを維持する必要がありますが、場合によっては最終結果に違いが生じることは理解しています.

編集:ああ...パスだけを保存しています。したがって、派手な 1 ページ Web アプリケーションを実行していない場合は、クライアント側でパスを構築する際に別の問題が発生します。クライアントは、画像の読み込みを開始する前に、スクリプトの読み込みが完了するまで待つ必要があります。

于 2012-10-15T21:41:05.617 に答える
0

過去にこれを見て実行したとき、データベースに画像(あなたがしているように聞こえるものなど)を保存しない方がよいことがわかりました。ブラウザがそれらにリンクし、サーバーからのパスを渡すことができる場所にそれらを配置します。

于 2012-10-15T21:18:12.463 に答える