Magentoのキャッシュも同じです。基本から始めて、キャッシュオプションを表示するには、
システム->キャッシュ管理
バックエンドで。構成、layout.xml、ブロック、全ページ、APIファイルなど、有効化/無効化できるキャッシュのさまざまな領域を確認できます。明らかに、サイトが公開されたら、これらすべてを有効にすることが理想です。
ここからキャッシュをクリアまたはフラッシュすることもできます。ラベルの付いたボタンを押すと、“Flush Magento Cache”
Magentoが使用する組み込みのデフォルトタグの特定のセットに一致するキャッシュファイルがフラッシュされます。これは、すべてを完全にクリアするわけではないため、キャッシュをクリアする「安全な」方法です。セカンダリキャッシュタイプを使用している場合は、“Flush Cache Storage”
とがクリアされるため、キャッシュをクリアしたことが確認されます。管理ページに表示される他の2つのボタンは、javascriptとcss、およびカタログ画像をクリアします。
キャッシュをクリアする別の、やや安全性の低い方法は、
websiteroot / var / cache
すべてのファイルを手動で削除します。同じことが言えます
websiteroot / var / full_page__cache
全ページキャッシュを有効にしている場合。
Enterprise Editionで利用可能なフルページキャッシュは、サイトを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のパスは
app / code / core / Mage / Catalog / Model / 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;
}
コントローラーは別の治療を受けています。すべてのコントローラーディレクトリがにコピーされます
includes / src /
しかし、関連する名前空間の名前を持つディレクトリ内に保存されていると考えてください。Mage、Enterprise、または独自の名前空間。
これらの名前空間ディレクトリ内では、コントローラーはモジュールごとに保存され、コントローラーのディレクトリ構造は変更されません。ファイル名についても同じことが言えますが、これは単なるコピーです。このロジックはすべて、次のメソッドで見つけることができます$this->_copyControllers($path);
この第2レベルのコンパイルでは、管理者からすべてのスコープとそれぞれのクラスリストが収集されます。これらのスコープはすべて、関連するクラスファイルのコンテンツをフェッチして処理し、指定されたスコープにちなんで名付けられた単一のファイルに書き込みます。
/**
* 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は4つの異なるスコープファイルを作成します。
__default.php、__ catalog.php、__ checkout.php、および__cms.php
これらのスコープファイルの構築プロセス中に、Magentoは、スコープリストで提供されるクラスによって使用されているすべてのクラス拡張とインターフェースを自動的に解析します。
すべてのファイルを配置してコンパイルすると、Magentoはコンパイル機能を使用可能にする準備が整います。
最後になりましたが、コンパイルに関連する構成が調整されます。このファイルincludes/config.php
は、次の2つの定数にあり、これらを保持しています。コンパイルを有効にすると、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/
ディレクトリ)が1つしかないため、各ファイルは最初の試行で直接検出されます。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は、ファイルのopcodedバージョンをキャッシュし、以降の要求で使用できるようにします。そのため、次の要求時に、ファイルはAPCキャッシュから読み取られます。同じプロセスを再度実行してパフォーマンスを浪費する必要はありません。