web-dev-qa-db-ja.com

Drupalパフォーマンスをどのように改善しますか?

Drupalは開発が高速ですが、パフォーマンスは非常に低いです。 1秒あたり50リクエストに到達するのは困難です。

そして、単純なWebページには非常に多くのSQLクエリがあります。 Drupal.orgでフォーム送信のリクエスト時間をテストすると、完了するまでに常に数秒かかります。

Webサイトの速度をどのように改善しますか?

54
Bruce Dou

キャッシング、キャッシング、キャッシング。

以前にd.oで同様の質問に対して行ったいくつかの提案。

  1. Http-deamonの前に Varnish または別のリバースプロキシを配置することは、おそらくあなたが実行できる単一の最良の方法です。
  2. DrupalCon Copehagenの実行中、 Rasmus[〜#〜] apc [〜#〜] などのphp opcodeキャッシュを使用することができる最高のことの1つであると述べましたPHP一般に。新しいバージョンのPHPを使用するとパフォーマンスが向上します。PHPをDrupalにアップグレードすると、6から8にアップグレードすることにより、追加の利点があります。 、Drupalは、オブジェクトの方向に大きくシフトします。これは、新しいPHPバージョンでほとんどのパフォーマンス改善が行われた場合でもありました。
  3. Memcache は、ディスクではなくメモリにキャッシュを配置することにより、キャッシュを高速化するための一般的な選択肢です。
  4. Panels + Cache actions と組み合わせてキャッシュすると、非常に複雑なロジックをサポートするため、ログインしているユーザーのパフォーマンスを大幅に向上させることができます。
  5. エンティティキャッシュ は、Drupal 7。
  6. 書き込みが多いサイトでは、「十分に確立された」ソリューションはほとんどありません。一部のオプションが含まれます。
    1. 頻繁な書き込みを完全に移動します。たとえば、統計など、Googleアナリティクスなどの別の場所に移動します。
    2. X秒ごとに1回DBに書き込むNodeJSなどのカスタムソリューションを使用して、頻繁な書き込み操作をキャッシュします。
    3. 神聖な [〜#〜] acid [〜#〜] を犠牲にして、 MongoDB のようなデータベースを使用します。 (以下のBerdirのコメントを参照)
    4. SQLデータベースをクラスター化します。あるデータベースから読み取り、別のデータベースに書き込みます。これはD7のネイティブであり、 Pressflow はD6の場合に役立ちます。
61
Letharion

これらは私の経験からのメモであり、他の経験とは異なる場合があります。私は主にLAMPスタックを使用しており、私の提案では同じと考えています。

私が一般的に従うキャッシュの経験則

  1. 一度使用して複数回処理する。
  2. 可能な場合は古いデータを使用する
  3. キャッシュを頻繁に消去せず、非常に具体的にしてください。
  4. 可能な場合は、スタックの最下位レベルで変更を行ってください。 LAMP-DCCc:Linux、Apache、Mysql、PHP、Drupal Core、Contribおよびカスタムモジュール。

a Drupalサイトのパフォーマンスの向上(複雑さの昇順)

  1. コアを更新し、contribモジュールとテーマを更新してください。はい、それは重要です。

  2. サーバーにAPCをインストールします。 (レサリオンからの提案に基づいてトップに移動しました)

  3. ページキャッシング:admin/config/development/performance 最小キャッシュライフタイムとキャッシュページの有効期限の違い

  4. ブロックキャッシュ https://drupal.org/project/blockcache_alter すべてのブロックのキャッシュオプション。
  5. 集約JavaScriptファイルとCSSファイル-フロントエンドの改善 https://www.drupal.org/project/advagg
  6. 不要なモジュールを無効にします。すべてのモジュールは、ページの読み込みに使用できる必要があるコードの量を増やします。また、ルックアップの数も増加します。可能な限り、特定の機能を実行する複数のモジュールの代わりに汎用モジュールを使用します。
  7. ビューのコンテンツのキャッシュ-ビューのコンテンツ対応キャッシュ https://www.drupal.org/project/views_content_cache
  8. DBロギングを無効にする-使用 https://drupal.org/project/syslog_ng
  9. 404エラーの削減- http://www.brokenlinkcheck.com/
  10. 高速404応答- https://drupal.org/project/fast_404 -サーバーレベルで処理してください。
  11. クライアント側の検証- https://www.drupal.org/project/clientside_validation
  12. 画像の圧縮- https://www.drupal.org/project/imageapi_optimize
  13. 画像の遅延読み込み-不要な画像を読み込まない- https://www.drupal.org/project/lazyloader
  14. スプライトシートを使用- https://www.drupal.org/project/spritesheets

  15. 最小キャッシュライフタイム値をより高い値に設定し、キャッシュクリアモジュールを使用して特定のページのキャッシュをクリアします- ノードを編集/更新すると、匿名ユーザーのすべてのページキャッシュが失われます

  16. Devel Moduleを使用してクエリを監視します。
  17. ビューのクエリを書き換える/過剰な場合はビューを回避する。
  18. XHProf- https://www.drupal.org/project/XHProf
  19. FPM、HHVM。
  20. DBプロファイリングおよびチューニング- https://www.drupal.org/project/dbtuner
  21. Boostを使用しますBootstrap必要ない場合はDBを使用しないでください。 https://drupal.org/project/boost ほとんどの小規模から中規模のサイトでは、Boostで十分であり、リバースプロキシなどは必要ない場合があります。
  22. CDNを使用する- https://www.drupal.org/project/cdn 設定は簡単です。
  23. キャッシュテーブルが巨大な場合はMemcachedを使用します-memcachedをインストールしてRAMを設定できる場合は、思ったほど複雑ではありません。
  24. Etags-Etagsを適切に構成します。 https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. リバースプロキシサーバーの使用-ワニス(少なくともアセットの場合)。ほとんどのユーザーが匿名である場合に役立ちます。
  26. 圧縮転送-gzip圧縮を有効にする
  27. キープアライブ-可能な場合は永続的な接続を使用します。
  28. プログレッシブJPEG-
  29. コードのキャッシング-Eatonのブログは素晴らしいです。 http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. キャッシュウォーミングの実装- https://www.drupal.org/project/cache_warmer -エンドユーザーがアクセスする前にページをキャッシュウォームします。
  31. マスタースレーブDB設定- https://www.drupal.org/project/autoslave を使用すると、設定が簡単になります。
  32. データベースクラスター- https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing
  33. ロードバランサー- http://en.wikipedia.org/wiki/Load_balancing_(computing)
  34. ヒューリスティックなキャッシュウォーミングを使用する- https://www.drupal.org/project/cache_graceful
  35. 認証済みユーザーのキャッシュ- https://www.drupal.org/project/authcache
23
Gokul N K

Boost モジュールも非常に便利で、Webページから静的ファイルキャッシュを作成します。これは主に、匿名ユーザーのトラフィックが多いWebサイト用です。

Boostは、Drupalの静的ページキャッシュを提供し、ほとんどが匿名のトラフィックを受信するサイトのパフォーマンスとスケーラビリティを大幅に向上させます。共有ホスティングの場合、これはパフォーマンスの向上という点で最良のオプションです。専用サーバーでは、代わりにワニスを検討することをお勧めします。

Apacheは完全にサポートされており、Nginx、Lighttpd、IIS 7はセミサポートされています。Boostは、html、xml、ajax、css、およびjavascriptをキャッシュおよびgzip圧縮します。Boostsキャッシュの有効期限ロジックは非常に高度です。組み込みのクローラーにより、ページの読み込みを高速化するために、期限切れのコンテンツを迅速に再生成できます。

17
Beebee

言及する価値があります。SQLIteデータベースドライバーを使用している場合は、ディスク同期を無効にする必要がある場合があります。

/**
 * Implements hook_init().
 */
function HOOK_init() {
  db_query('PRAGMA synchronous = OFF');
}

一部のサーバー構成では、パフォーマンスが劇的に向上します。

4
ya.teck

Drupalパフォーマンスの秘密はcachingにあり、優れたプラクティスに従っています。推奨事項:

Drupalバックエンド

  • Performanceセクションでキャッシュを有効にします。
  • Performance および Performance and Scalability Checklist モジュールを確認します。
  • チェック Drupal 7パフォーマンス最適化オプションとチェックリスト
  • 未使用の非プロダクションモジュール(Devel、Views UI、Rules UIなど)を無効にします。
  • 不安定なモジュールを無効にします。
  • 無効化 統計
  • Dblogコアモジュールを無効にし、 syslog に置き換えます。
  • 無効化 pdate Managerコア モジュール。
  • Cron:Deepalの組み込みcronを使用します。poormanscronではありません( Elysia または ltimate cronを検討してください)。
  • ビュー:さまざまなレイヤー(データベースクエリ、マークアップ、時間ベース)でビューのキャッシュを使用します。
  • ブロック:ビューがブロックの場合(ページごと、ユーザーごとなど)、ブロックキャッシュを使用します。
  • ブロック: Block Cache Alter モジュールでブロックごとのキャッシュ設定を微調整することを検討してください。
  • パネル:可能な限りキャッシュを使用します(D7の場合 [〜#〜] pcc [〜#〜][〜#〜] phc [〜#〜] モジュール)。
  • エンティティ:有効 エンティティキャッシュ
  • 複数の環境を使用する場合は、ページの読み込みを改善できる missing module を検討してください。
  • Authcache モジュールを使用して、認証済みユーザーのページキャッシュを有効にします。
  • ユーザーエクスペリエンスを低下させるリダイレクトを回避します。
  • Expire モジュールを使用して、キャッシュの無効化を強化します。
  • PHPプロファイリング前のプロファイリング(例 XDebug )を使用)。

Drupalフロントエンド

  • 次の方法でHTTPリクエストを最小化:
    • PerformanceセクションでJS/CSS集約を有効にします。
    • CSS Sprites を使用して、画像リクエストの数を減らします。
    • 小さな画像をインラインデータ(スタイルシートのURI)として使用します。
    • Image maps を使用して、複数の画像を1つの画像に結合します。
    • 遅延画像読み込みの使用も検討してください( Image Lazyloader を参照)。
    • インストール BigPipeモジュール を使用して、読み込み時間を短縮します。
    • 遅延読み込みと遅延評価を検討してください。
    • 参照: ブラウザキャッシュの使用-公開!
  • JavaScriptとCSSを外部にすることを検討してください(場合によってはより高速です)。
  • JavaScriptとCSSを縮小します(参照: Speedy モジュール)。インラインを避けます。
  • JSを参照するときは、deferまたはasync属性を使用します。
  • Iframeの数を最小限に抑えます。
  • 画像、フォント、CSSスプライトを最適化し、ファビコンを小さくキャッシュ可能にし、Cookieのサイズを小さくします。
  • DOM要素の数を減らし、アクセスされた要素への参照をキャッシュします。
  • Fast 404モジュールを使用して、404ページの読み込みを高速化します。
  • Advanced CSS/JS Aggregation を使用して、フロントエンドリソースの集約とキャッシュを有効にします。
  • スタイルシートを上部に配置し、スクリプトを下部に配置します。
  • ExpiresまたはCache-Controlヘッダーを追加し、さらにETagsを削減して応答。
  • AJAXに対してGETを使用し、それらをキャッシュ可能にします。
  • ブラウザーがアイドル状態の時間を利用するためのコンポーネントのプリロードおよびポストロード。
  • ドメイン間でコンポーネントを分割すると、並列ダウンロードを最大化できる場合があります。
  • HTMLで画像をスケーリングせず、コンポーネントを25k未満に保ちます。
  • フィルター、CSS式、空のsrcまたはhrefを持つHTML要素は避けてください。
  • リバースプロキシを使用して、Webリクエストをデバッグします(例: Charles )。
  • 基本的なパフォーマンスチェックには、 Y-SlowおよびPhantomJS などのツールを使用します。
  • Google PageSpeed ツールを使用して、ウェブサイトを分析および最適化します。
  • W3Cナビゲーションのタイミング 仕様( GitHub )についてお読みください。

PHP

  • 有効にするPHPキャッシュ(例OpCache[〜#〜] apc [〜 #〜])およびTweak設定。
  • Mod_phpの代わりにPHP-FPMとApacheの代わりにNginxを使用することを検討してください。

データベース

サーバ

  • Drupalの 推奨システム要件 を確認してください。
  • Drupalの 推奨されるWebサーバー設定 を確認します。
  • Drupalの 推奨PHP構成設定 を確認してください。
  • ホスティングが高速ストレージデバイス(SSDなど)上にあることを確認します。
  • 共有ホスティングとは対照的に、高速で信頼できる専用サーバーを使用します。
  • Redis または memcached をインストールし(igbinaryサポートあり)、Drupalを使用して構成します。
  • 検索エンジンに長いTTLを定義します(例:TTLはボットがサーバーに到達するのを防ぎます)。
  • DNSルックアップを減らします(それらがキャッシュされていることを確認してください)。

トラフィックの多いウェブサイト

Webサイトの高負荷が予想される場合は、Varnishを使用してください。 CDNの使用も検討してください。

続きを読む: スケーリングとチューニングのパフォーマンスにおける実際の経験


その他のリソース:

3
kenorb

いくつかのパフォーマンスとスケーラビリティの問題を解決するためのベストプラクティス、例、および詳細な説明を提供する High Performance Drupal という名前の本があります。 Drupal内部、アプリケーションのパフォーマンス、データベース、Webサーバー、およびパフォーマンス分析にコーディングおよびインフラストラクチャテクニックを適用する方法を学びます。

Drupal 7 のパフォーマンスとスケーラビリティ)の記事には、Drupal 6およびDrupal 7および次のリスト:

注目すべきDrupal 7のパフォーマンスおよびスケーラビリティプロジェクト:

2

バックエンド開発者として、コードを改善してWebサイトのパフォーマンスを向上させる余地は常にあります。バックエンド開発者向けのガイドラインは次のとおりです。

1)ウォッチドッグテーブルをクリーンアップする

2)変数APIを乱用しないでください

3)HTTPリクエストの数を減らすまたは改善する

4)「ドットモジュール」を短くする

