作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Paul-Catalin Mestereaga的头像

Paul-Catalin Mestereaga

Paul是一位忠实的线上购物开发人员, 一个真正能干的人, 一个对网络充满热情的人.

工作经验

9

分享

线上购物的性能是至关重要的. 加载速度对网站的转化率有直接和可衡量的影响, 因此,有一个优化的线上购物安装是至关重要的,你的线上购物商店的成功,甚至可能是你的业务一般.

在本文中,我将介绍一些方法 线上购物开发人员 可以优化他们的线上购物 2安装,并解释如何做到以下几点:

  • 检查第三方模块,发现瓶颈
  • 启用整页缓存
  • 清漆,而不是用于整页缓存的文件
  • 确保全页缓存工作,它很容易被破坏
  • 启用生产模式
  • CSS / JS缩小
  • 启用平面表格
  • 获得你能负担得起的最快的托管服务
  • 优化图片
  • 索引器“按时更新”
  • GZIP压缩
  • 在目录页面和搜索中使用Elasticsearch.
  • 检查页面加载后对服务器的不必要的Ajax回调(可能导致会话锁定)
  • Redis用于页面缓存和会话存储

检查第三方模块,发现瓶颈

有很多第三方线上购物模块的代码都很糟糕, 使用不推荐的方法, 或者与最新稳定版本的线上购物存在兼容性问题. 识别繁重请求的最佳方法是使用分析器. 这可以帮助您确定在一个页面上有多少MySQL查询,以及有多少是相同的. 知道了这一点,您就可以将这些查询压缩成一个,从而加快线上购物的速度.

初级开发人员在线上购物中犯的主要错误之一是在循环中加载模型. 尽量避免这种情况. 用所需的所有内容加载整个集合,然后循环遍历它. 始终牢记时间和空间复杂性,并以优化的方式构建算法.

线上购物性能图表

看看你的布局是如何加载的,哪些模板块执行得最慢, 然后查看代码. 查看Model CRUD指标,您可以在其中找到深刻的数据,例如将调用加载到循环中.

线上购物全页缓存

当用户访问您的商店时,将向服务器发出请求. 该请求由PHP处理,执行特定的操作和数据库查询,然后返回要显示给用户的相应HTML. 全页缓存存储HTML响应, 这样下一个相同的请求将直接返回它,跳过所有后端处理和数据库查询. 这使得网站的响应速度更快.

使用全页缓存作为您的线上购物优化工作的一部分,可以极大地提高您的网站速度. 这将创建页面的缓存版本,并将它们交付给用户,而不是为每个请求运行所有查询. 当然,并不是所有的页面都被缓存. 例如, 购物车页面将不会被缓存, 否则, 所有用户都将看到页面的第一个缓存版本. 这些是动态页面或特定于用户和会话的页面部分.

要启用线上购物全页缓存,可以执行以下CLI命令:

PHP bin/线上购物 cache:启用full_页面

需要启用缓存类型,使用CLI命令。

PHP bin/线上购物缓存:启用

您也可以通过以管理员身份登录线上购物 Admin来完成:

  1. 系统 > 工具 > 缓存管理
  2. 选择 高速缓存类型 你想要激活
  3. 行动 下拉选择 启用 并点击 提交

线上购物性能优化截图

全页缓存使用清漆

当启用整页缓存时,使用Varnish来处理它,而不是文件. 线上购物强烈建议在生产中使用Varnish(或Redis). 集成的全页缓存(对文件系统或数据库)比Varnish慢得多, Varnish的设计是为了加速HTTP流量.

你可以找到一个完整的指南 安装和配置清漆 在线上购物 2官方文档中.

要配置线上购物使用Varnish,请以管理员身份登录线上购物 Admin:

  1. 商店 > 配置 > 先进的 > 系统 > 全页缓存
  2. 缓存应用程序 列表中,点击 清漆缓存
  3. 公共内容TTL
  4. 扩大 清漆配置 并输入有关Varnish配置的具体信息

