Phương pháp đúng của bộ đệm và quản lý trình biên dịch


25

Tôi muốn biết nếu có bất kỳ thủ tục ưa thích cho sau đây:

  1. Xóa bộ nhớ cache Magento
  2. Kích hoạt / vô hiệu hóa trình biên dịch Magento

1. Xóa bộ nhớ cache Magento

Có một vài lựa chọn ở đây, cụ thể là:

  • Kiểm tra các chi tiết đơn hàng và gửi làm mới từ Actionshộp thả xuống
  • Nhấp vào Flush Magento Cachenút và
  • Nhấp vào Flush Storage Cachenút

Có bất kỳ thứ tự ưa thích để làm những điều này? Sự khác biệt giữa bộ đệm Magento và bộ nhớ cache lưu trữ là gì?

2. Kích hoạt / vô hiệu hóa trình biên dịch Magento

a) Kích hoạt trình biên dịch

Khi nói đến việc kích hoạt trình biên dịch Magento, liệu có nên bật tất cả các bộ nhớ cache của cửa hàng không? Hoặc bạn chỉ nên kích hoạt bộ đệm sau khi kích hoạt trình biên dịch & chạy quá trình biên dịch? Khi bạn đã kích hoạt trình biên dịch, bạn có nên làm mới tất cả bộ nhớ cache không? Và nếu vậy, điều đó có bao gồm Flushing bộ nhớ cache & bộ nhớ cache Magento (như đã đề cập ở trên)

b) Vô hiệu hóa trình biên dịch

Khi nói đến việc vô hiệu hóa trình biên dịch Magento, bạn có nên tắt tất cả các bộ đệm trước không, sau đó kích hoạt lại chúng sau khi nó bị vô hiệu hóa?

Có sự khác biệt nào giữa việc để lại bộ nhớ cache và vô hiệu hóa / kích hoạt trình biên dịch không? Nó gây ra hiệu ứng gì?

Mọi nguồn thu đều được đánh giá cao


Nó dễ nhớ. Đừng xóa bộ nhớ cache trên một cửa hàng sản xuất. Không kích hoạt bộ đệm trên một cửa hàng phát triển.
Ben Lessani - Sonassi

1
Và nếu việc xóa bộ nhớ cache trên cửa hàng sản xuất của bạn khiến trang web bị sập, bạn đã không thực hiện đủ thử nghiệm trên máy chủ dàn của mình và một số mã xấu đã vượt qua, do đó "Không bật bộ đệm trên cửa hàng phát triển." Việc xóa bộ nhớ cache không bao giờ khiến Magento bị sập. Lỗi CBR (Cam kết trước khi sẵn sàng)
Fiasco Labs

Câu trả lời:


20

Flush Magento Cache - Điều này sẽ xóa bộ nhớ cache (var / cache) của bất kỳ mục nào mà Magento biết nó đã tạo.

Flush Cache Storage - Xóa mọi thứ trong var / cache, bất kể các tệp trong đó được tạo như thế nào.

Vì vậy, nếu bạn muốn an toàn, bạn sẽ xóa tất cả mọi thứ, bạn có thể chọn " Flush Cache Storage ", về cơ bản sẽ xóa var / cache.

Đối với trình biên dịch, tôi khuyên bạn nên xóa bộ đệm Magento sau khi bật trình biên dịch và chạy quy trình biên dịch. Điều này đảm bảo rằng bộ nhớ cache sẽ bị xóa khỏi mọi dữ liệu không được biên dịch.

Khi tắt tính năng biên dịch, tôi sẽ tắt nó trước, sau đó xóa bộ đệm Magento sau đó. Điều này một lần nữa đảm bảo bộ nhớ cache không có dữ liệu được biên dịch.

Trừ khi bạn đang thử nghiệm nhiều thứ, tôi sẽ luôn khuyên bạn nên để lại bộ đệm. Biên dịch có thể được nhấn hoặc bỏ lỡ về hiệu suất. Tôi đã thấy nó làm cho mọi thứ nhanh hơn và nhiều lần thấy việc biên dịch làm cho mọi thứ chậm hơn và gây ra sự cố với tiện ích mở rộng của bên thứ 3. Tôi khuyên bạn nên lấy đường cơ sở cho thời gian tải trang danh mục (sử dụng công cụ dành cho nhà phát triển / Firebird) với việc biên dịch, sau đó lại biên dịch và xem có sự khác biệt lớn nào không.

