PHPShopの最適化

たまたま私たちの顧客が私たちに彼のオンラインストアに数万の製品を追加するように命じました。 彼の店は悪名高いPHPShop(バージョン2.1.8)で働いていました。 この瞬間まで、私はこの「奇跡」に会ったことがありません。 最初の5000製品を追加した後、ストアはダウンし、ホワイトページしか表示できませんでした。 テクニカルサポートは、すべてホスト(MasterHost)が原因であると回答しました。 私はそれらを信じて、ローカルWebサーバーですべてを試すことにしました。 店は同じ写真を見せた。 さらに、タスクリストは、Apacheが200 MBのRAMを「消費」することを示しました。 私は中に登らなければなりませんでした...



簡単な検索の後、商品が表示されたときに、特定の商品を受け取るためにスクリプトがデータベースにリクエストを行っていないことがわかりました。 スクリプトの実行時に、データベースのすべての製品がグローバルアレイに配置され、特定の製品が必要な場合、このアレイから取得されることが判明しました。 そして、何らかの理由でモジュールがこれを行っていました。これは理論的にはキャッシュ(cache.inc.php)を担当するはずです。 とても奇妙に思えました。 必要な場合にのみデータベースからデータが取得されるように(このグローバルアレイが非常に頻繁に使用されるように)、スクリプト全体を書き直すのに長い時間がかかりました。 私たちは別の方法を探す必要があり、それが見つかりました。



データにアクセスする場合にのみ、データが配列に落ちたことを確認する必要がありました。 いくつかの検索後、ArrayAccessインターフェイスが見つかりました。これにより、配列の要素としてオブジェクトにアクセスできます。 数時間で、これらすべてが実現しました。 これで、データはアクセス時にのみ配列に落ちました。 さらに、MySQLサーバーの負荷を回避するために、受信したすべてのデータがキャッシュされました。



この問題の解決策は、ストアのパフォーマンスを回復するだけでなく、ページ生成時間を2倍に短縮しました。



誰かが問題を解決するためのコードを見ることに興味があるなら、次の投稿でその全体を公開することができます。



PhpShopの開発者がこの投稿をご覧になった場合は、事前にすべての商品を含むグローバルアレイを作成することで、彼らが何を導いたかを知りたいと思います。



All Articles