用命令操作Magento预编译的开启和关闭

redmaomail 2024-07-24 18:12 阅读数 91 #Magento

红帽云邮外贸主机

提高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目录:

    $cd shell
    $ls
    abstract.php compiler.php indexer.php log.php

查看使用compiler.php的方法:

    $php -f compiler.php help
    Usage: php -f compiler.php -- [options]
      state Show Compilation State
      compile Run Compilation Process
      clear Disable Compiler include path and Remove compiled files
      enable Enable Compiler include path
      disable Disable Compiler include path
      help This help

查看当前的编译状态:

    $php -f compiler.php state
    Compiler Status: Disabled
    Compilation State: Not Compiled
    Collected Files Count: 0
    Compiled Scopes Count: 0

    $php -f compiler.php compile
    Compilation successfully finished
    $php -f compiler.php state
    Compiler Status: Enabled
    Compilation State: Compiled
    Collected Files Count: 6000
    Compiled Scopes Count: 4

关闭和开启编译:

    $php -f compiler.php disable
    Compiler include path disabled
    $php -f compiler.php state
    Compiler Status: Disabled
    Compilation State: Compiled
    Collected Files Count: 6000
    Compiled Scopes Count: 4
    $php -f compiler.php enable
    Compiler include path enabled
    $php -f compiler.php state
    Compiler Status: Enabled
    Compilation State: Compiled
    Collected Files Count: 6000
    Compiled Scopes Count: 4

清除编译

    $php -f compiler.php clear
    Compilation successfully cleared
    $php -f compiler.php state
    Compiler Status: Disabled
    Compilation State: Not Compiled
    Collected Files Count: 0
    Compiled Scopes Count: 0

我们还可以通过修改/includes/src/config.php文件开启和关闭编译模式,在编译成功后config.php将变为:

define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');

此时只需要注释掉这个语句就可以关闭编译模式:

 #define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');

在Mage.php文件中我们可以看到下面一段代码:

    Mage::register('original_include_path', get_include_path()); // 保存当前的include_path

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

        $appPath = implode(PS, $paths);
        set_include_path($appPath . PS . Mage::registry('original_include_path')); // 添加以上四个目录为include_path
        include_once "Mage/Core/functions.php";
        include_once "Varien/Autoload.php";
    }

我们可以发现,Magento通过检查是否定义COMPILER_INCLUDE_PATH常量来切换编译模式并设置对应模式的文件包含路径。


红帽云邮外贸主机

分享到:
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。
    红帽云邮外贸主机
热门
    红帽云邮外贸主机
    红帽云邮外贸主机