캐시를 플러시하고 컴파일러를 관리하는 올바른 방법


25

다음에 선호되는 절차가 있는지 알고 싶습니다.

  1. 마 젠토 캐시 플러싱
  2. 마 젠토 컴파일러 활성화 / 비활성화

1. 마 젠토 캐시 플러싱

여기 몇 가지 옵션이 있습니다.

  • Actions드롭 다운 상자 에서 광고 항목 확인 및 새로 고침 제출
  • Flush Magento Cache버튼을 클릭 하고
  • 딸깍 Flush Storage Cache버튼을

이를 수행하기 위해 선호되는 순서가 있습니까? 마 젠토 캐시와 스토리지 캐시의 차이점은 무엇입니까?

2. 마 젠토 컴파일러의 활성화 / 비활성화

a) 컴파일러 활성화

Magento 컴파일러를 활성화 할 때 모든 저장소 캐시를 활성화해야합니까? 아니면 컴파일러를 활성화하고 컴파일 프로세스를 실행 한 후에 만 ​​캐시를 활성화해야합니까? 컴파일러를 활성화하면 모든 캐시를 새로 고쳐야합니까? 그렇다면 Magento 캐시 및 스토리지 캐시 비우기 (위에서 언급 한 것처럼)가 포함됩니다.

b) 컴파일러 비활성화

Magento 컴파일러를 비활성화 할 때는 먼저 모든 캐시를 비활성화 한 다음 비활성화 한 후 다시 활성화해야합니까?

캐시를 그대로두고 컴파일러를 비활성화 / 활성화하는 데 차이가 있습니까? 어떤 성능 영향이 발생합니까?

모든 의견을 부탁드립니다


기억하기 쉽다. 프로덕션 저장소에서 캐시를 플러시하지 마십시오. 개발 저장소에서 캐시를 활성화하지 마십시오.
Ben Lessani-Sonassi

1
프로덕션 저장소에서 캐시를 비우면 사이트가 중단되는 경우 준비 서버에서 테스트를 충분히 수행하지 않았고 일부 잘못된 코드가 통과되어 "개발 저장소에서 캐시를 활성화하지 마십시오." 캐시 플러싱으로 인해 마 젠토가 중단되지 않아야합니다. CBR 오류 (준비 전에 커밋)
Fiasco Labs

답변:


20

Magento 캐시 플러시-Magento 가 생성 한 것으로 알려진 항목의 캐시 (var / cache)를 지 웁니다.

캐시 스토리지 플러시 -해당 파일의 생성 방식에 관계없이 var / cache의 모든 것을 지 웁니다.

따라서 안전을 원한다면 모든 것을 지우고 싶을 것입니다. " Flush Cache Storage "를 선택하면 기본적으로 var / cache 가 지워 집니다.

컴파일러의 경우 컴파일을 활성화하고 컴파일 프로세스를 실행 한 후 Magento 캐시를 플러시하는 것이 좋습니다. 이렇게하면 캐시에서 컴파일되지 않은 데이터가 지워집니다.

컴파일을 비활성화하면 먼저 비활성화 한 다음 Magento 캐시를 플러시합니다. 이렇게하면 캐시에 컴파일 된 데이터가 없어집니다.

많은 것을 테스트하지 않는 한 항상 캐시를 켜 두는 것이 좋습니다. 성능 측면에서 컴파일이 적중되거나 누락 될 수 있습니다. 나는 그것이 더 빨리 만드는 것을 보았고, 많은 경우 컴파일이 일을 느리게 만들고 타사 확장 프로그램에 문제를 일으켰습니다. 컴파일을 끈 다음 다시 컴파일을 켜고 카테고리 페이지로드 시간 (Firebug / 개발자 도구 사용)에 대한 기준을 세우고 큰 차이가 있는지 확인하는 것이 좋습니다.

PHP의 opcode 캐시, 적절한 MySQL 쿼리 캐싱, css / js 파일 결합, gzip 압축 사용, 전체 페이지 캐시 확장 사용 및 파일의 브라우저 캐싱에 대한 적절한 설정과 같은 것을 사용하는 것이 좋습니다.


15

마 젠토 캐시도 다르지 않습니다. 기본 사항부터 시작하여 캐시 옵션을 탐색하여 캐시 옵션을 볼 수 있습니다.

시스템-> 캐시 관리

