WordPress の最適化中に学んだ主な教訓 (顧客の成功のために)

公開: 2022-09-15
目次隠す
1. WordCamp Mumbai で講演するようになったきっかけは何ですか?
2.眠れぬ夜をもたらした 3 つの問題 (ソリューションとそこから学んだ教訓付き)
2.1. ページの読み込み時間を 3 分からミリ秒に短縮しています…
2.1.1. 問題
2.1.2. 解決
2.1.3. ソリューションの強化
2.2. どのようにしてタイムアウト エラーがプラグインのベストセラー機能になったのですか?
2.2.1. 問題
2.2.2. 解決
2.2.3. ソリューションの強化
2.3. 共有ホスティング環境により、プラグインを書き直す必要があったのはなぜですか?
2.3.1. 問題
2.3.2. 解決
3.レッスンのまとめ
4.あなたのピックは何ですか?

最後にクラウド ナインの瞬間があったのはいつですか?

空飛ぶ色で学校に合格..またはあなたのガールフレンド/ボーイフレンドがあなたの提案を受け入れたとき?

2 週間前にクラウド ナインの瞬間がありました。 私は、インド最大の WordCamp である WordCamp Mumbai 2017 で講演しました。

このトピックは私の心に近いものであり、私が毎日扱っているものでした。顧客の成功のために WordPress を最適化することで学んだ教訓です。

大規模な WordPress データベースを処理する際に直面した問題と、それらにどのように取り組んだかについてです。

WordCamp Mumbai で講演するようになったきっかけは何ですか?

WordPress プラグインの開発は素晴らしい学習体験です。 優れたフレームワークを拡張し、顧客の問題を解決するコードを書くことに集中し、優れたチーム メンバーと協力することができます。

StoreApps では、開発者はコードを記述するだけでなく、顧客のサポートも行います。 顧客の問い合わせを解決することで、私はいくつかの最大の教訓を得ることができました。

これらすべてが私の日課であり、非常にエキサイティングです。

しかし、私にとって何がもっとエキサイティングか知っていますか? 大規模なデータベースを操作し、複雑なデータベースの問題を解決します!

当社のプラグインは 35000 人以上のユーザーに使用されています。 また、大規模な WooCommerce ストアや人気のある WordPress サイトを扱う多くの課題を見てきました。

ありがたいことに、これらの課題を解決することができ、多くのことを学びました。

しかし、待ってください。私と同じように、WordPress と WooCommerce で同様の問題に直面している開発者が何百人もいるでしょう。

それで、私は自分のレッスンを他の人と共有することにしました。

そして、インド最大の WordCamp での講演の機会よりも優れたプラットフォームはありません!

眠れぬ夜をもたらした3つの問題 (解決策と教訓)

最後に、私が話していた3つの問題があります。 それでは、1つずつ始めましょう。

ページの読み込み時間を 3 分からミリ秒に短縮しています…

問題

ストアの重要なページ (つまり、カート、チェックアウト、およびマイ アカウント ページ) にクーポンを表示するという単純な機能がチェックアウト プロセスを停止させるというスマート クーポン プラグインの状況に直面しました。

Smart Couponsは、WooCommerce ストア向けにクーポンと商品券を一括で作成および処理するためのプラグインです。

解決

現在、特定のユーザーが利用できるクーポンを表示するには、複数のメタ条件を評価する必要があるため、WP クエリを使用すると複数の JOINが発生します。

そこで、理想的なデータベースのクエリ方法、つまりWPクエリを使用する代わりに、カスタム SQL クエリを作成しました。

WordPress の最適化
スマート クーポンの古いコード

また、カスタム クエリでは、次のことを行いました。

  • 単一の MySQL クエリですべてのメタ条件をチェックする代わりに、単純に最初のメタ条件を評価しました。
  • その後、post_ids (クーポン ID) のコンマ区切りリストを options テーブルに保存しました。
  • そして、他の各メタ条件を評価することで、同じ一連の post_ids を単純にマップ縮小しました

これは、特定のユーザーに表示する必要がある post_ids の最終セットを取得するまで行いました。

WordPress の最適化
スマートクーポンの新しいコード