线上购物性能优化全页缓存截图

确保整页缓存工作:它很容易损坏

在线上购物 2中,整页缓存很容易被破坏. 例如,如果要从缓存中排除一个块,则不要使用该属性 缓存= " false " 在XML布局中声明您的块. 这将禁用包含该块的整个页面的缓存,而不仅仅是该块. 这是我见过的人犯过的错误.

寻找 缓存= " false " 属性,并查看它们设置在哪些块上,以及在哪些页面上调用这些块. 这样,您就可以确定无关紧要的页面是否存在缓存问题.

您还可以测试页面是否手动缓存. 在本地或舞台环境中将商店置于开发人员 Mode:

  1. 清除线上购物缓存
  2. 在浏览器中加载页面
  3. 在浏览器调试网络选项卡中检查页面标头.
  4. 查找X-线上购物-Cache-Debug: MISS
  5. 刷新页面,它应该变为HIT

如果它没有变为HIT,则意味着该页没有缓存,缓存不起作用.

不要忘记启用生产模式

线上购物有三种运行模式, 默认的, 开发人员, 生产 模式.

生产模式用于在生产系统上进行部署. 此模式隐藏异常, 仅从缓存中提供静态文件,不允许您启用或禁用线上购物管理中的缓存类型. 它还可以防止自动编译代码文件.

在工作和开发商店的过程中,开发者模式是活跃的. 在将站点部署到实时服务器时,不要忘记切换到生产模式!

查看当前模式的CLI命令为:

PHP bin/线上购物 deploy:模式:show

切换到生产模式的CLI命令如下:

PHP bin/线上购物 deploy:模式:设置生产

切换到开发人员模式的CLI命令如下:

PHP bin/线上购物 deploy:模式:set 开发人员

您可以找到关于不同线上购物模式的更多详细信息 在这里.

CSS / JS缩小

最小化CSSJS文件 是线上购物 2速度优化的重要元素. 通过最小化它们,我们删除了文件中的所有空格、制表符和换行符. 生成的文件字符更少,因此尺寸更小,因此下载速度更快.

线上购物内置了这个功能,你可以在Admin中启用CSS/JS缩小功能. 要启用JavaScript缩小功能,请遵循以下步骤:

  1. 将线上购物置于生产模式
  2. 商店 > 配置 > 先进的 > 开发人员
  3. 最小化Javascript文件 选项 是的
  4. 保存配置
  5. 系统 > 缓存管理 页面

线上购物生产模式截图

要启用CSS缩小功能,需要执行以下步骤:

  1. 将线上购物置于生产模式
  2. 商店 > 配置 > 先进的 > 开发人员 > CSS设置
  3. 最小化CSS文件 选项 是的
  4. 保存配置
  5. 系统 > 缓存管理 页面

线上购物 CSS缩小截图

注意: 不要合并 JS文件 -把它们缩小.

启用平面表

线上购物使用EAV(实体属性值)模型,该模型根据其值类型将实体的属性存储在多个表中. 使用多个表, 检索数据需要多个表上的连接和请求, 哪个会减慢查询速度.

线上购物可以选择为目录和产品使用平面表格. 通过将实体的所有属性合并到一个表中创建平面表. 当请求数据时,我们需要查询一个表,这使得它更快.

线上购物在每个索引上生成和更新平面表. 您可以通过以管理员身份登录线上购物 Admin来启用平面表:

  1. 商店 > 配置 > 目录 > 目录 > 店面
  2. Select 是的使用平面目录类别
  3. Select 是的使用Flat 目录产品
  4. 保存配置

线上购物平面表格截图

选择快速线上购物托管

检查线上购物的最低要求,看看您的服务器是否满足这些要求. 你可以看到官方的线上购物 2.2.X技术栈要求 在这里.

