モジュール、ベストコーディングプラクティス、および適切なサーバー構成によるDrupal9パフォーマンスの向上
公開: 2020-08-11ヒープ内にメモリを備えた最も強力なサーバーを使用できますが、高性能のWebサイトを確保するにはそれで十分ですか? Drupalを使用すると、ビジネスの成長に合わせてWebサイトを拡張するのは簡単です。 実際、それがDrupalの得意分野です。 ただし、Webページ、機能、およびコンテンツの突然の増加は、そのパフォーマンスに影響を与える可能性があります。 Drupal 9が登場し、プロのようにこのチャレンジに挑戦できるようになりました。 Drupal 8の優れた点から、よりスリムでクリーンで強力な古いコードを差し引いたものが付属しています。 絶対に機能するDrupal9のパフォーマンス改善手法の詳細をご覧ください。
ウェブサイトのパフォーマンスはビジネスの成功の鍵です。 ウェブサイトの読み込みが遅いと、企業に害を及ぼす可能性があります。 より優れたパフォーマンスを備えたWebサイトは、SEOの向上、訪問者のコンバージョン率の向上、およびビジネスの成長に集合的に役立つ訪問者へのより優れたユーザーエクスペリエンスの提供に役立ちます。 読み込みが遅いWebサイトはまったく逆のことを行い、ビジネスの失敗の原因になります。

ウェブサイトのパフォーマンスに影響を与えるものはたくさんあります。 それらのいくつかは次のとおりです。
•サービスプロバイダー(ホスティング、DNSなど)
•サーバーへのリクエスト数
•技術的な問題または不適切なプログラミング慣行
•キャッシング技術
•不適切なサーバー構成
•重い画像とビデオファイル
パフォーマンスを向上させるDrupal9コアおよびカスタムモジュール
Drupal 9には、Webサイトのパフォーマンスを向上させるのに役立つ、多くの利用可能な寄稿モジュールとコアモジュールがあります。 特定のコーディング慣行に従い、適切なサーバー構成を使用することで、サイトのパフォーマンスを大幅に向上させることができます。
コアモジュール
•ビッグパイプ
Drupal Big Pipeモジュールは、追加の構成なしで処理を高速化します。 Drupalコアがパッケージ化されています。 キャッシュ可能性メタデータを使用してレンダリングパイプラインを改善することにより、フロントエンドで認識されるパフォーマンスを向上させます。
•内部動的ページキャッシュ
このDrupal9モジュールは、動的コンテンツのキャッシュに役立ちます。 匿名ユーザーと認証済みユーザーの両方に役立ちます。 このモジュールはDrupal7では使用できません。ユーザーが要求したページは、最初に要求されたときに保存され、同じページがさらに要求されたときに再利用できます。
•内部ページキャッシュ
内部ページキャッシュモジュールは、匿名ユーザーのデータをキャッシュするのに役立ちます。 このモジュールはコアで使用可能であり、デフォルトで有効になっています。
構成パス:admin / config / development / performance
ここでは、キャッシュをクリアし、ブラウザとプロキシキャッシュの最大有効期間を設定し、集計設定を有効/無効にすることができます。

寄稿モジュール
- 高度なCSS / JSアグリゲーション
Advaggモジュールには、次のような他の多くのサブモジュールが含まれています。 - AdvAgg Cdn:パブリックCDNからアセット(CSS / JS)をロードするのに役立ちます
- AdvAgg CSS / JSバリデーター: CSSおよびJSファイルを検証します
- AdvAgg外部ミニファイア:コマンドラインミニファイアを使用してJavascriptやCSSをミニファイします。
- AdvAgg Minify CSS:サードパーティのミニファイアでcssファイルをミニファイするのに役立ちます
- AdvAgg Minify JS:サードパーティのmiでjsファイルを縮小するのに役立ちます
- AdvAgg Modifier: CSSおよびJS配列を変更できるようにします。 (互換性の問題がある可能性があります)
- AdvAgg Old InternetExplorer互換性エンハンサー
構成パス: / admin / config / development / performance / advagg
このモジュールは、 gzipやbrotliなどのファイル圧縮技術もサポートしています。 このモジュールは、httpリクエストの数を減らすのに役立ち、サイトのパフォーマンスを大幅に向上させます。
ブレジー
Drupal 9 Blazyモジュールは、画像の遅延読み込みを提供して、帯域幅を節約し、より高いバウンス率を回避します。 遅延読み込みは、ユーザーが表示できる領域にある場合にのみ画像を読み込む手法です。 このマルチサーブ技術は、時間とデータを節約します。
構成パス: / admin / config / media / blazy
ここでは、Blazyを有効/無効にしたり、プレースホルダー効果を構成したり、画像がユーザーに表示されるまでの時間を決定するオフセットを設定したりできます。

ブレジーモジュール
CDN
Drupal 9 CDNモジュールは、DrupalWebサイトにCDNを簡単に統合するのに役立ちます。 CDNサーバーから静的コンテンツを提供して、コンテンツ配信の速度を上げるのに役立ちます。 それ以外に、このモジュールも簡単に構成できます。
構成パス: / admin / config / services / cdn

