ここ数か月間、私たちは自社サイト(wpml.org)の動作が遅くなっていると感じていました。まず、サーバーをアップグレードするという強引なアプローチをとりました。これが役に立たなかったため、私たちは真剣に問題の分析に取り組みました。その結果が本日のリリースであり、CPU負荷と応答時間を70%削減しました。
パフォーマンス分析について学んだこと
パフォーマンスは私たちにとっても非常に重要です。私たちは何年にもわたり、WPMLのメモリ、クエリ、CPU時間をテストし、リリースのたびに改善してきました。今回の開発で学んだのは、静的なテストが必ずしも本当の問題を明らかにするわけではないということです。
これまでパフォーマンスをテストするために使用していた方法は次のとおりです。
- 多数の投稿、postmeta、カテゴリー、ユーザーを含む大規模なデータベースの作成
- 「重い」ページのリストの作成
- それらを何度も読み込み、読み込みにかかる時間の測定とプロファイリング
これにより、デバッグと最適化が必要なフロントエンドおよび管理画面のページがわかりました。私たちは、クエリの数を減らし、長いクエリを避け、効率的なPHPコードを記述するようにしました。
では、何が欠けているのでしょうか。
WordPressとWPMLは、「ページをリクエストして読み込みを待つ」よりも少し複雑です。すべては共有リソースであるデータベースを通じて行われます。訪問者Aがデータベースで行う1つのことが、訪問者Bの体験に影響を与える可能性があります。
これらのボトルネックを理解するために、本番サイトにAppopticsというツールをインストールしました。これにより、どの関数やクエリに時間がかかっているかを測定し、その理由を分析できるようになりました。
実際のパフォーマンスの改善
文字列翻訳における一見無害な1つの操作が、別のプラグインからのoptionsテーブルへの頻繁なクエリと重大なリソースの競合を引き起こしていることがわかりました。その呼び出しを100万回実行するだけであれば、問題は感じません。しかし、他のページがoptionsテーブルにアクセスする必要がある場合、文字列がアクセスしなくなるまで待たなければなりません。保留中のリクエストのリストが増大し、データベースがオーバーフローして、大惨事になります。

グラフを見ると、サーバーの労力の大部分がデータベース(ロックとロック解除を繰り返していたテーブル)に費やされていたことがわかります。私たちがいつ修正を適用したか、おそらく推測できるでしょう。
他のパフォーマンスの問題も修正できますか?
私たちが発見したことは、wpml.orgだけでなく、WPMLを実行している他の多くのトラフィックの多いサイトにも確実に役立ちます。負荷が非常に小さいサイトの場合、この改善をほとんど感じないでしょう。これは、同時アクセスが多く、ユーザーが多くの異なる操作を行っているサイトにのみ影響します。
他のサイトでは、別のパフォーマンス最適化を利用できる可能性があります。今回、この作業を行うための最善の方法は、パフォーマンスの低下に悩まされている実際の本番サイトにプロファイリングをインストールすることだと学びました。データベースのコピーを受け取ったとしても、トラフィックをシミュレートすることはできません。これが、これまでの私たちのラウンドでこの特定の問題を発見できなかった理由です。
ちなみに、今回のパフォーマンス改善のラウンドで明らかになったボトルネックはWPMLだけではありませんでした。WPMLで見つかった問題は修正しましたが、他の場所でも劇的な問題に気づきました。一部は私たちが独自にパッチを当て、一部はデータベースを介して最適化しました。
ご興味がある場合はお知らせください。本番サイトへのパフォーマンス分析のインストールをお手伝いします。そして、結果の分析を喜んでサポートいたします。WPMLに何か問題が見つかった場合は、私たちが修正します。パフォーマンスの問題を抱えるサイトでは、驚くような原因から多数の問題が見つかる可能性が十分にあります。
WPML 4.2.6のその他の新機能
WPML Core 4.2.6
- WPMLの投稿編集メタボックスの優先度を変更するためのwpml_post_edit_meta_box_priorityフィルターの追加
- サブフォルダーインストールのプラグインのアップグレードに関する問題の修正(常にサイトのURLを使用)
- wp_optionsテーブルへの余分な書き込みを減らすため、必要な場合のみ通知を保存
- 言語スイッチャーのリンクに関するセキュリティ問題の修正
WPML 文字列翻訳 2.10.4
- wp_optionテーブルが不必要に更新されないようにするための、STのmoファイルインポートに関する問題の修正
WPML 翻訳管理 2.8.5
- 「翻訳ジョブ」ページのページネーションコントロールのスタイリングの改善
- 管理画面の言語が英語以外の場合の、「翻訳ジョブ」ページでの翻訳者の割り当てに関する問題の修正
- 管理画面の言語が英語以外の場合の、「翻訳者」列の不適切なコンテンツの修正
WPML Media Translation 2.5.2
- wp_optionsテーブルへの余分な書き込みを減らすため、必要な場合のみ通知を保存
WPML CMS Nav 1.5.1
- 該当する場合にのみキャッシュをクリアすることによるパフォーマンスの改善
ダウンロードとアップデート
いつものように、登録済みのすべてのサイトでこのアップデートを自動的に受け取ります。いつでもWPMLアカウントにログインして、手動でダウンロードしてインストールできます。
サイトの何かをアップデートする前に、バックアップを行うことをお勧めします。
フィードバック、ご質問、ご提案
私たちのサイトは現在はるかに高速に動作していますが、皆様のサイトについてもぜひお聞かせください。コメントを残していただければ、こちらからお返事いたします。

