composer autoload自动加载性能优化的示例

发布时间:2021-03-16 10:42:13 作者:小新
来源:亿速云 阅读:185

这篇文章主要介绍composer autoload自动加载性能优化的示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

composer 提供的 autoload 机制使得我们组织代码和引入新类库非常方便,但是也使项目的性能下降了不少 。

composer autoload 慢的主要原因在于来自对 PSR-0 和 PSR-4 的支持,加载器得到一个类名时需要到文件系统里查找对应的类文件位置,这导致了很大的性能损耗,当然这在我们开发时还是有用的,这样我们添加的新的类文件就能即时生效。 但是在生产模式下,我们想要最快的找到这些类文件,并加载他们。

因此 composer 提供了几种优化策略,下面说明下这些优化策略。

第一层级(Level-1)优化: 生成 classmap

如何运行:

执行命令 composer dump-autoload -o (-o 等同于 --optimize)

原理:

这个命令的本质是将 PSR-4/PSR-0 的规则转化为了 classmap 的规则, 因为 classmap 中包含了所有类名与类文件路径的对应关系,所以加载器不再需要到文件系统中查找文件了。可以从 classmap 中直接找到类文件的路径。

注意事项

建议开启 opcache , 这样会极大的加速类的加载。

php5.5 以后的版本中默认自带了 opcache 。

这个命令并没有考虑到当在 classmap 中找不到目标类时的情况,当加载器找不到目标类时,仍旧会根据PSR-4/PSR-0 的规则去文件系统中查找

第二层级(Level-2/A)优化:权威的(Authoritative)classmap

执行命令:

执行命令 composer dump-autoload -a (-a 等同于 --classmap-authoritative)

原理

执行这个命令隐含的也执行了 Level-1 的命令, 即同样也是生成了 classmap,区别在于当加载器在 classmap 中找不到目标类时,不会再去文件系统中查找(即隐含的认为 classmap 中就是所有合法的类,不会有其他的类了,除非法调用)

注意事项

如果你的项目在运行时会生成类,使用这个优化策略会找不到这些新生成的类。

第二层级(Level-2/B)优化:使用 APCu cache

执行命令:

执行命令 composer dump-autoload --apcu

原理:

使用这个策略需要安装 apcu 扩展。

apcu 可以理解为一块内存,并且可以在多进程中共享。

这种策略是为了在 Level-1 中 classmap 中找不到目标类时,将在文件系统中找到的结果存储到共享内存中, 当下次再查找时就可以从内存中直接返回,不用再去文件系统中再次查找。

在生产环境下,这个策略一般也会与 Level-1 一起使用, 执行composer dump-autoload -o --apcu, 这样,即使生产环境下生成了新的类,只需要文件系统中查找一次即可被缓存 , 弥补了Level-2/A 的缺陷。

如何选择优化策略?

要根据自己项目的实际情况来选择策略,如果你的项目在运行时不会生成类文件并且需要 composer 的 autoload 去加载,那么使用 Level-2/A 即可,否则使用 Level-1 及 Level-2/B是比较好的选择。

几个提示

以上是“composer autoload自动加载性能优化的示例”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. composer+psr-4实现自动加载
  2. PHP组件、框架以及Composer是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

composer autoload

上一篇:Bootstrap中的图标怎么用

下一篇:php中Cookie的使用方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》