Bạn có thể sẽ tốt hơn khi sử dụng những thứ như bộ đệm opcode trong PHP, bộ đệm ẩn truy vấn MySQL thích hợp, kết hợp các tệp css / js, sử dụng nén gzip, sử dụng tiện ích mở rộng Bộ đệm toàn bộ trang và cài đặt thích hợp cho bộ đệm của trình duyệt.


15

Magento cache cũng không khác. Bắt đầu với những điều cơ bản, các tùy chọn bộ đệm có thể được xem bằng cách điều hướng đến

Hệ thống-> Quản lý bộ đệm

trong phần phụ trợ. Bạn có thể thấy các khu vực khác nhau của bộ nhớ đệm có thể được bật / tắt, chẳng hạn như bất kỳ cấu hình, layout.xml, khối, trang đầy đủ và các tệp api. Rõ ràng lý tưởng là để tất cả những thứ này được kích hoạt một khi trang web hoạt động.

Bộ nhớ cache cũng có thể bị xóa hoặc xóa, từ đây. Nhấn nút có nhãn “Flush Magento Cache”sẽ xóa bất kỳ tệp bộ đệm nào khớp với một bộ thẻ mặc định được tích hợp sẵn mà Magento sử dụng. Đây là cách an toàn hơn để xóa bộ nhớ cache, vì nó không xóa tất cả mọi thứ. Nếu bạn đang sử dụng bất kỳ loại bộ đệm thứ cấp nào, thì nhấp vào “Flush Cache Storage”sẽ đảm bảo bạn đã xóa bộ đệm của mình, vì nó sẽ xóa MỌI THỨ. Hai nút khác bạn thấy trên trang quản trị sẽ xóa javascript và css và danh mục hình ảnh.

Một cách khác và ít an toàn hơn để xóa bộ nhớ cache là điều hướng đến

websiteroot / var / cache

và xóa thủ công tất cả các tập tin. Tương tự cho

websiteroot / var / full_page__cache

nếu bạn đã bật bộ đệm toàn bộ trang.

Bộ nhớ cache toàn trang, có sẵn trên Phiên bản doanh nghiệp, tăng tốc trang web của bạn lên gấp 10 lần, nhưng điều quan trọng là phải biết một chút về nó, chỉ trong trường hợp bạn nhận thấy bất kỳ nội dung động nào được lưu trữ. Một tập tin thú vị để xem là

websiteroot / app / code / core / Enterprise / PageCache / etc / cache.xml

Tại đây bạn có thể thấy những gì đang được lưu trong bộ nhớ cache của FPC, tên khối, tên vùng chứa và thời gian tồn tại của phiên. Nếu bạn thấy cần phải chỉnh sửa hoặc xóa bất kỳ khối nào trong số các khối này khỏi bộ đệm, bạn có thể làm như vậy bằng cách tạo một mô-đun phụ thuộc vào mô-đun PageCache và đặt bất kỳ sửa đổi nào trong đó.

Thẻ giữ chỗ cho FPC biết rằng khối đó được coi là động. Khi một trang được tải, nếu khối chưa có trong bộ đệm, giá trị ID này trong các thẻ giữ chỗ được tìm kiếm trong bộ đệm và nếu nó không tồn tại, thì khối đó được gọi và tạo và ID được thêm vào bộ đệm.

Tính năng biên dịch của Magento có thể được tìm thấy dưới

Hệ thống> Công cụ> Biên dịch

Nếu bạn đang chạy một bản cài đặt mới, bạn có thể nhận được một thông báo hệ thống rằng cả hai includes and includes/src/thư mục phải được ghi. Khi hoàn thành, chúng ta có thể nhấn nút 'Chạy quá trình biên dịch' và về cơ bản bạn đã hoàn thành, lõi Magento đang sử dụng quá trình biên dịch.

