2012-01-11 76 views
1

Magento具有回退机制,通过定义的一组路径检查预期文件是否存在,有助于防止错误和主题问题。 It's implemented like thisMagento的回退机制的性能成本是多少?

/** 
* Check for files existence by specified scheme 
* 
* If fallback enabled, the first found file will be returned. Otherwise the base package/default theme file, 
* regardless of found or not. 
* If disabled, the lookup won't be performed to spare filesystem calls. 
* 
* @param string $file 
* @param array &$params 
* @param array $fallbackScheme 
* @return string 
*/ 
protected function _fallback($file, array &$params, array $fallbackScheme = array(array())) 
{ 
    if ($this->_shouldFallback) { 
     foreach ($fallbackScheme as $try) { 
      $params = array_merge($params, $try); 
      $filename = $this->validateFile($file, $params); 
      if ($filename) { 
       return $filename; 
      } 
     } 
     $params['_package'] = self::BASE_PACKAGE; 
     $params['_theme'] = self::DEFAULT_THEME; 
    } 
    return $this->_renderFilename($file, $params); 
} 

由于Magento的主题,开发人员,你有两个选择:你可以尽量少添加到您的新的主题,并依赖于回退,也可以一切从后备主题复制到新的主题,修改(在这种情况下,回退必须在找到目标之前遍历更少的文件)。前一种方法是推荐的。后者不是。

复制这些文件肯定是混乱的,但另一方面,似乎回退应该相当昂贵,特别是如果(作为一个好的,简洁的编码器)确保尽可能多的文件回退。所以我发现自己想知道如果我采取措施最小化发生的回退量,Magento网站的性能会更好。

我已经在网上搜索过,但还没有找到任何关于这个问题的信息,而且我还不是很熟悉Magento来自己剖析备份。有没有关于此回退机制的实际性能成本的任何信息?

回答

4

性能成本是37

减snarkily:你的问题是,不幸的是,无法回答。虽然说明这些文件和目录的性能成本很明显,但Magento(以及任何LAMP应用程序)由于SQL开销和CPU会比其他因素造成的性能瓶颈要快得多。现代Web应用程序的性能调整往往不会发生在应用程序级别上,而是将应用程序视为不可更改的blob,并购买/配置最佳硬件设置。

如果有人对Magento进行了回退测试,他们没有公开分享这些信息。

0

有一个性能成本,但像艾伦说的那样,它将取决于你的服务器架构比应用程序更多。

值得注意的是,Magento也有代码文件的回退机制,这也可能会耗费您宝贵的毫秒。与主题备用不同,这有一个解决方法。 Magento称之为“编译器”。

通常情况下,当加载类的请求时,自动加载磁带机看起来四个 位置找到合适的PHP文件:应用程序/代码/本地应用程序/代码/社区应用程序/代码/内核,最后是lib。如果你想用你自己的版本来超载某些核心代码,这很有用,但是由于散布在 文件系统周围的大量类,它会变慢。

因此,Magento Compiler确保自动加载器只需查看includes/src,并且将打开较少的文件。

理论上,这不应该有太大的差异,因为你的服务器应该缓存这些文件,但你必须要阅读全文,以了解为什么它是不那么切干。

http://www.byte.nl/blog/should-i-use-the-magento-compiler

轶事证据:在与大量的第三方模块的店,我们看到的时间到首字节下降,由〜2秒〜1.6秒,只是通过启用汇编。

警告字:某些第三方模块构建不正确,导致整个存储在编译启用时中断。通常这是因为他们正在尝试使用include_oncerequire_once某个具有相对路径的文件,并且它不起作用,因为启用编译时该文件位于不同的目录中。