hex*_*mal 3 php performance zend-framework autoload
我已经阅读了很多关于ZF性能的文章但仍然无法理解,如果我启用了字节码缓存(APC),使用其他一些技巧是否有意义?例如,禁用自动加载并使用一个包含所有必要类的大型php文件.
Cha*_*les 11
我很惊讶地发现这是网站上标记性能,autoload,php的唯一问题.比这更好的地方是打消#1自动加载神话:
现代的,精心设计的自动加载器不会破坏APC(或PHP 5.5的OPcache),并且性能不会比require_once(功能调用开销除外)更糟糕.
为什么?好了,现在我们有了spl_autoload_register,它允许你添加多个自动加载处理程序.这允许每个第三方库发送它自己的自动加载器,它知道如何加载该库的文件,并跳过其余的.
例如,Zend Framework 1 Zend_Loader_Autoloader限制自己尝试加载以特定伪命名空间开头的类 - Zend_(以及用户要求加载的任何其他内容).如果它没有以所需的伪命名空间开头,它只是返回并让堆栈中的下一个加载器运行.它也知道它可以找到Zend_Foo_Bar_Baz的Zend/Foo/Bar/Baz.php,所以它并不需要手动搜索包含路径.与其他现代框架自动加载器一样,它遵循PSR-0自动加载标准.
通过composer安装的任何依赖项也以相同的方式自动构建命名空间自动加载器.
这包括路径搜索,这使得设计糟糕的自动装载机很糟糕.您通常在现代PHP代码中看不到这些.stat尝试查找文件导致的密集文件系统调用是一种频繁的性能拖累.查看PHP创建者Rasmus Lerdorf的演示文稿,他通过基准测试,分析和小心删除stat调用等慢速操作来提高Wordpress的性能.
在require_once从昔日是-everything-的前期是不必要的,当你使用现代图书馆和没有苏茨基自动加载.这仅仅是一个重大胜利,当你禁用apc.stat如果您正在使用APC,或者摆弄OPcache的validate_,revalidate_和enable_file_overrideINI选项,如果你正在使用OPcache.
tl; dr:除非你知道statting包含文件是你最大的瓶颈,Zend自动加载器就好了,你不需要求助于require_once盛会.