Khi Magento biên dịch mã nguồn, khung công tác sẽ thực hiện một số điều. Được kích hoạt thông qua quản trị viên hoặc shell, see shell/compiler.php, tất cả quá trình biên dịch được thực hiện bởi một lớp duy nhất : Mage_Compiler_Model_Process. Trong lớp này, bạn sẽ tìm thấy đoạn trích sau đây thực sự là một cái nhìn toàn cảnh về toàn bộ quá trình.

/**
     * Run compilation process
     *
     * @return Mage_Compiler_Model_Process
     */
    public function run()
    {
        $this->_collectFiles();
        $this->_compileFiles();
        $this->registerIncludePath();
        return $this;
    }

Bắt đầu bằng $this->_collectFiles();cuộc gọi, Magento sao chép tất cả các tệp PHP từ cả hai

ứng dụng / mã

và thư mục lib đến

/ bao gồm / src

danh mục. Như bạn có thể thấy trong đoạn trích dưới đây: trong quá trình này, Magento lặp lại đệ quy thông qua tất cả các tệp và thư mục. Những đường dẫn này cuối cùng được sử dụng làm tên tệp. Khi quá trình đệ quy chạm vào một tệp, nó sẽ kiểm tra phần mở rộng PHP và khi tìm thấy, tệp sẽ được sao chép vào thư mục trình biên dịch. Các loại tập tin khác được giữ nguyên.

Ví dụ: đường dẫn cho lớp Mage_Catalog_Model_Carget là

ứng dụng / mã / lõi / Pháp sư / Danh mục / Mô hình / Danh mục.php

nhưng, với tính năng biên dịch được kích hoạt, giờ đã trở thành

bao gồm / src / Mage_Catalog_Model_Carget.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;
    }

Kiểm soát đang nhận được một điều trị khác. Tất cả các thư mục điều khiển được sao chép vào

bao gồm / src /

nhưng được lưu trữ trong một thư mục có tên của không gian tên liên quan, hãy nghĩ: Mage, Enterprise hoặc không gian tên đã cho của riêng bạn.

Trong các thư mục không gian tên này, các bộ điều khiển được lưu trữ trên mỗi mô-đun và cấu trúc thư mục của bộ điều khiển được giữ nguyên. Tương tự với tên tệp, nó chỉ là một bản sao chính xác. Tất cả logic này có thể được tìm thấy trong phương pháp sau$this->_copyControllers($path);

Cấp độ biên dịch thứ hai này thu thập tất cả các phạm vi và danh sách lớp tương ứng của chúng từ quản trị viên. Tất cả các phạm vi này đang được xử lý bằng cách tìm nạp nội dung của các tệp lớp liên quan và ghi chúng vào một tệp duy nhất được đặt tên theo phạm vi đã cho.

/**
     * 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;
    }

Theo mặc định Magento tạo bốn tệp phạm vi khác nhau:

__default.php, __catalog.php, __checkout.php và __cms.php

Trong quá trình xây dựng các tệp phạm vi này, Magento sẽ tự động phân tích tất cả các phần mở rộng lớp và giao diện đang được sử dụng bởi các lớp được cung cấp trong danh sách phạm vi.

Với tất cả các tệp được đặt và biên dịch, Magento sẵn sàng kích hoạt tính năng biên dịch để sử dụng.

Cuối cùng nhưng không kém phần cấu hình liên quan đến việc biên dịch được điều chỉnh. Tập tin này có thể được tìm thấy tại includes/config.phpvà giữ hai hằng số sau. Khi cho phép biên dịch, dòng liên quan đến COMPILER_INCLUDE_PATH không bị thiếu và do đó sẵn sàng hành động.

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

Mã chịu trách nhiệm điều chỉnh tệp cấu hình có thể được tìm thấy trong phương thức registerIncludePath của Mage_Compiler_Model_Process class .

Trong quá trình bootstrap, tệp cấu hình biên dịch được bao gồm trong index.php file (around line 44). Điều này làm cho các hằng số include_path có sẵn trong toàn bộ khung. Coll_path là thứ bạn chỉ có thể kích hoạt thủ công để có thêm thông tin thống kê về việc sử dụng các tệp được biên dịch của bạn. Điều này không nên được kích hoạt trực tiếp.

/**
 * Compilation includes configuration file
 */
$compilerConfig = 'includes/config.php';
if (file_exists($compilerConfig)) {
    include $compilerConfig;
}

