Magento的灵活性带来的负担一例

Magento的架构设计的非常灵活,官方的考虑是希望架构能够适应可能遇见的所有情况,其中最重要的一部分是EAV模式的设计(也是被很多人又爱又恨的一块)。在实际应用中,每个网站总是有各自实际的固定情况,而不用像官方做产品那样去照顾方方面面,这个时候灵活的架构设计有时候反而会成为系统性能上的负担。不过我给的这个例子不是跟高大上的EAV相关的,也不一定是实际应用中最需要改的位置,只能算是抛砖引玉,给别人也给自己提个醒。

用Magento搭建的卖服装的网站,一般会用可配置商品(Configurable
Product)来管理商品,选择颜色和尺码(原生不自带)属性来做配置项。Magento系统的可配置商品理论上可以用三个,四个甚至更多个属性来作为配置项,因此它的代码结构设计上支持可配置商品用无限多个属性配置项,而实际业务中,可配置商品最多会用到两个属性配置项,比如服装类的颜色和尺码(不排除有少数特殊的品类会用到多个,但总归是有限的),这种情况下原生的代码在性能上可能就会成拖后腿的了。

if ($this->_isStrictProcessMode($processMode)) {
                    foreach($this->getConfigurableAttributes($product) as $attributeItem){
                        /* @var $attributeItem Varien_Object*/
                        $attrId = $attributeItem->getData('attribute_id');
                        if(!isset($attributes[$attrId]) || empty($attributes[$attrId])) {
                            $subProduct = null;
                            break;
                        }
                    }
                }

上面这段代码出自Mage_Catalog_Model_Product_Type_Configurable里的_prepareProduct方法,目的是为了在商品加购物车时验证接收的参数中,属性id(比如颜色默认是80)是否与该可配置商品所含有的配置项属性对应。为了取出商品包含的两个属性的id(以颜色和尺码为例),这里使用了getConfigurableAttributes这个方法来动态的从数据库中获取。而事实上,在网站实际运作中,我们后台添加完属性时就已经知道了这俩个属性的id(颜色系统自带,id为80,新增的尺码在我的开发环境里id是133),没有必要再一次从数据库中去获取。

可能有人觉得从数据库获取一下这个数据所带来的负担微不足道,一方面我上面已经提到只是举个例子,做个抛砖引玉,提醒下大家在开发中可以考虑这个优化角度,另一方面,这个例子其实还是特地挑出来的,getConfigurableAttributes这个方法附带连锁的代码有不少,当颜色属性的选项数超过40个时,每次添加购物车时,这段代码会造成多0.4秒的时间消耗(本机开发环境实测),如果颜色和尺码属性各自的选项数量更大时,这段代码所消耗时间还会更长,相比直接硬编码已知的id80和id133,区别已经到了肉眼可见的程度。至于为什么getConfigurableAttributes方法会有这种情况,我这里就不细说了,有兴趣的可以研究下源码。

回到主题,Magento的架构设计的很灵活,当你自己的网站在某些方面不需要那么灵活时,适当的改造灵活代码为硬编码,也许刚好就能帮助你解决某个困扰已久的性能瓶颈。以上是我的个人见解,欢迎拍砖。

时间: 2024-10-07 15:34:18

Magento的灵活性带来的负担一例的相关文章

magento -- 对版本升级带来的语言包重新修正发点牢骚

magento现在发展迅速,就2010年来说,更新了四个版本,1.4.0.0,1.4.0.1,1.4.1.0,1.4.1.1,这意味着magento功能变得更强大,bug变得更少(这点有争议),对广大使用者来说这当然是好事.但版本更新的同时也意味着语言包也在更新,对于老外和国内拿magento来做外贸站的人来说,这无所谓,用的就是原版的英文语言包,但对于非英语使用者,比如像我这样拿magento做中文站的人来说,语言包的频繁更新就是噩梦,国内的客户不会愿意在界面上看到任何英文,甚至后台也不行.我

技术干货:使用静态缓存提升网站性能的五种方法!

本文作者: 乔锐杰 现担任上海驻云信息科技有限公司运维总监/架构师.曾任职过黑客讲师.java软件工程师/网站架构师.高级运维.阿里云架构师等职位.维护过上千台服务器,主导过众安保险.新华社等千万级上云架构.在云端运维.分布式集群架构等方面有着丰富的经验. 以下正文 上次写了一篇数据库缓存,由于快餐式的风格,遭到了广大读友的吐槽.上篇风格有点 " 虚 ",我本身是一个技术控,偏向经验/干货的分享,本文主要描述静态缓存方面的一些心得及分享.作为系列二,有所不足之处,依旧希望大家踊跃&qu

为何IT现代化已成国家网络战略中的关键所在

