web-dev-qa-db-ja.com

単一のページ上の複数のブロックプラグインから現在のノードにアクセスすると、パフォーマンスの観点からコストがかかりますか?

Blockプラグインとパネルの組み合わせを使用して、さまざまなコンテンツタイプの表示モードのレイアウトを設定します。

次に例を示します。

class MyBlockPlugin extends BlockBase
{
    /**
     * {@inheritdoc}
     */

    public function build()
    {
        $node = \Drupal::routeMatch()->getParameter('node');
        $profile_pic = ImageStyle::load('350x300')->buildUrl($node->field_image->entity->getFileUri());
        return [
            '#theme' => 'mytwigtheme',
            '#name' => $node->title->value,
            '#headshot' => $profile_pic
        ];
    }
}

これは確かに機能しますが、複数のブロックプラグインをロードして同じノードにアクセスするので、これが移動するのに悪い道ではないかと思います。前処理ブロックフックを使用してノードにアクセスできると思いますが、すべてのブロックに対してもロードされると想定しています。

パフォーマンスコストが小さい場合は、冗長性についてあまり心配していません。私の方法は大丈夫ですか?そうでない場合、ブロックプラグインが表示される現在のノードのデータにアクセスするためのより良い方法は何でしょうか?

更新:別の考えです。 twigテンプレートを使用していますか?

2
Matt

ノードエンティティに関するパフォーマンスの問題はありません。リクエストごとに1回だけロードされ、メモリに保存されます。

リクエスト間のキャッシュでは、ブロックのレンダリングされたtwigテンプレートがデフォルトでキャッシュされるため、パフォーマンスの問題もありません。ただし、正しいキャッシュデータを提供することを確認する必要があります。アノテーションのプラグインコンテキストを介して(推奨)、またはキャッシュメタデータをレンダーアレイに追加することで可能になります。現在のノードとその最終変更時間に応じて ブロックキャッシュを参照してください

2
4k4