Từ thời điểm này, Magento sẽ kiểm tra xem chế độ biên dịch có được bật với câu lệnh sau hay không. Đi qua codebase (sử dụng 'grep') bạn sẽ nhận thấy rằng hầu hết logic này có thể được tìm thấy trong lib/Varien/Autoload.phptệp.

if (defined('COMPILER_COLLECT_PATH')) {
            // do stuff
        }

Nơi khác để tìm là Mage_Core_Controller_Varien_Action. Trong lớp này, bạn sẽ tìm thấy preDispatch()phương thức, được kích hoạt cho mỗi phương thức hành động của bộ điều khiển trước khi phương thức thực sự được gửi đi. Trong phần này của lớp trình tải tự động của Magento, Varien_Autoload đang được yêu cầu tải một tệp phạm vi biên dịch cụ thể.

 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)
        );

Khi chạy trong chế độ biên dịch, Magento chỉ có một đường dẫn bao gồm duy nhất, includes/src/thư mục, vì vậy mỗi tệp được tìm thấy trực tiếp ở lần thử đầu tiên. Với số lượng đáng kể các tệp mà Magento có, việc này giúp tiết kiệm khá nhiều thời gian. Đoạn mã bên dưới được lấy từ

ứng dụng / 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";
}

Khi PHP bao gồm một tệp, nội dung được biên dịch thành opcode. Đây là một quá trình cần phải được thực hiện mỗi khi bao gồm một tập tin. Để cải thiện hiệu suất của cửa hàng của bạn hơn nữa, bạn có thể cài đặt APC trên máy chủ của mình. APC lưu trữ các phiên bản mã hóa của các tệp, làm cho chúng có sẵn cho các yêu cầu tiếp theo. Vì vậy, theo yêu cầu tiếp theo: tệp sẽ được đọc từ bộ đệm APC, thay vì phải trải qua quá trình tương tự một lần nữa và làm cạn kiệt hiệu suất của bạn.


3

MÁY TÍNH

Tất cả các tệp trình biên dịch có thể được tìm thấy trong includes/Chỉ cần không xóa .htaccesshoặc config.php. Nếu bạn xem config.phpBạn sẽ nhận thấy tất cả trình biên dịch bật / tắt sẽ xóa các bình luận #trước cả hai define. Giả sử đơn giảnrm -Rf includes/src;rm -Rf includes/stat từ gốc Magento sẽ xóa sạch dữ liệu đã biên dịch.

Đồng thời xem xét sử dụng AOE_ClassPathCache cùng với APC, vì điều này sẽ đủ xa để loại bỏ trình biên dịch ra khỏi phương trình.

Ngoài ra để thảo luận thêm về chủ đề:


BÁNH

Điều này hoàn toàn được xác định dựa trên những gì bộ nhớ đệm bạn đang sử dụng thông qua local.xml. Nếu bạn đang sử dụng filestrình xử lý bộ đệm mặc định , thì hãy xóa var/cachevà nếu Enterprise var/full_page_cache. Nếu bạn đang sử dụng kho dữ liệu như Memcache, bạn sẽ cần phải làm điều này thông qua Magento'sFlush Cache Storage hoặc thông qua phương tiện kho dữ liệu bộ đệm phải xóa / xóa bộ nhớ cache.

Ngoài ra thêm chi tiết về các kho lưu trữ dữ liệu có thể, Magento sử dụng Zend_Cache cho các cơ chế lưu đệm của nó. Mà bạn sẽ nhận thấy liên quan đến local.xmlXpaths bộ đệm.


CHÚ THÍCH

Nếu bạn đang chạy Enterprise, bạn sẽ tìm thấy tệp cấu hình thứ hai etc/enterprise.xmllà nơi kho dữ liệu cho FPC được xác định.

Sự khác biệt giữa Flush Cache và Flush Cache Storage:


0

Một lưu ý rất quan trọng về Trình biên dịch Magento. Bạn cần tắt những thứ như APC khi thực hiện biên dịch vì trình biên dịch không thể biên dịch những gì có trong APC và sẽ làm hỏng phần biên dịch của bạn. Đối với tôi điều đó có nghĩa là dỡ APC tại máy chủ và sau đó khởi động lại Apache (httpd).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.