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

目录
相关文章
|
9月前
|
JSON 监控 PHP
企业局域网监控软件的扩展性设计:PHP插件开发指南
在企业网络环境中,对局域网进行监控是至关重要的。为了满足不同企业的需求,我们需要一种灵活可扩展的监控软件,能够根据具体情况进行定制和扩展。本文将介绍如何利用PHP插件来实现企业局域网监控软件的扩展性设计,并提供一些代码示例,帮助读者更好地理解和应用这一技术。
217 2
|
3月前
|
自然语言处理 运维 开发工具
深入探讨了 NeoVim 相较于传统 Vim 的优势,包括更好的扩展性、现代化的界面和用户体验、多语言编程支持、强大的异步处理能力、更好的协作支持、持续的更新和改进、活跃的社区以及与现代开发工具的集成
本文深入探讨了 NeoVim 相较于传统 Vim 的优势,包括更好的扩展性、现代化的界面和用户体验、多语言编程支持、强大的异步处理能力、更好的协作支持、持续的更新和改进、活跃的社区以及与现代开发工具的集成。通过命令对比,展示了两者在启动、配置、模式切换、移动编辑、搜索替换、插件管理、文件操作、窗口缓冲区管理和高级功能等方面的差异。总结部分强调了 NeoVim 在多个方面的显著优势,解释了为什么越来越多的运维人员选择 NeoVim。
169 3
|
4月前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
65 3
|
6月前
|
安全 关系型数据库 数据库
FastAPI数据库操作秘籍:如何通过高效且安全的数据库访问策略,使你的Web应用飞速运转并保持数据完整性?
【8月更文挑战第31天】在构建现代Web应用时,数据库操作至关重要。FastAPI不仅简化了API创建,还提供了高效数据库交互的方法。本文探讨如何在FastAPI中实现快速、安全的数据处理。FastAPI支持多种数据库,如SQLite、PostgreSQL和MySQL;选择合适的数据库可显著提升性能。通过安装相应驱动并配置连接参数,结合ORM库(如Tortoise-ORM或SQLAlchemy),可以简化数据库操作。使用索引、批量操作及异步处理等最佳实践可进一步提高效率。同时,确保使用参数化查询防止SQL注入,并从环境变量中读取敏感信息以增强安全性。
298 1
|
5月前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
113 0
|
9月前
|
编解码 缓存 数据库
构建高效Android应用:从性能优化到用户体验
【5月更文挑战第29天】 在移动开发领域,打造一个流畅且响应迅速的Android应用对于保持用户忠诚度和市场份额至关重要。本文将深入探讨如何通过细致的性能优化措施和关注用户体验设计,来提升Android应用的整体质量。我们将透过代码层面的实践技巧、资源管理和系统机制的优化,以及用户界面和交互设计的改良,共同构建起一个既快速又吸引人的应用程序。
|
9月前
|
监控 Android开发 UED
构建高效的Android应用:从内存管理到用户体验
【5月更文挑战第28天】 在移动开发的世界中,打造一个既快速又高效的Android应用是每个开发者追求的目标。本文将深入探讨如何通过合理的内存管理策略、优化的代码实践和用户界面设计的提升来增强应用性能。我们将剖析内存泄漏的根源,提供解决方案,探索Kotlin与Java在性能上的差异,并分析如何利用Android系统提供的工具监控和改善应用表现。此外,我们还将讨论Material Design的应用以及其对用户体验的影响。通过这些技术的综合运用,你将能够为用户提供更流畅、响应更快的使用体验。
|
9月前
|
缓存 Android开发 UED
构建高效Android应用:从优化用户体验到提升性能
【5月更文挑战第15天】 在移动开发领域,构建一个高效的Android应用不仅仅意味着实现功能,还要确保流畅的用户体验和出色的性能。本文将深入探讨如何通过界面优化、代码整洁、资源管理和多线程处理等技术手段来提升Android应用的整体效率。我们将透过实际案例,揭示常见性能瓶颈的成因,并提供相应的解决方案。此外,文章还会涵盖最新的Android Studio工具和Lint检查的使用,帮助开发者早期发现潜在问题。
|
9月前
|
缓存 前端开发 Android开发
构建高效Android应用:从设计原则到性能优化
随着移动设备成为我们日常生活不可或缺的一部分,开发一个流畅且响应迅速的Android应用变得至关重要。本文将探讨如何通过遵循Android设计原则和实施细致的性能优化策略来构建高效的Android应用程序。我们将深入分析应用架构的选择、内存管理的要点以及UI设计的优化,旨在为开发人员提供一套实用的指导方针,帮助他们提升应用的整体性能和用户体验。
|
文字识别 算法 安全
转:图像处理算法在文档管理系统中的优势、误区及应用
图像处理算法在文档管理系统中可以提高处理效率、提高图像质量、实现文字识别和提取等功能,但也需要注意误判和错误处理的问题,并合理应用于不同的场景中。以下是关于图像处理算法在文档管理系统中的优势、误区以及应用的一些重要信息。
93 3

热门文章

最新文章