一个大图切成几个小图加载速度更快_「原创」5年实战经验换来的Magento速度优化秘籍(上)...

ec1d848bc6d84d9df6f347aec72eec07.png

5年实战经验换来的Magento速度优化秘籍

本文试图成为Magento速度优化的完整文档,它包含一些非常容易实现的的建议。

PS:本文均使用英文版截图,请谅解。


直接说重点文章提纲,本篇文章主要包含以下几大部分内容:

  • 高速缓存
  • 前端优化
  • HTTP/2
  • 服务器配置

高速缓存

  缓存Cache充当用户和Web服务器之间的缓冲区。向访问者提供缓存的网页要比为每次浏览器刷新释放Magento的全部功能简单得多。

cc7d5a91c2f456424866b197b084a856.png

缓存设置页面

  上图为Magento 2.x的后台缓存设置页面,每一项设置都可以提高Magento的加载速度,但是最重要的一个设置项还是“full page cache(全页缓存)”

为什么说缓存这么重要?

  • 当许多用户浏览网站时,缓存可以提供稳定性。

  我们针对Magento网站进行了LoadImpact测试,可以快速的帮助你了解缓存的重要性。

427f4f4e02dd8ea140f0ac8ee875c736.png

所有缓存都已停用

  从上图可以看出,大约达到30个并发用户时,服务器崩溃了。

03a2ee798d9b4125c351adeac42324e4.png

所有缓存都开启状态

  当所有缓存都开启的时候,加载时间稳定在800毫秒,不到1秒就加载完毕了。

  • 我们获得了更快的TTFB(服务器响应时间)

  下面我们将使用不同的缓存类型进行测试,比较一下Magento 2网站的响应时间

f9a7926963da5704da97f68aa4796718.png

不同缓存加载时间

  从上面的数据看来Varnish和Redis全页缓存引擎是最好的选择。两者都使用内存存储引擎,使得缓存服务比文件系统选项更快(PS:Magento从1.8才开始支持Redis,Magento 2.x才支持Varnish)。

  • 缓存会降低服务器的压力,直接影响您的预算(直接关乎到服务器的硬件性能)。
  • 缓存对SEO也至关重要。

高级Tips:预缓存

  要使缓存设置在我们的所有页面上工作,有一个前提条件:必须有访问者先访问它们(页面)。

  我们可以通过创建一个定时任务来完成,通过创建一个bash脚本,从XML站点地图中提取每个URL,然后进行预缓存。

96bbaa00f35b41af9028ec07fded917a.png

定时任务脚本

个人建议:最好在访问量低的时候运行bash脚本,要不然,服务器资源耗尽不负责哦。哈哈哈

e3f81ed2a81a36d3c16a4ec7d6e7c785.png

前端优化

  Magento内置压缩功能,将所有CSS以及JS合并为一个文件(css一个文件,js一个文件),将能够极大的提升请求的速度。合并后我们只有2个文件全球,而不是让用户的浏览器发送10到20个请求。

  最重要的是,如果我们合并并且压缩文件,我们也可以从请求文件的大小中受益,获得更快的加载速度。

  但是现在有了新的障碍,例如:移动连接速度慢糟糕的https配置对HTTP/2的兼容等等。

  在Magento 2.x 上有一个全新的优化页面, 具体路径:Stores > [Settings] > Configuration > [Advanced] > Developer

7ce1fc97702e1bfb88dc443d907e4efc.png

Developer页面

对于Javascript,我们可以设置:

  • merge:JS的一个主文件,但我们仍然有来自require.js的单独请求
  • bundle:将所有javascript文件分组成几个包(减少请求数)
  • minify:从JS文件中删除空格(减小它们的大小)

请注意,同时使用merge和bundle很容易出错。

对于CSS来说,它很简单:

  • merge:单个文件的所有CSS(减少请求数)
  • minify:从CSS中删除空格(减小文件大小)

看一下测试结果

e8510cdfef56aa0bfea51c7ae0638e6c.png

Google Pagespeed

dee7ce6745dea7b54ea352debfeae6ea.png

webpagetest

194ada6a827c4f897e3425e0db515351.png

audits

PS:所有的速度测试都是在生产模式下进行的。


HTTP/2

  • 如何解释HTTP/2的过人之处,使用一张图即可。
d6a7b2122df9486fe12c3809fc2ff067.gif

http/2

  需要注意的是:HTTP/2仅通过HTTPS运行。要检查它是否适合,请在Chrome控制台中打开“Network ”选项卡:

d35a9d2c93e9fc1b6c05fcf4e5a72a97.png

network

  因为大多数现代浏览器都支持它,所以不利用HTTP/2将是一种浪费。

f838def748ef629a61febbfd29b22f72.png

http/2支持的浏览器

  • 何时使用CDN

  CDN总是很有用,因为它会缓存静态内容,如CSS,Javascript,图像文件,字体等。这样,我们可以更快地响应它们。我认为结果不言而喻!例如:图像加载时间可以快20倍以上。

  如果您的访问者分布在世界各地,那么CDN带来的价值就更加明显,使用了CDN服务后,访问者将从最近的服务器提供服务。

  大多数CDN都使用HTTP/2。由于在服务器上使用HTTP/2有点棘手,因此CDN可能是最简单的方法。

PS:这里推荐2个服务商Cloudflare和Amazon CloudFront,没有理由不去试试吧!

ca746ba84b76a7dcfa6160ec07519046.png

服务器配置

  最后,我们来谈谈服务器配置,我们需要讨论的不是关于服务器的硬件,而是你如何配置它。我们曾看到很多电商平台,在非常高性能的的机器上运行Magento,但是站点表现实在是有点糟糕。

那么我们来讨论下如何设置一个高效的服务器

  • Web服务器:nginx与Apache对比IIS

  首先,不建议使用Windows,nginx和Apache哪个更好呢?经过测试发现,2个其实都各有千秋。

 其实我们的做法是,Apache和nginx配合使用,设置如下所示:

  1. nginx作为第一层
  2. 设置nginx来处理静态文件(JS,CSS,图像,字体等)
  3. 使用nginx作为Apache的反向代理
  4. 留给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应该表现更好,但只有通过测试才能找到最适合自己的。

  设置任何一个通常涉及三个步骤:

  1. 安装Redis / Memcached
  2. 安装与Redis / Memcached通信的PHP扩展(在某些情况下是可选的)
  3. 配置Magento以在Redis / Memcached中存储会话

最终结语

  也许我们的经验不是最专业的,但是你可能会看到,其实提升Magento性能不是那么困难,只是很多事情要处理。

  希望我们的经验,能够帮助到你。

  关注我们-获取更多的IT干货

声明:本文章首发于今日头条,转载请注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值