影響網站速度的因素,與優化策略-主觀因素篇(下)
前言
前面兩篇談了系統之外的客觀條件,以及管理者可以進行的的初步健檢項目;本篇是速度因素三部曲的末章,則需要進一步檢視開發層面的技法。Magento這類開源式系統,在長期的演進和社群的努力下,持續推出版本更新,過程中增強了資料交換的安全性以及系統的可靠性;以工程面的角度來說,最為開發者津津樂道的,在於其嚴謹的結構之下,同時保持彈性,與強大的擴展性。
但這同時也代表著,開發者必須付出許多心力以優化整體效能。
本篇將提到的因素,往往必須深入系統的程式核心進行檢視與驗證,或是在開發設計之初就應納入考慮。希望以下的內容能讓電商經營者,對於歐斯瑞進行系統健檢評估的過程有個初步的理解。
開發設計的優化技巧
在開始談及開發設計的環節之前,我們要先知道,網站前台看到的頁面,是由系統拼裝各個區塊,動態生成一張完整的HTML文件讓瀏覽器編譯/渲染,整個過程就好比依照既定的規則,用樂高積木堆疊出不同的作品。
動態區塊的快取規則
要讓整個系統如預期運作,分成伺服器端的程式(PHP),以及前端的頁面(HTML),前端頁面中部分區塊的內容,幾乎是一致的,比方說:
<Head>…</head>中間這段語法,通常包含了頁面需要的javascript / CSS和一些關於頁面的Meta描述,兩個不同的使用者拜訪網站,系統會生成相同的內容。
這邊提到的快取,是要避免讓伺服器,每次生成頁面都要重新動態生成,而用快取的型式儲存在伺服器上,藉以降低拼裝整份HTML文件的時間。
此外值得注意的是,在預設的狀態下,Magento是允許全頁內容套用快取機制的,不過大多數的實際案例中,並不是個好主意。例如付款頁面中的金物流環節,往往需要即時向第三方交換資料,而這些資料幾乎都和登入的使用者身分有關;所以應該在這些區塊中避免使用快取。而我們可以透過XML擋的描述,告訴系統那些區塊是否應該要採用快取規則。
好消息是,要找到協助檢測並進一步設定的工具,並不是難事,市集上也有相關的延伸功能可支援,甚至,可以依據您的電商業務狀況,自訂客製化的規則。
延伸模組的程式邏輯應合理安排
和大多數開放式系統一樣,取得延伸模組的管道很多,不管是透過市集採購,或是自行開發設計;每個專案的系統都有其特色,共通點是都安裝了不同來源的延伸模組,其中有可能將低整體系統的效能。造成這種結果的成因很多:不合理的設計/沒跟上Magento的版本更迭/過多的資料交換等等。
實務經驗告訴我們,第一步是先辨識延伸模組是否與Magento核心程式或是和其他模組產生衝突:在安裝任何延伸模組的過程中,安裝包中必備的config.xml是個可以進行初步檢測的線索,在這個檔案中,如果注意到"<rewrite>"這樣的描述,往往是值得您特別注意的相關程序,因為這將複寫Magento原生的核心程式,也極可能是造成降低效能的原因。
假若已經找出造成效能降低的關鍵模組,接下來的解決策略就更加複雜了,大致上有三種手段:
- 嘗試將那些複寫核心程式的部分,改為採用原生的程式邏輯,並進行測試。
- 嘗試改變模組程式引用的主從關係,將這些複寫核心的程式,改為繼承自核心程式。
- 找出關鍵的程式區段之後,可以嘗試在前面提到的config.xml中描述例外狀況,通常會以"<depends>"標籤進行描述,以便在不更迭任何程式碼的狀況下排除衝突。
的確這種Trouble shooting的過程實在不怎麼愉悅,對電商經營者來說,若要避免這些狀況,最好的建議是:『還是讓專業的來吧。』
預先編譯功能是否如預期運作
這邊先粗淺地談一下Magento的編譯模式概念(Compiler mode):
在一個Magento系統中,所有模組的功能原始碼,可以被放在"/app/code/local","/app/code/community",以及"/app/code/core"其中一個目錄下,當模組功能運作時,系統會依序從這三個目錄中尋找相關的程式文件,然後編譯執行之。
然而,整個程序最花費時間的,倒不是伺服器CPU進行運算的階段,而是在硬碟中搜尋文件的過程,啟用預先編譯後,系統會將所有需要被引用到的程式文件,依照以上的順序複製到特定的目錄下,藉以降低找尋文件的時間。
值得注意的是:假使我們更新了系統中的模組功能,或是安裝新的模組,此時就需要先將此功能關閉,待更新完成之後,手動刷新,重新生成這些將被預先編譯的文件。
這個功能的啟用與相關設定,也因Magento 1 & 2的版本有很大的差異,M2已經不再提供管理後台的介面進行設定,改採伺服器端的命令碼執行,同時將功能進一步延伸,甚至可以指定另一套獨立運作的Magento系統來分擔編譯的工作。不過在實務經驗上,啟用此功能與否,和每一個電商系統的體質有很大的關係,往往是進一步評估後的決策。
你可能會想,為什麼系統設計之初,要讓延伸模組放在這麼多不同的目錄,感覺上不是更費事嗎?這又是另一個故事了,請容我們另開篇幅討論。
結語
『是吧,表面上越是簡單的事物,背後越是大費周章的複雜過程。』
我們在網站速度這個議題上,採用三部曲的節奏發布一些實務面的心得,由淺至深地談了許多因素,希望讀者能更進一步地了解,整段電商系統傳送資料的過程。無論您的品牌是否採用Magento作為電商平台,期待這幾篇文章都能對您有所幫助。
延伸閱讀(參考資料)
- [m-connect] -Ways to Identify and Resolve Magento Extension Conflicts
- [Magento DevDocs]-Public content
我要留言