複数のビューの代わりに、ビューの複数のディスプレイをいつ作成する必要がありますか?


8

複数のビューの代わりにビューの複数のディスプレイを作成することは単に便宜上の問題ですか、それともパフォーマンス上の利点はありますか?

一部のディスプレイに次のアイテムのいずれかが存在し、他は存在しないと、ビュー全体に影響しますか?

  • コンテキストフィルター
  • コンテンツタイプフィルター
  • 集約

たとえば、記事のコンテンツタイプの結果だけを表示するディスプレイ、フォーラムの結果を表示するディスプレイ、カスタムの写真コンテンツタイプを表示するディスプレイで、各ディスプレイの動作が遅くなるかどうか知りたいです。あるいは、すべてのビューが同じコンテンツタイプを共有しているが、1つはnidのコンテキストフィルターを持ち、他は持っていないという点でのみ異なる場合、それらはすべて遅くなりますか?

1つのビューに30のディスプレイがある場合、パフォーマンスを向上させるためにリファクタリングする必要がありますか、それともUIがそれほど多くのディスプレイを表示するように意図されていなかったからです。

回答:


8

コード的には、ビューとディスプレイの両方がオブジェクトによって表されます。ビューの処理中は、表示しているページでビューを1つだけレンダリングしているかどうかに関係なく、その子ディスプレイをすべてメモリにロードします。データベースクエリはアクティブなディスプレイに対してのみ実行されますが、非アクティブなディスプレイのプロパティは引き続きメモリに読み込まれます。

つまり、1つのビューに50のディスプレイがある場合、そのうちの1つだけを表示しているかどうかに関係なく、50のディスプレイがメモリに読み込まれます。したがって、あなたの質問に対する答えは「はい」です。通常、ビューの表示が多いほど、ビューのメモリ効率が低下します。

そうは言っても、私は個人的に、ビューに2〜10のディスプレイを配置しても、メモリに関しては無視できる程度であることがわかると思います。ビューに控えめな数のディスプレイがあることは、結局のところ実用的な目的に役立ちます(そうでなければ、なぜそもそもなぜそこにあるのでしょうか?)。

2番目の質問(追加のフィルターなどのパフォーマンスへの影響)については、はい、特定のパラメーターをビューに追加するとパフォーマンスに影響します。あなたはどのくらいで知りたい場合は、に行くことができ、管理/構成/ビュー/設定(あなたがD7である場合)を選択し、ライブプレビュー時にビューに関する表示情報と統計情報をSQLクエリを表示し、表示パフォーマンス統計。パフォーマンス画面のスクリーンショットは次のとおりです。

パフォーマンス設定を表示します

クエリの動作(分析される行の数、使用されるキー)にさらに関心がある場合は、ビューインターフェイスからクエリをコピーして([SQLクエリを表示]を選択した後)、クエリを分析できます。 MySQL explainコマンドを使用します。このようなexplainGoogle での使用に関する記事はたくさんあります。


1
1つのフォローアップ質問:子ディスプレイがメモリに読み込まれると言うとき、すべてのディスプレイの結果セットが読み込まれますか、それともクエリ文字列そのものですか?
PetroleumJelliffe

1
@PetroleumJelliffe各表示を表すクラスインスタンスは、Viewクラスインスタンスにアタッチされます。データベースの結果は、現在の「アクティブな」ディスプレイに対してのみフェッチされるため、接続されている他のディスプレイインスタンスは、データベースの結果やクエリ文字列を保持しません。私の知る限り、ビューの表示のクエリ文字列は、実行中のアクティブな表示に対してのみ作成されます。
アマチュアバリスタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.