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、会话、DNS、CPU | referencias/06-servidor.md |
| 6 | 审查调用外部资源或导致阻塞的第三方模块 | referencias/07-modulos-terceros.md |
| — | 已踩过的坑(开始前务必阅读) | referencias/08-trampas.md |
绝大多数情况下,图片 是最大的性能瓶颈:2 到 5 MB 的 PNG 横幅屡见不鲜。在某家店铺中,仅通过将横幅转换为 WebP,首页大小就从 26.5 MB 降到了 4.8 MB,且未改动任何原始图片。
工具
| 脚本 | 用途 |
|---|---|
scripts/medir.py | 使用真实浏览器(Playwright)模拟移动端 4G 慢速网络和 CPU 4x 降速:测量 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 模板片段,以及给模块开发人员的通知模板。
如何撰写最终报告
- 按网站列出所有更改,并提供更改前后的性能数据。
- 指出备份位置和精确的撤销命令。
- 说明哪些工作尚未完成,以及需要店铺所有者做出哪些决策。
- 报告过程中发现但未改动的问题(如已有的错误、可疑的模块)。