如何使用 Magento 2 獲得最大效率。 Max Pronko 訪談
已發表: 2017-01-17Max Pronko 是新手必須遵循的 Magento 大師之一。 他是 Magento 專家和公眾演講者、Magento 認證開發人員和流行的 Magento 2 博主。
憑藉在 Magento 10 年的軟件開發和諮詢經驗,Max 成功設計並實施了從中型到大型規模的高質量產品。
在 Twitter 上關注 Max。
最近 Max 去見了 Magento 匈牙利,並在 Magento 2 主題演講中展示了性能優化的真實用例。 在這方面,我們想從幾個與本演示文稿直接相關的問題開始我們的採訪。
第 1 部分:常見的 Magento 擴展挑戰
幾乎每個 Magento 2 商家都使用 3d 派對擴展,一方面極大地增強了默認平台的功能,但另一方面,對性能工作流程產生了負面影響。
Natalie:總的來說,您如何評價 3d 派對擴展的代碼質量以及它們可能影響服務器負載的方式?
Max:感謝您有機會談論 Magento 2,Natalie。 我關注你的博客已經一年多了,每次訪問它,我都會發現一些有趣的文章。 這次真是萬分感謝。
你可能知道,我喜歡查看代碼有以下幾個原因:
- 首先,我獲得了經驗並觀察瞭如何將業務需求轉換為功能齊全的高質量特性的有趣技術。 尤其是在 Magento 2 方面。
- 其次,它幫助我了解 Magento 生態系統中的知識共享有多好。
95% 的 3rd 方擴展需要廣泛的代碼審查和改進代碼的指導。
到目前為止,我已經進行了大約 2 年的 3rd 方擴展代碼審查。 不幸的是,我不能說我對我得到的結果感到滿意:95% 的 3rd 方擴展需要大量的代碼審查和改進它的指導。 讓我對編碼標准保持沉默。
即使擴展程序創建並僅涵蓋具有某些特定功能的頁面選擇,我也會遇到所有網站頁面的性能問題。 例如,在默認佈局配置文件中包含不可緩存的塊。 Magento 會自動為所有頁面禁用頁面緩存。
另一個例子是使用耗時的後端操作而不將執行結果存儲在類變量中。 它可能會大大減少首頁加載。
我有機會查看了大約 60 個擴展程序,包括付費和免費擴展程序,所以我的評分是基於這個數字。 當然,我可能會推薦使用一些擴展。
Natalie:您認為最常見的代碼優化問題是什麼?
我從未見過在 3rd 方擴展中使用代理類。 但是,它可能會減少遞歸對像初始化的時間。
Max:通常擴展是在一輪中創建的,沒有性能優化,我可以稱之為“實施和交付”。 第二輪很少出現,代碼未優化。 例如,我從未見過在 3rd party extensions 中使用Proxy 類。 但是,它可能會減少遞歸對像初始化的時間。
Natalie:你能給那些為 Magento 2 編寫第一個擴展的新手開發者什麼優化建議?
Max:在本地環境之外使用 Magento 2 測試您的擴展是一個好主意,最好是在雲中的某個地方。 如今,以 5-10 美元的價格從 DigitalOcean 或 AWS 購買虛擬服務器並運行基本的端到端用戶測試並不昂貴。 至少,與開箱即用的 Magento 2.x 版本相比,它可能顯示出相當不錯的性能差異。
第 2 部分:M2 性能優化
Natalie:你對塊緩存的特性有什麼看法(在緩存鍵中最好使用/避免什麼)?
Max:Magento 2 社區版帶有 Varnish 代理服務器支持。 對於所有在緩存未準備好時不擔心首次訪問者的商家來說,這非常有用。 塊緩存對未存儲在 Varnish 中的頁面起作用。 您可能期望客戶帳戶、目錄搜索、購物車等頁面上沒有清漆。
每個塊的正確緩存鍵對於構建正確的緩存條目和增加對後端存儲(如 Redis)的緩存命中非常重要。 理想情況下,所有涉及前端渲染的實體都應該實現getIdentities()方法附帶的Magento\Framework\DataObject\IdentityInterface接口。 如果您需要為塊緩存編譯正確的緩存鍵,此方法非常有用。
Natalie:關於 SQL 查詢優化的任何信息?
Max:對於 SQL 優化,我通常會嘗試列出從表中選擇的所有可能的數據變化。 理想情況下,所有查詢都應該命中 MySQL 索引以獲得更好的性能。 我知道這是一個理想的情況,但是,它確實有助於加快對錶中大量記錄的查詢。 當然,SQL 查詢優化是一個巨大的話題,所以我可以講幾個小時。
第 3 部分:Magento 2 搜索
Magento 2 可以吹噓比 M1 具有更好的開箱即用搜索,但仍然不支持複合查詢、拼寫錯誤、自動更正、同義詞。 此外,M2 搜索不掃描類別和 CMS 頁面。
Natalie:在 CE 版本中改進搜索的最佳方法是什麼:擴展或外部搜索引擎?
Max:我考慮將 Elasticsearch 用於 Magento 2 社區版。 當然,無論是內部開發還是使用 3rd 方擴展,它都需要開發。 對於 Magento 2 項目之一,我們使用了帶有附加配置的內置搜索,例如同義詞和重定向到常見搜索查詢的登錄頁面。 但是,這是一個短期解決方案,我會選擇一些外部服務。
Natalie:談到外部搜索引擎,哪個更適合小型/中型/大數據網站:Solr、Sphinx 或 Elasticsearch(或其他)?
Max:對於小型網站,我會考慮使用默認的 Magento 2 搜索。 對於其他人來說,如果您想構建自己的解決方案,更多的是關於擴展和文檔的好壞。 Elasticsearch 是我的首選。
Natalie:你能推荐一些可以改進默認功能的搜索擴展嗎?
Max:我有經驗審查 MageWorx 為 Magento 2 製作的 AutoComplete 模塊。 與默認的 Magento 2 社區版自動建議功能相比,它顯著改善了用戶體驗。 MageWorx AutoComplete 模塊將為商家帶來更多轉化和銷售。 關於代碼實現,我的得分是 4.5 分(滿分 5 分)。可以做一些小的改進來提高整體開發人員的體驗。 AutoComplete 模塊的優點之一是它可以免費下載。 我會考慮為 Magento 2 Merchants 使用並推薦這個模塊。
除此之外,我將繼續審查 Magento 2 的搜索相關模塊,並提供我對代碼質量的反饋。
第 4 部分:Magento 2 挑戰
Natalie:您是一位久經考驗的 Magento 開發人員,在與 Magento 合作多年後,第二版平台帶來的最具挑戰性的問題是什麼?
例如,據我所知,即使是 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 複雜且有時具有挑戰性。 新技術總是帶來學習新事物的新機會。
甚至還有一張關於它的圖片。
Natalie:最後,Magento 2 於 2015 年 11 月發布。你認為它是否已經完全準備好讓全球的商家開始遷移?
馬克斯:絕對是的。 Magento 2 作為一個軟件,比 GitHub 上的一些未解決的問題有更多的好處。 在精心策劃的遷移和營銷策略的情況下,與 Magento 1 相比,它顯然可以帶來更多的收入。 我記得我在 2015 年 8 月對我們的一個 Magento 2 項目說“是”,當時它只是一個 Beta 版本。 現在我們非常樂意使用和構建基於 Magento 2 的電子商務網站。
我在Pronko Consulting的團隊將很高興將新的願景帶入生活並推出新的 Magento 2 網站。
*****
我們要感謝 Max 接受這次採訪,並祝愿他和他的團隊在這一年富有成效和成功。