フォントエンドとサイトビルダーについては、さらに多くのことを達成できますが、あらゆる観点からパフォーマンスを考慮することが重要です。

ソース: 実稼働前に最適化

1
targoo

新しいモジュールをインストールせずに、Drupal速度を妥当なレベルで向上させるためのいくつかの可能性があります。はい、Drupalにはパフォーマンス構成があります。

  1. 次の場所に移動して、これを設定できます:YourSiteDomain/admin/config/development/performance
  2. Chachingで「匿名ユーザーのページのキャッシュ」を有効にする
  3. 最小キャッシュ存続期間:1日(定期的な更新を行わない場合)
  4. キャッシュページの有効期限:1日(定期的な更新を行わない場合)
  5. 「キャッシュページの圧縮」を有効にする
  6. 「CSSファイルの集約と圧縮」を有効にする
  7. 「集約JavaScriptファイル」を有効にする

  8. この構成を設定したら、次の場所に移動します:YourSiteDomain/admin/reports/status

  9. 「css」および「js」ディレクトリに権限の問題がないかどうかを確認します
  10. ステータスレポートページで定義されている権限を修正します

これで、drupal 7サイトの速度最適化が完了しました。

速度をチェックするオンライン速度テストツールはほとんどありません。上記の設定を更新する前に、必ず速度チェックツールの1つを使用してテストを実行してください。パフォーマンス設定を更新したら、速度テストを再度実行します。間違いなく改善が見られます。

