キャッシュのフラッシュとコンパイラーの管理の正しい方法


25

次の手順が望ましいかどうかを知りたい:

  1. Magentoキャッシュのフラッシュ
  2. Magentoコンパイラの有効化/無効化

1. Magentoキャッシュのフラッシュ

ここにはいくつかのオプションがあります。

  • 広告申込情報を確認し、 Actionsプルダウンボックス
  • クリックする Flush Magento Cacheボタンを
  • Flush Storage Cacheボタンをクリックする

これらを行うための優先順序はありますか?MagentoキャッシュとStorageキャッシュの違いは何ですか?

2. Magentoコンパイラの有効化/無効化

a)コンパイラの有効化

Magentoコンパイラを有効にする場合、すべてのストアキャッシュを有効にする必要がありますか?または、コンパイラを有効にし、コンパイルプロセスを実行した後にのみキャッシュをアクティブ化する必要がありますか?コンパイラを有効にしたら、すべてのキャッシュを更新する必要がありますか?もしそうなら、それはMagentoキャッシュとストレージキャッシュをフラッシュすることを含みます(上記のように)

b)コンパイラーの無効化

Magentoコンパイラを無効にする場合、まずすべてのキャッシュを無効にし、無効にした後で再度有効にする必要がありますか?

キャッシュをオンのままにしておくことと、コンパイラを無効化/有効化することに違いはありますか?パフォーマンスにどのような影響がありますか?

どんな入力でも大歓迎です


覚えやすい。本番ストアのキャッシュをフラッシュしないでください。開発ストアでキャッシュを有効にしないでください。
ベン・レッサーニ-ソナシ

1
そして、実稼働ストアのキャッシュをフラッシュするとサイトがクラッシュする場合、ステージングサーバーで十分なテストを行わず、いくつかの不良コードが通過したため、「開発ストアでキャッシュを有効にしないでください」。キャッシュをフラッシュしても、Magentoがクラッシュすることはありません。CBRエラー(準備する前にコミット)
フィアスコLabsの

回答:


20

フラッシュMagentoキャッシュ -これにより、Magentoが作成したことがわかっているアイテムのキャッシュ(var / cache)がクリアされます。

キャッシュストレージのフラッシュ -そこにあるファイルの作成方法に関係なく、var / cache内のすべてをクリアします。

したがって、安全にしたい場合はすべてをクリアして、本質的にvar / cacheをクリアする「Flush Cache Storage」を選択できます。

コンパイラの場合、コンパイルを有効にしてコンパイルプロセスを実行した後、Magentoキャッシュをフラッシュすることをお勧めします。これにより、コンパイルされていないデータのキャッシュがクリアされます。

コンパイルを無効にするときは、まず無効にしてから、Magentoキャッシュをフラッシュします。これにより、コンパイルされたデータがキャッシュからクリアされます。

頻繁にテストしない限り、キャッシュをオンのままにしておくことをお勧めします。コンパイルは、パフォーマンスの面でヒットまたはミスする可能性があります。私はそれが物事を速くするのを見てきました、そして多くの場合、コンパイルが物事を遅くし、サードパーティの拡張機能で問題を引き起こすのを見ました。コンパイルをオフにして、再度コンパイルをオンにして、カテゴリページの読み込み時間(Firebug /開発者ツールを使用)のベースラインを取得して、大きな違いがあるかどうかを確認することをお勧めします。

PHPのオペコードキャッシュ、適切なMySQLクエリキャッシング、css / jsファイルの結合、gzip圧縮の使用、フルページキャッシュ拡張の使用、ファイルのブラウザーキャッシングの適切な設定などを使用することをお勧めします。


15

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キャッシュから読み取られます。同じプロセスを再度実行してパフォーマンスを浪費する必要はありません。


3

コンパイラ

すべてのコンパイラファイルは、includes/「ワイプしないでください」.htaccessまたは「」で見つけることができますconfig.php。表示config.phpすると、コンパイラの有効化/無効化はすべて#、2つの前のコメントを削除していることに気付くでしょうdefinerm -Rf includes/src;rm -Rf includes/statMagentoルートからの単純なものがコンパイルされたデータを消去すると仮定しても安全です。

また、AOEとともにAOE_ClassPathCacheを使用することを検討してください。これにより、式からコンパイラを削除するのに十分です。

また、このトピックに関する詳細な議論:


キャッシュ

これは、を介して使用しているキャッシングバックエンドでのみ定義されますlocal.xml。デフォルトのfilesキャッシュハンドラを使用している場合は、消去してvar/cacheEnterprise を使用しますvar/full_page_cache。Memcacheなどのデータストアを使用している場合は、Magentoを使用するかFlush Cache Storage、キャッシュデータストアがキャッシュをクリア/ワイプする必要がある手段を使用する必要があります。

また、可能なデータストアの詳細については、MagentoはキャッシュメカニズムにZend_Cacheを使用しています。local.xmlキャッシュXpathに関連することに気付くでしょう。


注意

Enterpriseを実行している場合は、2番目の構成ファイルetc/enterprise.xmlにFPCのデータストアが定義されていることがわかります。

フラッシュキャッシュとフラッシュキャッシュストレージの違いは何ですか:


0

Magentoコンパイラに関する非常に重要な注意事項。コンパイラがAPCにあるものをコンパイルできず、コンパイルが破損するため、コンパイルを行うときはAPCなどをオフにする必要があります。私にとっては、サーバーでAPCをアンロードしてからApache(httpd)を再起動することを意味します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.