主机配置对于线上购物 2的性能非常重要. 线上购物也有专门的托管服务, 尽管这些可能更多的是关于营销.

底线:获得你能负担得起的最快的托管解决方案,除非它对你的项目来说是多余的.

线上购物图像优化

图片的大小显然会影响网站的速度. 例如, 如果您有一个包含20个产品的目录页面,每个产品图像大小为1Mb, 当页面加载时,总共需要下载20Mb, 在某些情况下(移动设备),这显然是一个问题, 某些地区的带宽有限等.).

检查你的图片是否进行了适当的优化,以及它们的质量和大小之间是否有一个良好的比例. 也, 确保您的图像没有通过CSS调整大小,而是将源文件调整为您需要的特定大小.

另一种技术是使用延迟加载, 这意味着在页面完全加载后才加载图像, 或者当用户滚动目录时.

您还可以使用AWS或CDN来更快地交付内容. 让我们快速了解一下AWS之间的区别, 从位图优化的角度来看CDN和传统主机.

传统的托管

传统的方法是将图像等内容存储在与网站相同的服务器上. 这会占用磁盘空间和很大一部分带宽,从而产生大量的服务器负载. 显然,使用传统主机进行扩展是一个问题.

内容分发网络

内容交付网络通常用于通过提供网站的部分内容来减少服务器的负载. 除此之外, 它通过快速交付内容带来高性能,并通过使用多个网络调用带来高可用性.

AWS (Amazon CloudFront)

Amazon CloudFront是一个高度安全的内容分发网络(CDN),提供网络和应用程序级别的保护. 查看本教程,了解如何开始使用 AWS和更快地交付内容.

除了, 您可以使用AWS根据通过查询参数传递的尺寸动态调整图像的大小. 有关其他信息,请参阅本教程 调整图像与亚马逊CloudFront和Lambda@Edge.

将索引器设置为“定时更新”

线上购物索引器可以设置为两种模式:保存更新” or “进度更新.”

当它们被设置为“保存更新”时,每次你保存一个产品, 属性或类别, 特定索引开始运行. 索引器可能会消耗资源,这可能会降低服务器的速度.

设置索引器的最佳模式是“定时更新”。. 通过这种方式,您可以确保它们在您设置的特定时间由cron作业执行. 选择一个网站流量较低的时间.

执行命令可以查看当前索引器的模式。

PHP bin/线上购物 indexer:show-模式

或者在线上购物 Admin中执行以下命令:

系统 > 指标管理

您可以通过运行命令将索引器模式更改为“定时更新”:

PHP bin/线上购物 indexer:设置模式调度

您可以通过运行命令将索引器模式更改为“保存时更新”:

PHP bin/线上购物 indexer:set-模式 realtime

这是在线上购物管理:

系统 > 索引管理: 选择所有索引器 行动 下拉选择“按计划更新”

图片及文字

您还可以通过进入Admin来配置计划任务:

商店 > 设置 > 配置 > 先进的 > 系统 > Cron(计划任务)

展开“group: index的Cron配置选项”

线上购物 cron配置对话框

GZIP压缩

Gzip是一种压缩文件以提高网络传输速度的方法. 压缩允许您的web服务器提供更小的文件大小,为您的网站用户提供更快的加载速度. 然而,这是有代价的.

在压缩文件时,加载CPU, 压缩文件的次数越多,所需的时间就越长. 尽管这会增加服务器CPU负载, 它还可以大大减少带宽使用. 使用gzip,您可以选择从1到9的不同压缩级别.

在级别1上,压缩时间最快,但压缩比较低. 另一方面,在第9级,你有最高的压缩率,但速度较低. gzip的默认配置使用级别6,更倾向于压缩而不是速度. Nginx使用级别1,更看重速度而不是文件大小.

打开gzip压缩并激活 mod_deflate 模块,您可以通过更新 .Htaccess文件并取消注释,如下所示. 的 mod_deflate 模块在将静态资源传输到浏览器之前将其压缩成较小的文件.



