magento -- 给Magento提速之缓存上的探索

简介:

依然在为Magento提速做努力,除了自带的缓存和编译,之前的所作的很多努力都是从减少JS,Css,图片等载入时间入手,而对页面载入耗时最早有时也是最大的一部分--获取页面数据没有做太多处理,以gap.cn为例,用firebug看下各个请求的耗时(数据受多方面因素影响,仅供参考):

 

可以看到js和css的载入时间一般是以几十毫秒来计算的,而载入的第一步页面数据却要花掉将近一秒,在用各种方法缩短js,css和图片的载入时间后,想要让Magento跑的更快,就得想办法从缩短这“781ms”处下手。

 

因为Magento复杂的代码架构和EAV模式的数据库,导致每次页面载入都要读取大量的php文件和大量的数据表,自带的缓存将一些常用的数据缓存到了文件里,而不需要每次都去读取数据库,这提醒了我们一种思路,就是将页面上常用的数据都缓存起来,减少读取php文件和数据库的需要。不记得在哪里看到过一篇文章提到,Magento自带的缓存方案相当保守,缓存的数据很少,页面载入时依然要从数据库读取大量的数据。我们所要做的就是改进缓存的方案,将更多数据缓存到文件中去。

 

我对缓存的研究不是很深,个人理解大概分两种,一种是整页缓存,一种是局部缓存,以我测试过的两个缓存插件为例阐述下观点。

 

第一个插件是一个整页缓存的插件--Performance Booster,官网上的地址是http://www.magentocommerce.com/magento-connect/AITOC,+Inc./extension/4865/performance_booster,这个插件开启后,会在前台每访问一个页面后就生成一个静态html,下次再访问相同页面时会直接读取静态文件的内容,速度提升相当明显,能将第一步html的载入时间从几百毫秒直接提升到几十毫秒。这个插件的代码里监听了一大堆事件,用来刷新缓存,比如后台修改产品信息后保持的时候会刷新对应的缓存。

 

按说这个插件已经将可能需要刷新缓存的状况都考虑到了,但我在使用的时候却遇到了麻烦。因为Magento是个高度开放的系统,可以安装各种各样的第三方插件,也可以自己写一些新模块进去。插件不可能考虑到除了系统自带模块以外需要刷新缓存的情况,这就导致了页面某些部分在后台数据已经改变的情况下前台没有刷新或者有一些功能块直接出现异常无法使用。而我所经手的项目大多都装有不少插件,以及自己所做的修改,所以很难有机会用上这个插件了。

 

第二个插件是一个免费插件--CatalogCache,官网上的地址是http://www.magentocommerce.com/magento-connect/netresearch/extension/2138/catalogcache,这个插件功能很简单,就是缓存了Catalog/Product_View和Catalog/Product_List这两个block的数据,对页面上来说,也就是缓存了产品列表页的产品数据和产品详细页的产品数据,只缓存局部,而不是整个页面。经测试,在产品数比较多的列表页和产品页,开启这个插件后能带来大概100ms--到200ms不等的速度提升。因为只缓存了两个block,所以插件也只对列表页和产品页起效果。

 

这个插件功能简单,针对性强,所以也不用担心会对列表页和产品页以外的东西造成影响,经过一段时间测试没问题后已经用在了正式的项目上。当然推荐这个插件并不是这篇文章的主要目的,而是这个插件让我觉得用同样的方式给各种常用block写缓存是种安全而又实用的方式,虽然效果上肯定比不上直接读静态文件来得快,但因为是自己一块块写的,不需要担心整页缓存时会有哪一块遗漏了没有照顾到。也就是说,不管你添加了多少第三方插件,或者自己写了多少功能,依然可以用这种方式来做优化,自己选择性的给局部做缓存。

 

得出我自己的观点,整页缓存的适应性不够好,无法应对各种不同的项目情况,如果你的Magento站只是在默认功能上套了个模板,可以尝试下第一个插件,如果项目有不少第三方插件,甚至做了不少二次开发,那么就放弃整页缓存方案。所以局部缓存才是我认为最适合Magento的方案,虽然效果比不上整页缓存,但胜在灵活,安全,适应性强。

 

