Magento缓存没有什么不同。从基础开始,可以通过导航到
系统->缓存管理
在后端。您可以看到可以启用/禁用的不同缓存区域,例如任何配置,layout.xml,块,整页和api文件。显然,理想的是在网站上线后启用所有这些功能。
也可以从此处清除或刷新缓存。按下标有按钮的按钮“Flush Magento Cache”
将刷新所有与Magento使用的一组内置默认标签匹配的缓存文件。这是清除缓存的“安全”方法,因为它不能绝对清除所有内容。如果您正在使用任何辅助缓存类型,则单击“Flush Cache Storage”
将确保清除了缓存,因为它会清除所有内容。您在管理页面上看到的其他两个按钮将清除javascript和css以及目录图像。
清除缓存的另一种但不太安全的方法是导航到
websiteroot / var / cache
并手动删除所有文件。一样
websiteroot / var / full_page__cache
如果启用了全页缓存。
企业版上提供的全页缓存可将您的网站速度提高10倍,但是了解一点很重要,以防万一您注意到正在缓存任何动态内容。一个有趣的文件是
websiteroot / app / code / core / Enterprise / PageCache / etc / cache.xml
在这里,您可以查看FPC正在缓存的内容,块名称,容器名称和会话生存期。如果您发现绝对有必要从高速缓存中编辑或删除任何这些块,则可以通过创建一个依赖PageCache模块的模块,然后在其中进行任何修改来实现。
占位符标签告诉FPC该块被认为是动态的。加载页面时,如果该块尚未在缓存中,则在缓存中搜索占位符标记中的该ID值,如果不存在,则调用并生成该块,并将该ID添加到缓存。
Magento的编译功能可以在下面找到
系统>工具>编译
如果您正在运行全新安装,则可能会收到系统消息,指出两个includes and includes/src/
目录都必须可写。完成此操作后,我们可以单击“运行编译过程”按钮,您基本上已经完成了,Magento核心正在使用编译。
当Magento编译其源代码时,该框架会执行一些操作。通过admin或触发shell, see shell/compiler.php
,所有编译都由一个类完成:Mage_Compiler_Model_Process
。在本课程中,您将找到以下片段,它实际上是整个过程的鸟瞰图。
/**
* Run compilation process
*
* @return Mage_Compiler_Model_Process
*/
public function run()
{
$this->_collectFiles();
$this->_compileFiles();
$this->registerIncludePath();
return $this;
}
在$this->_collectFiles();
通话开始后,Magento从两个站点复制了所有PHP文件。
应用/代码
和lib目录到
/ includes / src
目录。如下面的代码片段所示:在此过程中,Magento递归遍历所有文件和目录。这些路径最终用作文件名。当递归过程命中文件时,它将检查PHP扩展名,并且在找到文件后将其复制到编译器目录中。其他文件类型保持不变。
例如:类Mage_Catalog_Model_Category的路径为
应用程序/代码/核心/法师/目录/模型/Category.php
但是,启用编译后,现在变成
includes / src / Mage_Catalog_Model_Category.php
/**
* Copy files from all include directories to one.
* Lib files and controllers files will be copied as is
*
* @return Mage_Compiler_Model_Process
*/
protected function _collectFiles()
{
$paths = $this->_getIncludePaths();
$paths = array_reverse($paths);
$destDir= $this->_includeDir;
$libDir = Mage::getBaseDir('lib');
$this->_mkdir($destDir);
foreach ($paths as $path) {
$this->_controllerFolders = array();
$this->_copy($path, $destDir); // this one will run recursively through all directories
$this->_copyControllers($path);
if ($path == $libDir) {
$this->_copyAll($libDir, $destDir);
}
}
$destDir.= DS.'Data';
$this->_mkdir($destDir);
$this->_copyZendLocaleData($destDir);
return $this;
}
管制员正在接受另一种待遇。将所有控制器目录复制到
包括/源/
但要存储在一个具有相关命名空间名称的目录中,请考虑:Mage,Enterprise或您自己的给定命名空间。
在这些名称空间目录中,控制器按模块存储,并且控制器目录结构保持不变。文件名也一样,只是一个完全相同的副本。所有这些逻辑都可以在以下方法中找到$this->_copyControllers($path);
第二层编译从管理员那里收集所有范围和它们各自的类列表。所有这些作用域都通过获取相关类文件的内容并将其写入以给定作用域命名的单个文件中进行处理。
/**
* Compile classes code to files
*
* @return Mage_Compiler_Model_Process
*/
protected function _compileFiles()
{
$classesInfo = $this->getCompileClassList();
foreach ($classesInfo as $code => $classes) {
$classesSorce = $this->_getClassesSourceCode($classes, $code);
file_put_contents($this->_includeDir.DS.Varien_Autoload::SCOPE_FILE_PREFIX.$code.'.php', $classesSorce);
}
return $this;
}
默认情况下,Magento创建四个不同的范围文件:
__default.php,__ catalog.php,__ checkout.php和__cms.php
在构建这些范围文件的过程中,Magento会自动解析范围列表中提供的类正在使用的所有类扩展和接口。
放置好所有文件并进行编译后,Magento准备启用编译功能以供使用。
最后但并非最不重要的一点是,调整与编译相关的配置。可以includes/config.php
在以下位置找到此文件,并保存以下两个常量。启用编译后,关于COMPILER_INCLUDE_PATH的行将不加注释,因此可以立即采取行动。
> #define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');
> #define('COMPILER_COLLECT_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'stat');
可以在的registerIncludePath方法中找到负责调整配置文件的代码Mage_Compiler_Model_Process class
。
在引导过程中,编译配置文件包含在中index.php file (around line 44)
。这使得include_path常量在整个框架中都可用。您只能手动启用collect_path来获取有关已编译文件的使用情况的更多统计信息。不应实时启用此功能。
/**
* Compilation includes configuration file
*/
$compilerConfig = 'includes/config.php';
if (file_exists($compilerConfig)) {
include $compilerConfig;
}
从这一点开始,Magento将使用以下语句检查是否启用了编译模式。遍历代码库(使用'grep'),您会发现大多数逻辑可以在lib/Varien/Autoload.php
文件中找到。
if (defined('COMPILER_COLLECT_PATH')) {
// do stuff
}
寻找的另一个地方是Mage_Core_Controller_Varien_Action
。在此类中,您将找到preDispatch()
方法,该方法在实际分派方法之前为每个控制器操作方法触发。在源代码的这一部分中,将调用Magento的自动加载器类Varien_Autoload来加载特定的编译范围文件。
Mage::dispatchEvent('controller_action_predispatch', array('controller_action'=>$this));
Mage::dispatchEvent(
'controller_action_predispatch_'.$this->getRequest()->getRouteName(),
array('controller_action'=>$this)
);
Varien_Autoload::registerScope($this->getRequest()->getRouteName()); // right here
Mage::dispatchEvent(
'controller_action_predispatch_'.$this->getFullActionName(),
array('controller_action'=>$this)
);
在编译模式下运行时,Magento只有一个包含路径(即includes/src/
目录),因此可以在第一次尝试时直接找到每个文件。Magento拥有大量文件,可节省大量时间。下面的摘录摘自
app / Mage.php
if (defined('COMPILER_INCLUDE_PATH')) {
$appPath = COMPILER_INCLUDE_PATH;
set_include_path($appPath . PS . Mage::registry('original_include_path'));
include_once "Mage_Core_functions.php";
include_once "Varien_Autoload.php";
} else {
/**
* Set include path
*/
$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_once "Mage/Core/functions.php";
include_once "Varien/Autoload.php";
}
当PHP包含文件时,内容将编译为操作码。每次包含文件时都需要完成此过程。为了进一步提高商店的性能,您可以在服务器上安装APC。APC缓存文件的操作码版本,使其可用于后续请求。因此,在下一个请求时:将从APC缓存中读取文件,而不必再次执行相同的过程并浪费性能。