Magento编译模式 - Magento Compiler Mode

2024-06-13 17:18

本文主要是介绍Magento编译模式 - Magento Compiler Mode,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提高Magento性能的一个很重要的方法是开启Magento的编译模式,可以在后台System>Tools>Compilation,点击Run Compilation Process按钮,一段时间后,我们发现Compiler Status由Disabled变为Enabled,已经编译成功了,打开/includes/src目录,会发现生成了很多文件。

因为在Magento中,我们模块的代码可以放在/app/code/local,/app/code/community,以及/app/code/core这三个目录下,如果Magento需要包含某个文件,系统会依次搜索这三个目录,直到找到这个文件为止,这为我们重写系统的某些文件提供了方便,比如需要修改core目录下的Mage/Catalog/Model/Product.php文件,只需要复制这个文件到local目录下的Mage/Catalog/Model/Product.php,然后修改这个文件即可,这样无需修改核心文件,为我们以后升级系统提供了方便,但由于系统需要在不同的目录中搜索文件,所以效率比较低,使用Compiler功能,系统将把这三个目录下的文件按照优先级顺序复制到/includes/src目录,比如Mage/Catalog/Model/Product.php文件将复制为Mage_Catalog_Model_Product.php,这样系统能够很快的找到需要包含的文件,大幅的提高了效率。

如果我们需要安装新的模块,或者修改已有的模块,我们需要关闭Magento的编译模式,可以在后台System>Tools>Compilation,点击Disable按钮,Compiler Status将由Enabled变为Disabled,添加或修改好模块之后,需要点击Run Compilation Process按钮重新生成编译文件。

此外,Magento提供了一个脚本工具使我们无需进入后台就可以查看和切换编译模式,该脚本位于根目录下的/shell/compiler.php

打开命令行,切换至shell目录:
  1. $cd shell
  2. $ls
  3. abstract.php compiler.php indexer.php log.php
查看使用compiler.php的方法:
  1. $php -f compiler.php help
  2. Usage: php -f compiler.php -- [options]
  3.   state Show Compilation State
  4.   compile Run Compilation Process
  5.   clear Disable Compiler include path and Remove compiled files
  6.   enable Enable Compiler include path
  7.   disable Disable Compiler include path
  8.   help This help
查看当前的编译状态:
  1. $php -f compiler.php state
  2. Compiler Status: Disabled
  3. Compilation State: Not Compiled
  4. Collected Files Count: 0
  5. Compiled Scopes Count: 0
开始编译:
  1. $php -f compiler.php compile
  2. Compilation successfully finished
  3. $php -f compiler.php state
  4. Compiler Status: Enabled
  5. Compilation State: Compiled
  6. Collected Files Count: 6000
  7. Compiled Scopes Count: 4
关闭和开启编译:
  1. $php -f compiler.php disable
  2. Compiler include path disabled
  3. $php -f compiler.php state
  4. Compiler Status: Disabled
  5. Compilation State: Compiled
  6. Collected Files Count: 6000
  7. Compiled Scopes Count: 4
  8. $php -f compiler.php enable
  9. Compiler include path enabled
  10. $php -f compiler.php state
  11. Compiler Status: Enabled
  12. Compilation State: Compiled
  13. Collected Files Count: 6000
  14. Compiled Scopes Count: 4
清除编译:
  1. $php -f compiler.php clear
  2. Compilation successfully cleared
  3. $php -f compiler.php state
  4. Compiler Status: Disabled
  5. Compilation State: Not Compiled
  6. Collected Files Count: 0
  7. Compiled Scopes Count: 0
我们还可以通过修改/includes/src/config.php文件开启和关闭编译模式,在编译成功后config.php将变为:
  1. define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');
此时只需要注释掉这个语句就可以关闭编译模式:
  1. #define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');
在Mage.php文件中我们可以看到下面一段代码:
  1. Mage::register('original_include_path', get_include_path()); // 保存当前的include_path

  2. if (defined('COMPILER_INCLUDE_PATH')) { // 如果设置为编译模式
  3.     $appPath = COMPILER_INCLUDE_PATH;
  4.     set_include_path($appPath . PS . Mage::registry('original_include_path')); // 添加includes/src为include_path
  5.     include_once "Mage_Core_functions.php";
  6.     include_once "Varien_Autoload.php";
  7. } else { // 没有设置为编译模式
  8.     $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local';
  9.     $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community';
  10.     $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core';
  11.     $paths[] = BP . DS . 'lib';

  12.     $appPath = implode(PS, $paths);
  13.     set_include_path($appPath . PS . Mage::registry('original_include_path')); // 添加以上四个目录为include_path
  14.     include_once "Mage/Core/functions.php";
  15.     include_once "Varien/Autoload.php";
  16. }
我们可以发现,Magento通过检查是否定义COMPILER_INCLUDE_PATH常量来切换编译模式并设置对应模式的文件包含路径。

这篇关于Magento编译模式 - Magento Compiler Mode的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057929

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

MySQL报错sql_mode=only_full_group_by的问题解决

《MySQL报错sql_mode=only_full_group_by的问题解决》本文主要介绍了MySQL报错sql_mode=only_full_group_by的问题解决,文中通过示例代码介绍的非... 目录报错信息DataGrip 报错还原Navicat 报错还原报错原因解决方案查看当前 sql mo

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时