แคชวีโอไอพีไม่แตกต่างกัน เริ่มต้นด้วยพื้นฐานตัวเลือกแคชสามารถดูได้โดยไปที่
ระบบ -> การจัดการแคช
ในแบ็กเอนด์ คุณสามารถดูพื้นที่ต่าง ๆ ของการแคชที่สามารถเปิดใช้งาน / ปิดใช้งานเช่นการกำหนดค่าใด ๆ , layout.xml, บล็อก, เต็มหน้าและไฟล์ api เห็นได้ชัดว่าอุดมคติคือการเปิดใช้งานสิ่งเหล่านี้เมื่อเว็บไซต์เปิดใช้งาน
แคชสามารถล้างหรือล้างออกได้จากที่นี่ การกดปุ่มที่มีข้อความ“Flush Magento Cache”
จะล้างไฟล์แคชใด ๆ ที่ตรงกับชุดของแท็กเริ่มต้นที่ Magento ใช้ นี่เป็นวิธีที่“ ปลอดภัยกว่า” ในการล้างแคชเนื่องจากมันไม่ได้ล้างทุกอย่าง หากคุณใช้แคชประเภทที่สองการคลิก“Flush Cache Storage”
จะช่วยให้มั่นใจได้ว่าคุณได้ล้างแคชแล้วเพราะจะล้างทุกอย่าง อีกสองปุ่มที่คุณเห็นในหน้าผู้ดูแลระบบจะล้าง javascript และ css และรูปภาพแคตตาล็อก
วิธีอื่นและปลอดภัยน้อยลงเล็กน้อยในการล้างแคชคือการนำทางไปยัง
websiteroot / var / แคช
และลบไฟล์ทั้งหมดด้วยตนเอง กันไปสำหรับ
websiteroot / var / full_page__cache
หากคุณเปิดใช้งานแคชแบบเต็มหน้า
แคชแบบเต็มหน้ามีอยู่ใน Enterprise Edition ทำให้ไซต์ของคุณเร็วขึ้นถึง 10 เท่า แต่สิ่งสำคัญคือการรู้เพียงเล็กน้อยเกี่ยวกับเรื่องนี้ในกรณีที่คุณสังเกตเห็นว่าเนื้อหาแบบไดนามิกใด ๆ ถูกแคช ไฟล์ที่น่าสนใจที่จะดูคือ
websiteroot / app / รหัส / หลัก / องค์กร / PageCache / etc / cache.xml
ที่นี่คุณสามารถดูสิ่งที่ถูกแคชโดย FPC ชื่อบล็อกชื่อคอนเทนเนอร์และอายุการใช้งานของเซสชัน หากคุณพบว่าจำเป็นต้องมีการแก้ไขหรือลบบล็อคเหล่านี้ออกจากแคชคุณสามารถทำได้โดยการสร้างโมดูลที่ขึ้นอยู่กับโมดูล PageCache และทำการแก้ไขใด ๆ
แท็กตัวยึดบอก FPC ว่าบล็อกนั้นถูกพิจารณาว่าเป็นแบบไดนามิก เมื่อเพจถูกโหลดหากบล็อกยังไม่อยู่ในแคชค่า ID นี้ในแท็กตัวยึดจะค้นหาในแคชและหากไม่มีอยู่บล็อกนั้นจะถูกเรียกและสร้างขึ้นและบล็อกนั้นจะถูกเพิ่มและ ID จะถูกเพิ่มเข้าไป แคช
คุณสมบัติการรวบรวมของวีโอไอพีอยู่ภายใต้
ระบบ> เครื่องมือ> การรวบรวม
หากคุณกำลังเรียกใช้การติดตั้งใหม่คุณอาจได้รับข้อความของระบบว่าทั้งสองincludes and includes/src/
ไดเรกทอรีจะต้องทำการเขียนได้ เมื่อเสร็จแล้วเราสามารถกดปุ่ม 'เรียกใช้กระบวนการรวบรวม' และโดยทั่วไปคุณทำเสร็จแล้ววีโอไอพีคอร์กำลังใช้การรวบรวม
เมื่อวีโอไอพีคอมไพล์มันเป็นซอร์สโค้ดกรอบจะทำบางสิ่ง การถูกทริกเกอร์ผ่านผู้ดูแลระบบหรือ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 ทั้งหมดจากทั้งสอง
app / รหัส
และ lib ไดเรกทอรีไปที่
/ includes / src
ไดเรกทอรี ดังที่คุณเห็นในตัวอย่างด้านล่าง: ในระหว่างกระบวนการนี้วีโอไอพีจะวนซ้ำซ้ำผ่านไฟล์และไดเรกทอรีทั้งหมด ในที่สุดเส้นทางเหล่านี้จะถูกใช้เป็นชื่อไฟล์ เมื่อกระบวนการเรียกซ้ำพบไฟล์มันจะตรวจสอบส่วนขยาย PHP และเมื่อพบไฟล์จะถูกคัดลอกไปยังไดเรกทอรีคอมไพเลอร์ ไฟล์ประเภทอื่น ๆ จะไม่ถูกแตะต้อง
ตัวอย่างเช่น: พา ธ สำหรับคลาส Mage_Catalog_Model_Category คือ
app / รหัส / core / Mage / แคตตาล็อก / รุ่น / Category.php
แต่เมื่อเปิดใช้งานการคอมไพล์แล้วตอนนี้ก็กลายเป็น
รวมถึง / 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 /
แต่จะถูกเก็บไว้ในไดเรกทอรีที่มีชื่อของมันเกี่ยวข้องกับ namespace คิดว่า: Mage, Enterprise หรือ namespace ที่กำหนดของคุณเอง
ภายในไดเรกทอรีเนมสเปซเหล่านี้คอนโทรลเลอร์จะถูกจัดเก็บตามโมดูลและโครงสร้างไดเรกทอรีคอนโทรลเลอร์จะไม่ถูกแตะต้อง เช่นเดียวกันกับชื่อไฟล์มันเป็นเพียงสำเนาที่แน่นอน ตรรกะทั้งหมดนี้สามารถพบได้ในวิธีการดังต่อไปนี้$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
ในระหว่างกระบวนการสร้างไฟล์ขอบเขตเหล่านี้วีโอไอพีจะแยกวิเคราะห์การขยายคลาสและอินเทอร์เฟซทั้งหมดที่ใช้โดยคลาสที่ให้ไว้ในรายการขอบเขตโดยอัตโนมัติ
เมื่อไฟล์ทั้งหมดอยู่ในสถานที่และรวบรวมแล้ววีโอไอพีก็พร้อมที่จะเปิดใช้งานคุณสมบัติการรวบรวมสำหรับการใช้งาน
สุดท้าย แต่ไม่ท้ายสุดการกำหนดค่าที่เกี่ยวข้องกับการคอมไพล์จะถูกปรับ ไฟล์นี้สามารถพบได้ที่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 จะตรวจสอบว่ามีการเปิดใช้งานโหมดการคอมไพล์ด้วยคำสั่งต่อไปนี้หรือไม่ การใช้ codebase (โดยใช้ 'grep') คุณจะสังเกตได้ว่าตรรกะส่วนใหญ่สามารถพบได้ในlib/Varien/Autoload.php
ไฟล์
if (defined('COMPILER_COLLECT_PATH')) {
// do stuff
}
สถานที่อื่น ๆ Mage_Core_Controller_Varien_Action
ที่จะมองหาคือ ในคลาสนี้คุณจะพบpreDispatch()
วิธีการซึ่งจะถูกเรียกใช้สำหรับวิธีการดำเนินการควบคุมแต่ละวิธีก่อนที่จะส่งวิธีการจริง ในส่วนนี้ของคลาส Autoloader ของวีโอไอพีรุ่น 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)
);
เมื่อทำงานในโหมดการรวบรวมวีโอไอพีจะมีพา ธ รวมเดียวเท่านั้นincludes/src/
ดังนั้นไดเรกทอรีจะพบไฟล์แต่ละไฟล์โดยตรงในครั้งแรก ด้วยไฟล์จำนวนมากที่วีโอไอพีมีอยู่ทำให้ประหยัดเวลาได้ค่อนข้างมาก ตัวอย่างด้านล่างถูกนำมาจาก
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 จะแคชไฟล์เวอร์ชันที่มีการเข้ารหัสเพื่อให้พร้อมใช้งานสำหรับคำขอต่อไป ดังนั้นเมื่อมีคำขอถัดไป: ไฟล์จะถูกอ่านจากแคช APC แทนที่จะต้องผ่านกระบวนการเดิมอีกครั้งและระบายประสิทธิภาพของคุณ