PingdomとHTTP Fox(FireFoxプラグイン)は、サイトの速度をチェックするのに最適なツールです。

上記の設定は、匿名ユーザーのページをキャッシュするだけでなく、CSSおよびJSファイルも圧縮します。サイトが80個のファイルを読み込んでいる場合の例として、これらの設定をポストすると、リクエストの数が少なくとも50%削減されるため、Drupalサイトでは速度が2倍向上します。

1
AnAnD

Drupalサイトのパフォーマンスを最適化するために多くの微調整が行われましたが、すべてが必須というわけではありません。 Drupal。キャッシュ、はい、これはさまざまな方法でWebサイトを最適化する方法ですが、アドオンやヒントを増やすと、面倒なプロセスなしでWebサイトを調整できます。

最近、私たちのWebサイトに同様の記事を公開しました。これは、Tweakの作業を行う際に役立つと思います。

ソース: http://www.cloudreviews.com/blog/drupal-performance-optimization-tips

1
Sabih

最適化されていないDrupal 7 GBの2 GBのRAMは、1秒あたり約20-25のリクエストを十分に処理できます。それを超える場合、サイトは調整が必要です。調整する内容は、サイトのほとんどのユーザーが匿名であるか認証されているかによって異なります。パフォーマンス向上のためにできることは次のとおりです。

