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设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

解决Maven项目报错:failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题

《解决Maven项目报错:failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题》这篇文章主要介... 目录Maven项目报错:failed to execute goal org.apache.maven.pl

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2