백엔드에서. 구성, layout.xml, 블록, 전체 페이지 및 API 파일과 같이 활성화 / 비활성화 할 수있는 다양한 캐싱 영역을 볼 수 있습니다. 사이트가 활성화되면 이러한 기능을 모두 활성화하는 것이 이상적입니다.

여기에서 캐시를 지우거나 플러시 할 수도 있습니다. 라벨 “Flush Magento Cache”이 지정된 버튼을 누르면 Magento가 사용하는 특정 기본 제공 기본 태그 세트와 일치하는 캐시 파일이 플러시됩니다. 이것은 캐시를 지우는“안전한”방법입니다. 모든 것을 완전히 지우지는 않습니다. 보조 캐시 유형을 사용하는 경우을 클릭 “Flush Cache Storage”하면 모든 항목이 지워 지므로 캐시가 지워집니다. 관리자 페이지에 표시되는 다른 두 버튼은 자바 스크립트와 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가 추가됩니다. 캐시.

마젠 토의 컴파일 기능은 아래에 있습니다.

시스템> 도구> 컴파일

새로 설치하는 경우 두 includes and includes/src/디렉토리 모두 쓰기 가능해야 한다는 시스템 메시지가 표시 될 수 있습니다. 이 작업이 끝나면 'Run Compilation process'버튼을 누르면 기본적으로 완료됩니다. 마 젠토 코어는 컴파일을 사용합니다.

Magento가 소스 코드를 컴파일 할 때 프레임 워크는 몇 가지 작업을 수행합니다. 관리자 또는를 통해 트리거되므로 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;
    }

컨트롤러가 다른 치료를 받고 있습니다. 모든 컨트롤러 디렉토리가

포함 / src /

그러나 관련 네임 스페이스의 이름을 가진 디렉토리에 저장됩니다. 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에 파일이 포함되어 있으면 내용이 opcode로 컴파일됩니다. 파일이 포함될 때마다 수행해야하는 프로세스입니다. 상점의 성능을 더욱 향상시키기 위해 서버에 APC를 설치할 수 있습니다. APC는 opcoded 버전의 파일을 캐시하여 후속 요청에 사용할 수 있도록합니다. 따라서 다음 요청시 : 동일한 프로세스를 다시 수행하고 성능을 저하시키지 않고 APC 캐시에서 파일을 읽습니다.


3

컴파일러

모든 컴파일러 파일은 includes/Just do n't wipe .htaccess또는 에서 찾을 수 있습니다 config.php. 당신이 볼 경우 config.php당신은 모든 활성화 / 비활성화 컴파일러는 주석을 제거하고 않습니다 알 수 있습니다 #두 전에 define. rm -Rf includes/src;rm -Rf includes/statMagento 루트에서 간단하게 컴파일 된 데이터를 지우는 것으로 가정하는 것이 안전합니다 .

AOE 와 함께 AOE_ClassPathCache 를 사용하는 것도 고려할 수 있습니다. 방정식에서 컴파일러를 제거하기에 충분할 것입니다.

주제에 대한 자세한 내용은 다음을 참조하십시오.


캐쉬

이것은 순전히을 통해 사용중인 캐싱 백엔드에 정의되어 있습니다 local.xml. 기본 files캐시 핸들러를 사용중인 var/cache경우 및 엔터프라이즈 인 경우를 지우십시오 var/full_page_cache. Memcache와 같은 데이터 스토어를 사용하는 경우 Magento Flush Cache Storage를 통해 또는 캐시 데이터 스토어가 캐시를 지우거나 닦아야하는 수단을 통해이 작업을 수행해야 합니다.

가능한 데이터 저장소에 대한 자세한 내용도 Magento는 캐싱 메커니즘으로 Zend_Cache 를 사용합니다 . local.xml캐시 Xpath 와 관련이 있습니다.


노트

Enterprise를 실행하는 경우 etc/enterprise.xmlFPC의 데이터 저장소가 정의 된 두 번째 구성 파일 이 있습니다.

플러시 캐시와 플러시 캐시 스토리지의 차이점은 무엇입니까?


0

마 젠토 컴파일러에 대한 매우 중요한 참고 사항. 컴파일러가 APC에있는 내용을 컴파일 할 수없고 컴파일을 손상시킬 수 있으므로 컴파일 할 때 APC와 같은 기능을 해제해야합니다. 저에게는 서버에서 APC를 언로드 한 다음 Apache (httpd)를 다시 시작해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.