美国总统特朗普提出的网络安全战略要求对传统计算机系统进行现代化转型,从而解决此类计算机系统导致的资源占用以及阻碍机构安全策略更新等问题.这方案将基于云的新型服务方式被视为更加灵活.成本更低且在本质上更为安全的解决思路. 美国国土安全部(简称DHS)国家保护与计划局网络安全与通信副主任杰尼特·玛弗拉解释称,"IT现代化与网络安全并不一定总能协同推进.不过政府当局必须清醒地意识到,现代化水平缺失本身就是政府的一大致命弱点." 边界为核心的保护思维已过时 将数百套联邦政府机构网络整合成单一或

Grunt入门教程(自动任务运行器)_javascript技巧

在Javascript的开发过程中,经常会遇到一些重复性的任务,比如合并文件.压缩代码.检查语法错误.将Sass代码转成CSS代码等等.通 常,我们需要使用不同的工具,来完成不同的任务,既重复劳动又非常耗时.Grunt就是为了解决这个问题而发明的工具,可以帮助我们自动管理和运行各种任 务. 简单说,Grunt是一个自动任务运行器,会按照预先设定的顺序自动运行一系列的任务.这可以简化工作流程,减轻重复性工作带来的负担. ## 安装 Grunt基于Node.js,安装之前要先安装Node.js,然后

海量用户实时定位和圈人 - 团圆社会公益系统(位置寻人\圈人)

标签 PostgreSQL , PostGIS , 空间数据 , 空间索引 , 寻人启事 , 位置寻人 , 公益系统 , 实时定位 , 海量圈人 背景 老人.儿童是最容易走丢的人群,一定要看好老人和小孩,但是万一走丢了怎么办呢? 阿里有一个公益系统,团圆,这个系统是用来帮助发布走丢人群信息的,公安通过发布的走丢人的照片,最后一次的位置信息,向社会发布. 通过公益平台的合作伙伴(例如运营商.购物软件等)可以向最后一次走丢人士出现的位置附近的人推送寻人启事,调动社会力量帮助寻找丢失人. 为了实现这个

Zeus实现XML-JAVA的数据绑定

xml|数据 Zeus实现XML-JAVA的数据绑定 钟家豪 (judson78@yahoo.com.cn) 2003 年 3 月 Zeus可以将JAVA对象与XML文件进行绑定,绑定使数据在J2EE中的应用更加方便.本文主要介绍Zeus的编译与使用.对绑定过程中使用的DTD和XML文件也有说明.1 ZEUS简介Enhydra是以生长于美国加利福尼亚海边的小水獭命名的非营利组织的名字.从但与著名的Apache不同,Enhydra致力于围绕Application Server的电子商务解决方案的研

安全产品发展趋势分析

平静中孕育着不平静,2006年的信息安全领城展现出一种"另类"的气质,也让我们对2007年充满了遐想.严格来说,2006年并非"安全无大事",用户群体受到的安全压力正在进一步加大,大开大阖的攻防战役充斥在整个信息世界当中.在2007年,用户是否能够在安全问题上获得喘息?厂商将如何面对一波波安全成协?我们在回顾2006年信息安全的同时,尝试以各种安全产品作为主线,去预侧在2007年将会发生些什么. 桌面防病毒:向未知威胁宜战 桌面计算机用户可能是2006年最"

打造顶级系统的正确优化方法

现在网友对系统优化已经不再感兴趣了--很多是说优化前和优化后都差不多,对速度和稳定性的提高没有什么效果!真的是这样吗?其实,优化中有很多重要环节被我们忽视了.这些环节对优化效果起这决定性的作用!总结起来大体上有九个环节,下面我就给大家逐一道来. 一.合理使用硬盘 何为合理使用硬盘呢?首先我们要了解硬盘盘片的物理结构.分区并格式化后的硬盘却是以扇区为基本单位的,一个分区是由若干个扇区构成的.那什么是扇区呢?我们都知道磁盘在工作时是转动的,它所存储的信息是按一系列同心圆记录在其表面上的,每一个同心圆

无线网络升级到802.11n WLAN的4个技巧

笔记本电脑,智能手机和平板电脑是每个高校都可以选择的移动设备.为了满足随时随地上网的需求以及应付占用带宽较多的移动应用,高校已经开始投资自己的无线LAN以便学生和教职员工可以通过无线网络传输更大的文件和应用.所以现在的WLAN可以通过各种端口连接到有线网络上,从而为不断增长的学生群体提供高性能,强大且安全的网络连接. 至于经无线网络IEEE标准批准的802.11n,其传输速率是之前802.a/b/g标准的六倍.在理想状态下,802.11n网络的速度可达到300Mbps,然而基于旧标准的WLAN峰