############################################

启用apache服务文件压缩功能
# # http://开发人员.雅虎.com/per为mance/rules.html # gzip

    #在所有内容上插入过滤器
    集OutputFilter缩小
    #只在选定的内容类型上插入过滤器
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json image/svg+xml

    # Netscape 4.X有一些问题...
    ^Mozilla/4 gzip-only-text / html

    # Netscape 4.06-4.我还有一些问题
    BrowserMatch ^ Mozilla / 4 \.0 [678] no-gzip

    MSIE伪装成网景,但没关系
    BrowserMatch \ bMSIE !no-gzip !gzip-only-text / html

    不要压缩图像
    集EnvIfNoCase Request_URI \.(?: gif | jpe?G |png)$ no-gzip不要改变

    #确保代理不会传递错误的内容
    修改User-Agent env=!dont-vary


另一种提高网站速度的方法是使用Elasticsearch来搜索目录页面和搜索结果. 设置Elasticsearch服务器,并将线上购物存储连接到它. 通过使用Elasticsearch,搜索变得更快.

官方指南 解释了如何使用Elasticsearch配置线上购物.

要配置线上购物使用Elasticsearch,请以管理员身份登录线上购物 Admin:

  1. 点击 商店 > 设置 > 配置 > 目录 > 目录 > 目录搜索.
  2. 搜索引擎 列表中,点击 Elasticsearch or Elasticsearch 5.0+ 如下图所示. ( Elasticsearch 5.0+ 选项不可用于线上购物 2.1.)

在线上购物中设置Elasticsearch

检查不必要的Ajax调用

页面加载后回调服务器可能导致会话锁定. 一种方法来检查所有的Ajax调用,你的页面正在做的是通过使用Dev工具在Chrome. 您可以通过右键单击页面并选择Inspect来打开它.

转到网络选项卡,在那里您可以通过XHR过滤请求. 现在,您可以看到页面的所有Ajax请求,并对它们进行检查,以确定哪些请求在特定页面上是必需的.

线上购物中的Ajax调用

Redis用于页面缓存和会话存储

Redis是一个可选的后端缓存解决方案 Zend_Cache_Backend_File,默认情况下在线上购物 2中使用.

为什么使用Redis?

使用Redis有很多好处:

  • 你可以用Redis代替memcached,因为它也可以用于PHP会话存储.
  • Redis支持磁盘上保存和主/从复制, memcached不支持的高要求特性是什么. 复制避免了单点故障并提供了高可用性.
  • 标签操作不需要完全扫描每个缓存文件,因为Redis是通过索引文件中的标签来工作的.
  • 后端支持基于标记的缓存清理,不需要为each循环.

还有一个主要的缺点:

  • 因为Redis是一个内存存储, 所有数据都必须装入内存, 这意味着它只受RAM速度和容量的限制.

配置线上购物使用Redis进行会话存储

下面是要添加的样例配置 app/etc/env.php:

'session' =>
阵列(
  'save' => '复述,',
  '复述,' =>
  阵列(
    'host' => '127.0.0.1',
    'port' => '6379',
    'password' => '',
    'timeout' => '2.5',
    'persistent_identifier' => '',
    'database' => '2',
    'compression_threshold' => '2048',
    'compression_library' => 'gzip',
    'log_level' => '1',
    'max_concurrency' => '6',
    'break_after_frontend' => '5',
    'break_after_adminhtml' => '30',
    'first_lifetime' => '600',
    'bot_first_lifetime' => '60',
    'bot_lifetime' => '7200',
    'disable_locking' => '0',
    'min_lifetime' => '60',
    'max_lifetime' => '2592000'
  )
),

你可以检查一下 在这里 所有关于参数的细节, 以及如何做一个基本的验证,你的Redis安装与你的线上购物一起工作良好.

配置线上购物使用Redis作为页面和默认缓存