ソリューションの強化

これにより、ページの読み込みの問題が解決されました。 しかし、私たちの友人が提案したように、ページの読み込みをミリ秒未満にするには、問題を再定義する必要がありました。

ユーザーが利用できるすべてのクーポンを表示する代わりに、
カートとチェックアウト ページでユーザーに表示されるクーポンの数に制限を設定しました

どのようにしてタイムアウト エラーがプラグインのベストセラー機能になったのですか?

問題

非常に大規模なデータベースの更新を処理するために、WordPress のコア機能を使用すると大きなオーバーヘッドになる可能性があるため、カスタム クエリを作成しました。

例: 店舗内のすべての商品の価格を 40% 引き下げる必要がある場合、[価格] を選択し、[40% 引き下げる] を選択して更新ボタンを押すだけです。 これは、WooCommerce ストアの一括更新を容易にするように設計されたプラグイン Smart Manager を使用して簡単に行うことができます。

しかし、誰かが一度に 1,000 個の製品またはストア全体を更新しようとすると、バッチ更新プロセスが停止し、タイムアウト エラーが発生し始めました。

最初に、クエリの最適化を検討し始めましたが、それは役に立ちませんでした。

私の状況は、たけし城の出場者に似ていました。 どんなに頑張っても水に落ち続けました。

WordPress の最適化

解決

正確な原因を見つけるには、問題から離れて問題を俯瞰する必要がある場合があると言われています。

私は同じことをして、実際の問題が
クエリ レベルではなく、リクエスト レベルで

したがって、私が行ったのは、単一のリクエストですべての更新を行うのではなく、同じリクエストを複数の連続する AJAX 呼び出しに分割して更新の小さなバッチを実行し、タイムアウト エラーを完全に排除することでした。

WordPress の最適化
Smart Manager バッチ更新 Ajax リクエスト

ソリューションの強化

現在、単一のリクエストを複数の小さな AJAX リクエストに分割するこのアプローチは、タイムアウト エラーを解決しただけでなく、バ​​ッチ更新の UX も改善しました

現在、店長は更新の進捗状況について更新を受けており、製品に対する信頼が高まるだけでした.

また、同じアプローチにより、Smart Manager はあらゆる形状とサイズの WooCommerce ストアのバッチ更新を処理できるようになり、Smart Manager は StoreApps の最も売れているプラ​​グインの 1 つになりました。

共有ホスティング環境により、プラグインを書き直す必要があったのはなぜですか?

問題

どのレポート プラグインでも、統計の正確なレポートだけでなく、迅速なレポートを提供することは非常に重要です。 現在、レポート統計を取得するには、2 つの主要な WordPress テーブル、つまり posts と postmeta の結合を含む複数のクエリが必要でした。

WordPress の最適化
WordPress 投稿 Postmeta ERD

すでに上で見たように、 JOIN は非常に高価です。

Smart Reporter (WooCommerce のレポート ソリューション) では、1 つのページ ビューとページの読み込みで 20 の異なるレポート統計を表示していました。

解決

そのため、ほとんどのレポート ソリューションが従うのと同じアプローチに従い、サマリー テーブル、つまりフラット構造のカスタム テーブルを作成しました。

このテーブルには、プラグインが必要とするすべてのデータの要約が含まれるため、結合の使用が不要になり、ページの読み込み時間が短縮されます。

WordPress の最適化
スマート レポーター サマリー テーブル

また、これらの要約表を最新の状態に保つために、WordPress のアクションとフィルターを利用しました。

レッスンのまとめ

  • 可能な限りベスト プラクティスに従う
  • ループ内のクエリはありません
  • 大規模で複雑な結合を避ける
  • PHP レベルよりも MySQL レベルで多くのことを行う
  • コードを深く掘り下げる
  • サマリー / カスタム / 一時テーブル
  • UXへの注意 - 応答性、通知…
  • 正しい問題を解けていますか?

あなたの選択は何ですか?

あなたはいくつかの大きな問題に対処し、それに対する解決策を見つけたと確信しています。 以下のコメント欄でお知らせください。 それは読者にとって本当に価値のあるものになるでしょう。