サイトは主に匿名ユーザーにサービスを提供しています:

1)APC、memcache、およびentitycacheを確実にインストールして構成します。

2)Webサーバーの前にVarnishプロキシを配置します。インストールと設定には約30分かかりますが、ページの読み込み時間が大幅に短縮されます。実際、すべてのページがキャッシュされている場合、2 GBのマシンでVarnishは1秒あたり約300のリクエストを処理できます。 Expireモジュールを使用して、コンテンツの更新/削除時に選択したページのみを期限切れにします。

3)CSSおよびJSファイルを集約するためにAdvanced CSS/JS Aggregationモジュールを使用します。すべてのJSファイルをページの下部に移動してみてください。ただし、これによりサイトが破損する可能性があるため、十分なテストを行った後、運用環境で実装してください。重要なCSSのインライン化も試してください。私の経験では、ページの読み込み時間が約0.5秒短縮されます。

4)CSS/JS/imagesには、将来の有効期限ヘッダーが含まれるはずです。これにより、ブラウザが同じCSS/JS /画像を何度もリクエストしないようになります。

5)Webサーバーが圧縮ページ/ CSS/JSを提供していることを確認します。

上記の5つのステップを実装すると、2 GBのRAMサーバーは、1秒あたり50のリクエストをかなり簡単に処理できるようになります。

