PrestaShop 速度最佳化,不破壞任何功能
本技能匯集了在真實 PrestaShop 商店中測量並應用的最佳實踐:哪些改進真正有效、按何種順序執行,以及會遇到哪些陷阱。所有資料皆已匿名化。
嚴格遵守的規則
- 每次變更前進行備份。 備份每個要修改的檔案、每項要變更的設定列以及伺服器設定。同時提供一個
volver.sh腳本以回復該特定變更。詳情請見referencias/01-metodo-seguro.md。 - 使用相同方法測量前後數據。 沒有起始數據,就無法斷言任何改進。測量方法說明於
referencias/02-medir.md,工具為scripts/medir.py。 - 每次僅變更一項,並啟用/停用來測試。 為確認某項設定是否有幫助,需在有與無該設定的情況下交替測量(A、B、A、B),並進行多次載入。若無改善,則復原變更。
- 未經商店擁有者許可,不得在生產環境進行任何操作,並需事先說明要修改的內容。若有商店複本,應優先在此處測試。
- 檢查最終結果,而非僅看初始狀態。 關鍵頁面的 HTTP 狀態碼應與變更前相同、無新的 JavaScript 錯誤(原有錯誤不計,但需記錄)、圖片正常載入、購物車與結帳流程運作正常。
- 通報每次變更:說明修改了哪些內容、備份位置、如何復原以及測量結果。
工作順序,按效益高低排列
| 步驟 | 內容 | 參考文件 |
|---|---|---|
| 1 | 測量起始狀態(4G 行動網路,首次與再次訪問) | referencias/02-medir.md |
| 2 | 圖片:將產品照、模板圖片與橫幅/CMS 圖片轉為 WebP 格式 | referencias/03-imagenes-webp.md |
| 3 | 阻塞渲染的資源:字型、圖示、jQuery、reCAPTCHA、CCC | referencias/04-bloqueos.md |
| 4 | 靜態資源的瀏覽器快取 | referencias/05-cache-navegador.md |
| 5 | 伺服器:OPcache、MariaDB、PHP-FPM、session、DNS、CPU | referencias/06-servidor.md |
| 6 | 第三方模組:外部呼叫或阻塞渲染 | referencias/07-modulos-terceros.md |
| — | 已踩過的陷阱(開始前請先閱讀) | referencias/08-trampas.md |
最常見的瓶頸幾乎都是圖片:橫幅 PNG 檔案大小常達 2 到 5 MB。在某個商店中,僅將橫幅轉為 WebP 格式,首頁便從 26.5 MB 降至 4.8 MB,完全未動到原始圖片。
工具
| 腳本 | 用途 |
|---|---|
scripts/medir.py | 使用真實瀏覽器(Playwright)模擬行動裝置,搭配低速 4G 網路與 CPU ×4 節流:測量 FCP、LCP、頁面載入大小、請求數、阻塞資源、最重資源及 JavaScript 錯誤,包含首次與再次訪問。 |
scripts/revisar_cache.py | 檢查瀏覽器對 CSS、JS、圖片與字型的快取時間,並確認頁面與 JSON 不被快取。僅讀取,不修改。 |
scripts/webp_al_lado.py | 在圖片所在資料夾中建立 imagen.png.webp 檔案(不修改原始圖片),僅在檔案大小至少減少 10% 時才建立。會留下記錄以便復原。 |
在 plantillas/ 目錄中提供可直接套用的設定範本:Nginx 與 Apache 的 WebP 協商、適用 .htaccess 的安全瀏覽器快取設定、僅在 WebP 檔案存在時才請求的 Smarty partial,以及提供給模組開發者的通知範本。
完成後的通報方式
- 列出每個網站變更了哪些內容,並附上變更前後的數據。
- 說明備份位置與確切的復原指令。
- 說明遺留待辦事項,以及哪些決策需由商店擁有者決定。
- 列出過程中發現但未修改的項目(如原有錯誤、可疑模組)。