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的方案,虽然效果比不上整页缓存,但胜在灵活,安全,适应性强。
个人肤浅的观点,欢迎拍砖!
magento -- 给Magento提速之缓存上的探索的更多相关文章
- magento currency magento头部增加币种切换选择
magento currency magento头部增加币种切换选择 默认magento 货币选择切换是显示在左边 有时候我们需要让其显示在头部 Step 1. Create a new file a ...
- JuiceFS 在数据湖存储架构上的探索
大家好,我是来自 Juicedata 的高昌健,今天想跟大家分享的主题是<JuiceFS 在数据湖存储架构上的探索>,以下是今天分享的提纲: 首先我会简单的介绍一下大数据存储架构变迁以及它 ...
- 涂鸦基于OAuth2在开发者平台上的探索与实践
前言 开发授权(OAuth2)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资料(如照片.视频.联系人列表),而无需将用户名和密码提供给第三方应用. OAuth2允许用户提供一 ...
- magento -- 如何在magento中进行产品的批量上传
花费了好多时间,阅读了magento官方论坛上几乎所有的批量上传产品的相关帖子,分析了大量相关magento代码,终于可以完全实现指产品批量上传的功能,免除网速慢,在页面之间跳来跳去,以及重复输入数据 ...
- magento -- 解决magento错误:ERROR: Base table or view already exists: 1050 Table ... already exists
相信有更新magento或者,备份转移magento站点的时候可能会碰到类似这样的错误提示: Base table or view already exists: 1050 Table ... alr ...
- HTML 5 应用程序缓存(上)
什么是应用程序缓存(Application Cache)?HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: 离线浏览 ...
- NHibernate系列文章九:NHibernate对象二级缓存上
摘要 NHibernate的二级缓存由SessionFactory管理,由所有Session共享. NHibernate缓存读取顺序: 首先从一级缓存中读取,如果一级缓存对象存在,则读取一级缓存对象并 ...
- magento cache,magento index
"Magento后台作修改,Magento前台没变化""Magento属性更新了,Magento前台没反应"如果你碰到了以上两种情况,或者看到截图中的提示: 您 ...
- 带着新人学springboot的应用01(springboot+mybatis+缓存 上)
上一篇结束,第一次做一个这么长的系列,很多东西我也是没有说到,也许是还没有想到,哈哈哈,不过基本的东西还是说的差不多了的.假如以后碰到了不会的,随便查查资料配置一下就ok. 咳,还有大家如果把我前面的 ...
随机推荐
- new JSONObject(str)无法解析 报错:org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject
org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject 解析服务器返回的Jso ...
- LeetCode--021--合并两个有序链表
问题描述: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1- ...
- Java基础-this关键字和构造方法(10)
this关键字 方法被哪个对象调用,this就代表那个对象当局部变量隐藏成员变量时,使用this关键字(例如构造方法和访问器). 构造方法 构造方法作用概述 给对象的数据进行初始化 构造方法格式 方法 ...
- Nanami's Digital Board CodeForces - 434B (棋盘dp)
大意: 给定01矩阵, m个操作, 操作1翻转一个点, 操作2求边界包含给定点的最大全1子矩阵 暴力枚举矩形高度, 双指针统计答案 #include <iostream> #include ...
- Up and Down the Tree CodeForces - 1065F (树形dp)
链接 题目大意:给定$n$结点树, 假设当前在结点$v$, 有两种操作 $(1)$移动到$v$的子树内任意一个叶子上 $(2)$若$v$为叶子, 可以移动到距离$v$不超过$k$的祖先上 初始在结点$ ...
- python-day49--前端 css-层叠样式表
1.css功能: 对html标签的渲染和布局 2.CSS 要掌握的两方面: 1.查找标签 选择器 2.操作标签 (对属性进行操作) 3.CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一 ...
- thinkphp导出报表
这是我写的一个方法,这个方法可以直接使用在你的代码上.下面我画红色的就是要修改或者删除的.public function import(){ /*创建PHPEXCLE读取,默认excel2007,最好 ...
- bfs,dfs区别
一般来说用DFS解决的问题都可以用BFS来解决. DFS(深搜的同时考虑回溯) bfs=队列,入队列,出队列:dfs=栈,压栈,出栈 bfs是按一层一层来访问的,所以适合有目标求最短路的步数,你想想层 ...
- 破解VS
- python 爬虫之为什么使用opener对象以及为什么要创建全局默认的opener对象
基本的urlopen()函数不支持验证.cookie或其他HTTP高级功能.要支持这些功能,必须使用build_opener()函数来创建自己的自定义Opener对象. install_opener( ...