我正在考虑使用启用了APC的Zend Server,但是我需要先了解一些东西。
使用Zend Server + Zend Framework是否有任何好处,还是只需使用任何普通系统来托管此应用程序即可?
沙米尔
以下是加快ZF速度的技巧(从上到下尝试):
Zend_Locale::setCache(), Zend_Currency::setCache(), Zend_Db_Table::setDefaultMetadataCache(), configs...
$a
和$b
带来了性能增益。任何opcode缓存当然都是必须的 ;)(APC,ZendOptimizer等)
Zend Server是一个非常通用的PHP编译器(来自LAMP或WAMP堆栈中的P),但更加先进,提供了漂亮的GUI来设置所有内容(而不是编辑php.ini),但更重要的是:
如果您只需要APC,可能会有其他解决方案(我还不知道),但需要APC表明您想要缓存和作业查询...我喜欢它。
不需要使用Zend Framework即可使用它,但您可以使用任何框架(或无框架)。
好的事情是您可以免费尝试ZS的完整功能30天(CE中不提供APC ---->>>> 错误,CE中提供APC)
Op-code缓存是在生产环境中运行PHP时您始终想要使用的一个扩展。 Apc是一个op-code缓存和数据缓存扩展,但在Zend服务器中,主要的op-code缓存被称为“Optimizer plus”,我建议在决定使用APC之前比较这两者的性能。 Zend服务器中还有另一个扩展可以完成数据缓存工作。 许多文件包含(例如Zend框架)由于存储在内存中编译,因此使用op-code缓存不再是问题,并且不需要太长时间即可开始使用它们。
使用Zend服务器的完整(付费)版本结合代码跟踪可以实现另一个重大的性能提升,这将为您的应用程序提供有关问题和未优化代码的有价值信息。使用此组合可以非常快速地解决长脚本和函数执行、长DB查询等问题。
源代码 这个技巧并不新鲜。它直接来自Zend框架文档:Zend框架性能指南,我使用了其中的一些内容,并省略了一些东西。
使用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缓存。在您的引导文件中,放置以下代码:
//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);
这些是基本设置,我认为可能会有帮助。