ここでは、CDNを有効/無効にし、マッピングURLを指定し、ファイルキャッシュを永久にチェック/オフにすることができます。
ベストコーディングプラクティスによるパフォーマンスの向上
array_key_exist()でisset()を使用する
ISSET()メソッドは、大幅に高速array_key_existよりも()。 ISSETとarray_key_existの主な違いは、キーが配列内に存在する場合array_key_existsは間違いなくあなたを教えてくれるということです。 一方、 issetは、キー/変数が存在し、nullでない場合にのみtrueを返します。 このチェックの詳細については、ベンチマークの比較をご覧ください。

entityQuery()の使用
entityQuery()は、適切なエンティティストレージのクエリの構築と実行を処理するために、ストレージコントローラーに依存しています。 これには、 entityQuery()を介して実行されるクエリがストレージに依存しないという利点があります。 したがって、寄稿モジュールを作成している場合や、将来的に代替エンティティストレージに移動する必要がある可能性があるウェブサイトで作業している場合、すべてのクエリは変更を必要とせずに新しいストレージバックエンドを透過的に使用します。 entityQuery()は、カスタムコードで手動でクエリを記述している場合でも、 entityQuery()ビューバックエンドを介してクエリを記述している場合でも使用できます。
ループする代わりにloadMultiple()メソッドを使用する
10個のnid(ノードID)があり、それをループして各ノードをロードしている場合、データベースに対して10個のクエリを実行しています。 loadMultiple()を使用している間は、1つのデータベースクエリに削減されます。
キャッシング
Drupal 9でキャッシュAPIを使用すると、レンダラー、応答配列、またはオブジェクトをキャッシュできます。 Drupal9で利用可能な3つのレンダリング可能性キャッシングメタデータがあります。
- キャッシュタグ
キャッシュタグは、Drupalエンティティまたは構成に依存する場合にデータをキャッシュするために使用されます。 このための構文はcache-item:identifierです。 例:ノード:5、ユーザー:3。 - キャッシュコンテキスト
構文:
•期間は親と子供を分離します
•複数の名前が付けられたキャッシュコンテキストは、パラメータが指定される可能性があることを示します。 使用する:コロンを追加する
例: user.roles、user.roles:anonymousなど。 - キャッシュの最大年齢
Cache max-ageは、時間に敏感なデータをキャッシュするために使用されます。
キューワーカー/バッチ
PHPがタイムアウトすることなく大量のデータを処理するには、バッチ処理またはキューワーカーを使用できます。 キューワーカーのアイテムは、cronが実行され、短時間実行される場合にのみ実行されます。 キューワーカーには、信頼できるものと信頼できないものの2種類があります。 信頼できるキューワーカーは、キュー内のアイテムが少なくとも1回実行されることを保証しますが、信頼できないキューは、メモリ障害またはその他の中断のためにアイテムをスキップする場合があります。 バッチ処理では、すべてのアイテムがバッチ条件で終了するまでアイテムが処理されるため、cronの実行を待たずに処理中にエラーが発生することはありません。
サーバー構成の改善によるパフォーマンスの向上
Apacheの代わりにNginxを使用する
NginxとApacheは、どちらも広く使用されているWebサーバーです。 Nginxは、パフォーマンスベンチマークでApacheよりも優れています。 また、Apacheよりも高速で効率的です。 最大1,000の同時接続を実行するベンチマークテストによると、NginxはApacheの2.5倍の速度で実行されます。
HTTP /1.1を介したHTTP / 2.0
HTTP / 2.0は多重化をサポートします。これは、他のリソースをブロックするHTTP /1.1とは異なります。 1つのリソースをロードできない場合、HTTP /2.0はTCP接続を使用して複数のストリームデータを一度に送信します。 HTTP / 2.0は、HTTP /1.1よりも高度なヘッダー圧縮技術を使用します
HTTP /2.0のNginx構成
サーバー{
443 sslhttp2をリッスンします。 // http2設定
ssl_certificate server.crt;
ssl_certificate_key server.key;
}圧縮コンテンツの提供
多くの場合、応答を圧縮すると、送信されるデータのサイズが大幅に減少します。 ただし、圧縮は実行時に行われるため、パフォーマンスに悪影響を与える可能性のあるかなりの処理オーバーヘッドも追加される可能性があります。
圧縮コンテンツを提供するためのNginx構成:
サーバー{
gzipをオンにします。
gzip_static on;
gzip_types text / plain text / css application / json application / x-javascript text / xml application / xml application / xml + rss text / javascript;
gzip_proxied any;
gzip_vary on;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
..。
}MySQLの代わりにMariaDB
mariaDBは、MySQLと比較して速度が向上しています。 MySQLよりも高速なキャッシュとインデックス作成を提供します。 この場合、MySqlよりもほぼ24%高速です。 mariaDBがMySQLよりも優れている他の重要なメトリックもあります。 そのため、パフォーマンスの点では、MariaDbがMySQLよりも優先されます。
CDN
CDNはコンテンツ配信ネットワークの略です。 これは、世界中に分散しているサーバーのクラスター(別名、Point of Presence、またはPoP)であり、連携してコンテンツをより高速に配信します。 CDNは、キャッシュされたバージョンのサイトコンテンツを保存し、最も近い利用可能なサーバーからコンテンツを配信します。 人気のあるCDNプロバイダーには、Cloudflare、Amazon cloudfront、Google cloudcdnなどがあります。
