Magento 2 で最大限の効率を得る方法。Max Pronko へのインタビュー
公開: 2017-01-17Max Pronko は、初心者が従わなければならない Magento 教祖の 1 人です。 彼は Magento のエキスパートであり、パブリック スピーカーであり、Magento 認定開発者であり、人気のある Magento 2 ブロガーでもあります。
Magento での 10 年のソフトウェア開発とコンサルティングの経験を持つ Max は、中規模から大規模の高品質の製品の設計と実装に成功しています。
Twitterでマックスをフォローしてください。
最近、Max は Meet Magento Hungary に参加し、Magento 2基調講演でパフォーマンス最適化の実際の使用例を紹介しました。 この点に関して、このプレゼンテーションに直接関係するいくつかの質問からインタビューを始めたいと思います。
パート 1: 一般的な Magento 拡張機能の課題
ほとんどすべての Magento 2 マーチャントは、一方ではデフォルトのプラットフォーム機能を大幅に強化するサードパーティの拡張機能を使用していますが、他方ではパフォーマンス ワークフローに悪影響を及ぼしています。
Natalie: 全体として、サードパーティの拡張機能のコード品質と、それらがサーバーの負荷に与える影響をどのように評価できますか?
Max: Magento 2 について話す機会をありがとう、ナタリー。 私はあなたのブログを 1 年以上フォローしており、訪問するたびに興味深い記事を見つけています。 これありがとう。
ご存知かもしれませんが、私がコードをレビューするのが好きな理由はいくつかあります。
- まず、ビジネス要件を完全に機能する高品質の機能に変換する方法について、経験を積み、興味深い手法を観察します。 特にMagento 2に関しては。
- 第二に、Magento エコシステムで知識を共有することがいかに優れているかを理解するのに役立ちます。
サード パーティの拡張機能の 95% では、コードを改善するための広範なコード レビューとガイダンスが必要です。
私はサードパーティの拡張機能のコード レビューを約 2 年間行っています。 残念ながら、得られた結果に満足しているとは言えません。サード パーティの拡張機能の 95% では、広範なコード レビューとそれを改善するためのガイダンスが必要です。 コーディング標準については極力黙らせてください。
拡張機能が特定の機能を持つページの選択のみを作成してカバーしている場合でも、すべての Web サイト ページのパフォーマンスに問題が発生します。 たとえば、キャッシュ不可のブロックをデフォルトのレイアウト構成ファイルに含めます。 Magento は、すべてのページのページ キャッシュを自動的に無効にします。
もう 1 つの例は、実行結果をクラス変数に格納せずに、時間のかかるバックエンド操作を使用することです。 最初のページの読み込みを劇的に減らすことができます。
私は有料と無料を含めて約 60 の拡張機能をレビューする機会があったので、私の評価はこの数に基づいています。 確かに、使用をお勧めする拡張機能があります。
Natalie: コードの最適化で最も頻繁に発生する問題は何だと思いますか?
サードパーティの拡張機能でプロキシ クラスが使用されているのを見たことがありません。 ただし、再帰的なオブジェクトの初期化の時間を短縮できます。
Max: 通常、拡張機能は 1 回で作成され、パフォーマンスの最適化は行われません。これを「実装と提供」と呼びます。 2 回目のラウンドはめったに行われず、コードは最適化されずに残されます。 たとえば、サードパーティの拡張機能でProxy クラスが使用されているのを見たことがありません。 ただし、再帰的なオブジェクトの初期化の時間を短縮できます。
ナタリー: Magento 2 の最初の拡張機能を作成する初心者の開発者に最適化のアドバイスをお願いします。
Max: ローカル環境の外、できればクラウド内のどこかで、Magento 2 を使用して拡張機能をテストすることをお勧めします。 今日では、DigitalOcean または AWS の仮想サーバーを 5 ~ 10 ドルで購入し、基本的なエンド ツー エンドのユーザー テストを実行するのに費用はかかりません。 少なくとも、すぐに使用できる Magento 2.x バージョンと比較して、かなり優れたパフォーマンスの違いが見られる可能性があります。
パート 2: M2 パフォーマンスの最適化
ナタリー: ブロック キャッシュの特性 (キャッシュ キーで使用/回避する方が良いもの) について何が言えますか?
最大: Magento 2 Community Edition には、Varnish プロキシ サーバーのサポートが付属しています。 キャッシュの準備ができていないときに初めての訪問者を心配しないすべてのマーチャントに最適です. ブロック キャッシュは、Varnish に保存されていないページに対して有効です。 カスタマー アカウント、カタログ検索、ショッピング カートなどのページではワニスが表示されないことがあります。
ブロックごとの適切なキャッシュ キーは、適切なキャッシュ エントリを構築し、Redis などのバックエンド ストレージへのキャッシュ ヒットを増やすために非常に重要です。 理想的には、フロントエンド レンダリングに関与するすべてのエンティティは、 getIdentities()メソッドに付属するMagento\Framework\DataObject\IdentityInterfaceインターフェイスを実装する必要があります。 この方法は、ブロック キャッシュ用の適切なキャッシュ キーをコンパイルする必要がある場合に非常に役立ちます。
Natalie: SQL クエリの最適化について何かありますか?
Max: SQL の最適化のために、私は通常、テーブルから選択されたすべての可能なデータ バリエーションをリストアップしようとします。 理想的には、パフォーマンスを向上させるために、すべてのクエリが MySQL インデックスにヒットする必要があります。 理想的なケースであることはわかっていますが、テーブル内の多数のレコードに対するクエリを高速化するのに非常に役立ちます。 もちろん、SQL クエリの最適化は大きなトピックなので、何時間でも話せます。
パート 3: Magento 2 検索
Magento 2 は、M1 よりもすぐに使える検索が優れていることを誇っていますが、複合クエリ、タイプミス、オートコレクト、同義語はサポートされていません。 さらに、M2 検索はカテゴリと CMS ページをスキャンしません。
ナタリー: CE エディションで検索を改善する最善の方法は何ですか?拡張機能または外部検索エンジン?
Max: Magento 2 Community Edition の Elasticsearch の使用を検討しています。 もちろん、社内またはサードパーティの拡張機能を使用して開発する必要があります。 Magento 2 プロジェクトの 1 つで、同義語や一般的な検索クエリのランディング ページへのリダイレクトなどの追加構成を備えた組み込み検索を使用しました。 ただし、これは短期的な解決策です。外部サービスを使用します。
Natalie: 外部検索エンジンについて言えば、Solr、Sphinx、Elasticsearch (またはその他) のうち、小規模/中規模/大規模データ Web サイトに適しているのはどれですか?
Max:小さな Web サイトの場合、デフォルトの Magento 2 検索を検討します。 他のものについては、独自のソリューションを構築したい場合に備えて、拡張機能とドキュメントがどれだけ優れているかが重要です。 Elasticsearch は私の好みのオプションです。
ナタリー: デフォルトの機能を改善できる検索拡張機能をお勧めできますか?
Max: MageWorx 製の Magento 2 用の AutoComplete モジュールをレビューした経験があります。 デフォルトの Magento 2 Community Edition の自動提案機能と比較して、ユーザー エクスペリエンスが大幅に向上します。 MageWorx AutoComplete モジュールは、マーチャントのより多くのコンバージョンと売上を促進します。 コードの実装に関しては、私のスコアは 5 段階中 4.5 です。全体的な開発者エクスペリエンスを向上させるために行うことができる小さな改善がいくつかあります。 AutoComplete モジュールの優れた点の 1 つは、無料でダウンロードできることです。 このモジュールの使用を検討し、Magento 2 Merchants に推奨します。
それとは別に、Magento 2 の検索関連モジュールのレビューを続け、コードの品質に関するフィードバックを提供します。
パート 4: Magento 2 の課題
Natalie: あなたは Magento の開発者ですが、長年 Magento を使用してきましたが、プラットフォームの 2 番目のバージョンがもたらす最も困難な問題は何ですか?
たとえば、私が知っているように、M2 のわずかなコード変更でさえ、多くのアクション (bin/magento setup:upgrade、bin/magento setup:static-content:deploy、bin/magento setup:di:compile など) につながります。 )
Max:ほとんどの場合、開発者が PHPStorm の前に座ってコードを書いている場合、Magento 2 アーキテクチャを実際に掘り下げる時間はないと思います。 たとえば、UI コンポーネントについて不満を漏らし、実際の使用例が不足している優れた開発者を何人か知っています。 新しい Magento DevDocs は、 UI コンポーネントの概要を説明しています。
Magento 1 の経験が豊富な開発者は、Magento 2 が複雑で、時には難しいと感じています。 新しいテクノロジーは常に、何か新しいことを学ぶ新しい機会をもたらします。
それについての写真さえあります。
ナタリー: そして最後に、Magento 2 が 2015 年 11 月にリリースされました。世界中のマーチャントが移行を開始する準備が完全に整ったと思いますか?
マックス:もちろんそうです。 ソフトウェアとしての Magento 2 には、GitHub で公開されているいくつかの問題よりも多くの利点があります。 よく計画された移行とマーケティング戦略の場合、Magento 1 と比較して明らかにより多くの収益をもたらすことができます. 2015 年 8 月に Magento 2 プロジェクトの 1 つに「はい」と言ったのを覚えていますが、それはベータ リリースにすぎませんでした。 今では、Magento 2 に基づいて e コマース Web サイトを使用および構築できることを嬉しく思います。
Pronko Consultingの私のチームは、新しいビジョンを実現し、新しい Magento 2 Web サイトを立ち上げることを喜んでいたします。
*****
このインタビューをしてくれた Max に感謝し、彼と彼のチームが生産的で成功した年になることを願っています。