个人肤浅的观点,欢迎拍砖!

目录
相关文章
poi 生成word 表格,并向表格单元格中插入多个图片
poi 生成word 表格,并向表格单元格中插入多个图片
683 0
poi 生成word 表格,并向表格单元格中插入多个图片
|
开发工具 git
部署hexo遇到报错ERROR Deployer not found: git的解决办法
部署hexo遇到报错ERROR Deployer not found: git的解决办法
913 0
|
消息中间件 存储 算法
G1垃圾收集器
G1垃圾收集器
1386 0
G1垃圾收集器
|
机器学习/深度学习 人工智能 安全
CVPR 2022|跨域检测新任务,北航、讯飞提出内生偏移自适应基准和噪声抑制网络
一篇由北京航空航天大学、科大讯飞研究院共同完成的研究入选 CVPR 2022。
838 1
CVPR 2022|跨域检测新任务,北航、讯飞提出内生偏移自适应基准和噪声抑制网络
|
算法 图形学 数据安全/隐私保护
Unity 之 音频类型和编码格式介绍
Inspector窗口显示多个导入设置。这些设置决定了:加载行为,压缩行为,质量,采样率,以及是否支持双声道音频。
716 0
Unity 之 音频类型和编码格式介绍
|
数据可视化 机器人 API
DingTalk「开发者说」钉钉连接平台,企业自建场景下如何实现系统互通
钉钉连接平台通过简单的低代码配置,帮助企业迅捷实现系统集成和连接,降低集成实施的周期和成本。本文主要介绍在企业自建场景下,如何使用连接平台的连接流实现系统互通,包括三个案例分享:1. 会议室预定后发送机器人通知;2. 企业报警信息通过机器人发送到群;3. 销帮帮新增客户同步到企业内部系统。
2460 0
DingTalk「开发者说」钉钉连接平台,企业自建场景下如何实现系统互通
|
Linux Android开发 芯片
RK3568开发笔记(二):入手RK3568开发板的套件介绍、底板介绍和外设测试
本篇主要介绍RK3568芯片和入手开发板的底板介绍以及开发板的外设。
RK3568开发笔记(二):入手RK3568开发板的套件介绍、底板介绍和外设测试
|
easyexcel Java 数据挖掘
阿里出品Excel工具EasyExcel使用小结
笔者做小数据和零号提数工具人已经有一段时间,服务的对象是运营和商务的大佬,一般要求导出的数据是Excel文件,考虑到初创团队机器资源十分有限的前提下,选用了阿里出品的Excel工具EasyExcel。这里简单分享一下EasyExcel的使用心得。EasyExcel从其依赖树来看是对apache-poi的封装,笔者从开始接触Excel处理就选用了EasyExcel,避免了广泛流传的apache-poi导致的内存泄漏问题。
729 0
|
iOS开发 Perl
flutter和iOS原生混合开发流程
熟悉flutter开发的人都知道,flutter和移动端原生混合开发的方式有两种: 一种是以flutter项目为主,使用plugin插件的方式将原生部分集成到flutter项目中; 另一种则是把flutter部分作为一个模块嵌入到原生的项目中。 作为一名iOSer,今天来介绍一下flutter和iOS原生项目混合开发的流程。
flutter和iOS原生混合开发流程
|
SQL 存储 分布式计算
Flink 的应用场景和架构模型
在过去的十年里,面向数据时代的实时计算技术接踵而至。从我们最初认识的 Storm,再到 Spark 的异军突起,迅速占领了整个实时计算领域。直到 2019 年 1 月底,阿里巴巴内部版本 Flink 正式开源!一石激起千层浪,Flink 开源的消息立刻刷爆朋友圈,整个大数据计算领域一直以来由 Spark 独领风骚,瞬间成为两强争霸的时代。 Apache Flink(以下简称 Flink)以其先进的设计理念、强大的计算能力备受关注,如何将 Flink 快速应用在生产环境中,更好的与现有的大数据生态技术完美结合,充分挖掘数据的潜力,成为了众多开发者面临的难题。
1758 0
Flink 的应用场景和架构模型