サイトは主に認証されたユーザーにサービスを提供しています:

そのようなサイトの最適化はより複雑です。このようなサイトは、最適化のために2つのサブカテゴリのいずれかに分類されます。

(a)サイト上のほとんどのページは、ユーザー固有の情報を持つ1つまたは2つのブロックを除いて同一です。たとえばDrupal商取引サイト。

(b)ほとんどのページはユーザー向けに完全にカスタマイズされています。たとえばDrupalコモンズサイト。

サイトがカテゴリ(a)に該当する場合は、ほとんどが匿名ユーザーにサービスを提供しているサイトについて説明したテクニックのほとんどを適用します。唯一の違いは、管理者以外のページの場合、VarnishはヘッダーからSESSION Cookieを削除し、キャッシュされたページを提供する必要があることです。 AJAXブロックモジュールは、AJAXを使用してユーザー固有の情報でサーバーブロックを実行します。この方法では、ほとんどのページがVarnishを使用して非常に迅速に提供され、ユーザー固有の情報がAJAXを介して提供されます。

サイトがカテゴリ(b)に該当する場合は、Authcacheモジュールを使用してください。かなりの設定とメンテナンスが必要なため、できるだけ使用しない方がいいと思います。しかし、それは本当にうまくいきます。 Varnishを使用するほど高速ではありませんが、探している1秒あたり50のリクエストを処理できます。

ここで説明した以上のことを検討している場合は、 Drupal Performance Optimization Checklist をご覧ください。開示:それは私が書いたものです。これは、Drupalサイトを高速化するために実行できることの完全なリストを引用しています。

1
Neerav Mehta