有两种方法来配置Redis页面和默认缓存. 你可以手动编辑 <线上购物 install dir>app/etc/env.php 文件,也可以使用命令行, 哪种方法是推荐的,因为它还提供验证.

对于默认缓存,运行命令:

php bin/线上购物 setup:config:set --cache-backend=复述, --cache-backend-复述,-=...

指定特定于Redis默认缓存的参数.

对于页面缓存,运行命令:

Php bin/线上购物 setup:config:set——页面-cache=复述,——页面-cache-复述,-server=复述,.例子.com——页面-cache-复述,-db = 1

该命令启用Redis页面缓存,将主机设置为 复述,.例子.com 并将数据库号赋值为1. 你可以查看线上购物上的所有细节 DevDocs.

线上购物性能优化总结

我们已经介绍了相当多的线上购物 2性能优化方法, 让我们快速回顾一下.

识别和解决瓶颈将对数据处理产生巨大影响. 使用全页缓存和清漆也会提高你的网站速度和加速HTTP流量. 您应该始终在生产模式下使用线上购物在您的实时服务器上,没有借口. 使用最小化来减小CSS和 JS文件,较小的文件下载速度更快,占用的带宽也更少.

启用平面表可以减少数据库请求并改进数据库响应时间. 如果可能的话,优化您的图像并使用CDN. 将索引器设置为定期更新并启用线上购物 cron. 启用gzip压缩也会减少要下载的文件的大小. 使用Elasticsearch将提高目录页面的速度,搜索结果页面将加载得更快. 使用Redis进行页面缓存和会话存储,这比默认的memcache要快得多.

您可以实现所有这些建议,也可以只实现一些到目前为止还没有使用过的建议. 甚至一对应该足以提高线上购物的性能, 这应该有希望转化成更多的转换.

了解基本知识

  • 什么是线上购物?

    线上购物是一个建立在开源技术之上的现代电子商务平台,它超越了购物车系统, 为B2C提供强大的工具, B2B, 和B2B2C.

  • 线上购物是用什么语言写的?

    线上购物用PHP编写.

  • 什么是线上购物 Cloud?

    线上购物商务云是专门为云基础设施创建的线上购物托管和自动化托管平台. 这个版本结合了线上购物 Commerce和云基础设施托管, 有一些不同和添加的功能.

  • 为什么使用线上购物 2?

    线上购物 2是为增长和灵活性而设计的. 它可以提供无缝的购物体验, 降低业务成本, 自动执行重复性任务,节省数小时的人工工作. 此外,通过灵活和用户友好,线上购物可以快速进入市场.

  • 如何加速线上购物 2?

    使用整页缓存、清漆和启用平面表. 对CSS和JS文件使用最小化. 如果可能的话,优化图像并使用CDN. 将索引器设置为定期更新. 启用线上购物 cron和gzip压缩. 使用Elasticsearch进行目录和搜索. 使用Redis进行页面缓存和会话存储.

  • 线上购物 2是免费的吗?

    线上购物 2提供免费和付费两种版本. 提供的解决方案是线上购物 Open Source和线上购物 Commerce. 线上购物开源对每个人都是免费的. 线上购物 Commerce是一个付费解决方案,也可以托管在线上购物自己的云上, 线上购物商务云.

聘请Toptal这方面的专家.
现在雇佣
Paul-Catalin Mestereaga的头像
Paul-Catalin Mestereaga

位于 Timișoara,罗马尼亚蒂米米特县

成员自 2017年3月29日

作者简介

Paul是一位忠实的线上购物开发人员, 一个真正能干的人, 一个对网络充满热情的人.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

工作经验

9

世界级的文章,每周发一次.

<为m aria-label="Sticky subscribe 为m" class="-Ulx1zbi P7bQLARO _2ABsLCza">

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

<为m aria-label="Bottom subscribe 为m" class="-Ulx1zbi P7bQLARO _2ABsLCza">

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.