![ec1d848bc6d84d9df6f347aec72eec07.png](https://i-blog.csdnimg.cn/blog_migrate/6830f6f9516f748019e90b3553c4a662.jpeg)
5年实战经验换来的Magento速度优化秘籍
本文试图成为Magento速度优化的完整文档,它包含一些非常容易实现的的建议。
PS:本文均使用英文版截图,请谅解。
直接说重点文章提纲,本篇文章主要包含以下几大部分内容:
- 高速缓存
- 前端优化
- HTTP/2
- 服务器配置
高速缓存
缓存Cache充当用户和Web服务器之间的缓冲区。向访问者提供缓存的网页要比为每次浏览器刷新释放Magento的全部功能简单得多。
![cc7d5a91c2f456424866b197b084a856.png](https://i-blog.csdnimg.cn/blog_migrate/2159d89c8da9c26ceaa9f12b6389b9b5.jpeg)
缓存设置页面
上图为Magento 2.x的后台缓存设置页面,每一项设置都可以提高Magento的加载速度,但是最重要的一个设置项还是“full page cache(全页缓存)”
为什么说缓存这么重要?
- 当许多用户浏览网站时,缓存可以提供稳定性。
我们针对Magento网站进行了LoadImpact测试,可以快速的帮助你了解缓存的重要性。
![427f4f4e02dd8ea140f0ac8ee875c736.png](https://i-blog.csdnimg.cn/blog_migrate/8bff26d8aa7e322d8a3ec4d55f3eaa67.jpeg)
所有缓存都已停用
从上图可以看出,大约达到30个并发用户时,服务器崩溃了。
![03a2ee798d9b4125c351adeac42324e4.png](https://i-blog.csdnimg.cn/blog_migrate/6f277edaa5687ea436cd7cbe114ca7df.jpeg)
所有缓存都开启状态
当所有缓存都开启的时候,加载时间稳定在800毫秒,不到1秒就加载完毕了。
- 我们获得了更快的TTFB(服务器响应时间)
下面我们将使用不同的缓存类型进行测试,比较一下Magento 2网站的响应时间
![f9a7926963da5704da97f68aa4796718.png](https://i-blog.csdnimg.cn/blog_migrate/2608a0659fc128aaa45c93348aedd3c7.jpeg)
不同缓存加载时间
从上面的数据看来Varnish和Redis全页缓存引擎是最好的选择。两者都使用内存存储引擎,使得缓存服务比文件系统选项更快(PS:Magento从1.8才开始支持Redis,Magento 2.x才支持Varnish)。
- 缓存会降低服务器的压力,直接影响您的预算(直接关乎到服务器的硬件性能)。
- 缓存对SEO也至关重要。
高级Tips:预缓存
要使缓存设置在我们的所有页面上工作,有一个前提条件:必须有访问者先访问它们(页面)。
我们可以通过创建一个定时任务来完成,通过创建一个bash脚本,从XML站点地图中提取每个URL,然后进行预缓存。
![96bbaa00f35b41af9028ec07fded917a.png](https://i-blog.csdnimg.cn/blog_migrate/10bfdc004229053dda725e591a570211.jpeg)
定时任务脚本
个人建议:最好在访问量低的时候运行bash脚本,要不然,服务器资源耗尽不负责哦。哈哈哈
![e3f81ed2a81a36d3c16a4ec7d6e7c785.png](https://i-blog.csdnimg.cn/blog_migrate/68e3e4f4220ae0d96ea414ce5c6b8a35.jpeg)
前端优化
Magento内置压缩功能,将所有CSS以及JS合并为一个文件(css一个文件,js一个文件),将能够极大的提升请求的速度。合并后我们只有2个文件全球,而不是让用户的浏览器发送10到20个请求。
最重要的是,如果我们合并并且压缩文件,我们也可以从请求文件的大小中受益,获得更快的加载速度。
但是现在有了新的障碍,例如:移动连接速度慢、糟糕的https配置、对HTTP/2的兼容等等。
在Magento 2.x 上有一个全新的优化页面, 具体路径:Stores > [Settings] > Configuration > [Advanced] > Developer
![7ce1fc97702e1bfb88dc443d907e4efc.png](https://i-blog.csdnimg.cn/blog_migrate/dc7f73e544ac717acc4eed6d67c7e03b.jpeg)
Developer页面
对于Javascript,我们可以设置:
- merge:JS的一个主文件,但我们仍然有来自require.js的单独请求
- bundle:将所有javascript文件分组成几个包(减少请求数)
- minify:从JS文件中删除空格(减小它们的大小)
请注意,同时使用merge和bundle很容易出错。
对于CSS来说,它很简单:
- merge:单个文件的所有CSS(减少请求数)
- minify:从CSS中删除空格(减小文件大小)
看一下测试结果
![e8510cdfef56aa0bfea51c7ae0638e6c.png](https://i-blog.csdnimg.cn/blog_migrate/437201bbd9120bbd42cf93e184685283.jpeg)
Google Pagespeed
![dee7ce6745dea7b54ea352debfeae6ea.png](https://i-blog.csdnimg.cn/blog_migrate/0fa132dc2b9a95ac64fd7bbab4a4374b.jpeg)
webpagetest
![194ada6a827c4f897e3425e0db515351.png](https://i-blog.csdnimg.cn/blog_migrate/d439acc04d484b27d30d7fee41ff418e.jpeg)
audits
PS:所有的速度测试都是在生产模式下进行的。
HTTP/2
- 如何解释HTTP/2的过人之处,使用一张图即可。
![d6a7b2122df9486fe12c3809fc2ff067.gif](https://i-blog.csdnimg.cn/blog_migrate/7134e1cd7994f7aff5504b1894ec08ac.gif)
http/2
需要注意的是:HTTP/2仅通过HTTPS运行。要检查它是否适合,请在Chrome控制台中打开“Network ”选项卡:
![d35a9d2c93e9fc1b6c05fcf4e5a72a97.png](https://i-blog.csdnimg.cn/blog_migrate/8cf4363e240f8bf3a2b71e5b1cf28629.jpeg)
network
因为大多数现代浏览器都支持它,所以不利用HTTP/2将是一种浪费。
![f838def748ef629a61febbfd29b22f72.png](https://i-blog.csdnimg.cn/blog_migrate/4d45dede303004a157f6f2be8ceafe3a.jpeg)
http/2支持的浏览器
- 何时使用CDN
CDN总是很有用,因为它会缓存静态内容,如CSS,Javascript,图像文件,字体等。这样,我们可以更快地响应它们。我认为结果不言而喻!例如:图像加载时间可以快20倍以上。
如果您的访问者分布在世界各地,那么CDN带来的价值就更加明显,使用了CDN服务后,访问者将从最近的服务器提供服务。
大多数CDN都使用HTTP/2。由于在服务器上使用HTTP/2有点棘手,因此CDN可能是最简单的方法。
PS:这里推荐2个服务商Cloudflare和Amazon CloudFront,没有理由不去试试吧!
![ca746ba84b76a7dcfa6160ec07519046.png](https://i-blog.csdnimg.cn/blog_migrate/473a856c19f7860f9d154982a11d5271.jpeg)
服务器配置
最后,我们来谈谈服务器配置,我们需要讨论的不是关于服务器的硬件,而是你如何配置它。我们曾看到很多电商平台,在非常高性能的的机器上运行Magento,但是站点表现实在是有点糟糕。
那么我们来讨论下如何设置一个高效的服务器
- Web服务器:nginx与Apache对比IIS
首先,不建议使用Windows,nginx和Apache哪个更好呢?经过测试发现,2个其实都各有千秋。
其实我们的做法是,Apache和nginx配合使用,设置如下所示:
- nginx作为第一层
- 设置nginx来处理静态文件(JS,CSS,图像,字体等)
- 使用nginx作为Apache的反向代理
- 留给Apache来处理PHP处理
通过这种方式,我们在nginx上做他们擅长的服务静态文件、在Apache处理繁重的PHP负载。
- PHP版本
记住一个重要的事情是:与PHP 5.x版本相比,Magento在PHP7上运行得更好。
更重要的是,从版本2.2开始,它仅支持高于7的版本。
- 使用OPcache
这是一个加速代码的PHP服务器扩展。为了能够使用OPcache,您必须小心使用PHP处理程序,因为有些设置会阻止缓存。
- 数据库
个人建议用MariaDB或Percona替换标准MySQL 可以提供更好的体验。
这些是MySQL分支,旨在提供卓越的可扩展性。他们都使用名为XtraDB的存储引擎,允许使用高可用性集群。
另外,调整数据库设置的最佳方法是使用像mysqltuner这样的简单工具。
- Redis和Memcache来救援
两者都是功能强大的内存存储引擎,可以提高有大量访问者的网站的性能。您将获得最好的结果:稳定性和速度。
从理论上讲,Redis应该表现更好,但只有通过测试才能找到最适合自己的。
设置任何一个通常涉及三个步骤:
- 安装Redis / Memcached
- 安装与Redis / Memcached通信的PHP扩展(在某些情况下是可选的)
- 配置Magento以在Redis / Memcached中存储会话
最终结语
也许我们的经验不是最专业的,但是你可能会看到,其实提升Magento性能不是那么困难,只是很多事情要处理。
希望我们的经验,能够帮助到你。
关注我们-获取更多的IT干货
声明:本文章首发于今日头条,转载请注明出处