我正试图从我的应用程序中获得尽可能多的性能,该应用程序使用Zend Framework。
我正在考虑使用Zend Server,启用APC。但是,我需要先了解一些事情。
使用Zend Server + Zend Framework有什么好处,还是我应该使用任何普通的系统来托管它?
包括
我提示更快的ZF(从上到下尝试):
Zend_Locale::setCache(), Zend_Currency::setCache(), Zend_Db_Table::setDefaultMetadataCache(), configs...
$a
和$b
替换长变量,在“干”操作码缓存和HDD压力下带来性能提升。任何操作码缓存当然是必须的;)(APC,ZendOptimizer等)
无论您运行什么样的堆栈,APC都会提供帮助。任何类型的OPcode缓存都会。
在加速应用程序方面,第一步是对其进行分析。使用Xdebug生成cachegrind报告,然后使用类似kcachegrind或webgrind的内容来解释它。
通过使用Zend Framework,我通常会发现以下一些难点:
页面级缓存将有很大帮助。在不需要新数据的任何地方,缓存它。
过去它不再是Zend Framework或服务器问题,它开始具有架构性质。你能异步地解决密集型任务吗?有时候不值得优化,但值得改变用户感知以获得更快的感觉。
有趣的想法,有一天我退缩了$ i ++以用++ $ i替换它。它在技术上更快,但我确信我花费的时间在程序生命周期中永远不会重获。你必须在某处绘制线:)
Zend Server是一个非常普遍的PHP编译器(来自LAMP或WAMP堆栈的P),但是更先进,给你很好的GUI设置一切(而不是编辑php.ini),但更多的导入:
如果您只寻找APC可能其他解决方案(我还不知道)可能更便宜,但需要APC建议您希望缓存和求职...我喜欢它。
Zend Framework不需要使用它,但您可以使用任何您想要的框架(或没有框架)。
好的,你可以尝试ZS全部免费使用30天(APC不适用于CE ---- >>>>错误的APC IS可用于CE)
在生产中运行PHP时,操作码缓存是您一直想要使用的一个扩展。 Apc是一个操作码缓存和数据缓存扩展,但在Zend服务器中,主操作码缓存称为“优化器加”,我建议在决定使用APC之前比较2之间的性能。 Zend服务器中还有另一个扩展,用于执行数据缓存作业。许多文件包含(如在Zend框架中)不再是操作代码缓存的问题,因为它们被编译存储在内存中并且不再需要很长时间才能开始使用它们。
使用完整(付费)版本的Zend服务器可以实现另一个主要的性能提升,它使用PHP监控结合代码跟踪,可以提供有关问题和应用程序中未优化代码的有价值信息。使用这种组合可以非常快速地解决诸如长脚本和函数执行,长DB查询等问题。
来源这个提示并不新鲜。它直接来自Zend Framework文档:Zend Framework Performance Guide,我使用的东西是我跳过的一些东西。
使用Zend_Loader并删除所有require_once
我们实际上无法删除所有require_once语句。我们必须至少有一个require_once来加载Zend_Loader。首先,激活Zend Loader。
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
接下来将删除Zend目录中所有文件的所有require_once语句。如果您使用的是Eclipse PDT,则可以使用查找和替换功能。
使用Zend_Cache缓存Zend_Db_Table元数据
当您使用Zend_Db_Table(我有时只使用Zend_Db)时,您会注意到当您尝试从数据库中检索数据时,调用的第一个查询是DESCRIBE表。 Zend_Db_Table使用DESCRIBE查询的信息在SELECT上发挥其魔力。
正如我描述了我的查询,我注意到DESCRIBE查询是最长的查询(在大多数情况下),这意味着你的检索操作有很大的开销。您有两种选择:
(A)不要使用Zend_Db_Table(去Zend_Db)(B)缓存MetaData
在这篇文章中,我将使用MetaData的缓存。在你的bootstrap文件中,放下这段代码:
//Caching
$frontendOptions = array(
'lifetime' => 25200,
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => APPLICATION_PATH . '/tmp'
);
$cache = Zend_Cache::factory(
'Core',
'File',
$frontendOptions,
$backendOptions
);
//Cache table metadata
Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);
缓存插件加载器类文件
使用插件时,Zend Framework包含几个文件,具体取决于所使用的插件,并处理几个迭代以找到正确的插件并包含它。使用下面的代码,它会创建一个include_once语句列表以包含这些插件文件。只需将这段代码包含在您的引导程序中即可。
//Plugin Loader caching
$classFileIncCache = APPLICATION_PATH . '/data/pluginLoaderCache.php';
if (file_exists($classFileIncCache)) {
include_once $classFileIncCache;
}
Zend_Loader_PluginLoader::setIncludeFileCache($classFileIncCache);
缓存您的数据
缓存数据将是优化中最重要的部分,当重复访问的数据已经缓存时,这将为您节省大量数据库访问。设置缓存过期时间并在数据更改时清除缓存非常重要。下面显示了一个简单的缓存。
在你的引导程序上:
//Caching
$frontendOptions = array(
'lifetime' => 25200,
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => APPLICATION_PATH . '/tmp'
);
$cache = Zend_Cache::factory(
'Core',
'File',
$frontendOptions,
$backendOptions
);
$registry->set('cache', $dbCache);
这是我认为可能有用的基本设置。