为什么继承trait类会使程序整体性能降低两倍!
问题描述
我有个需求,就是控制器需要继承两个类,TraubenBBS类和Controller类。
所以我把TraubenBBS写trait里,然后控制器继承这个trait和Controller类,然而发现性能大大折扣。
只能TraubenBBS类继承Controller类,然后控制器在继承TraubenBBS类。解决性能折扣问题,但我并不喜欢这种写法,而且不容易维护。
所以我需要另外一种解决方式,以及使用trait使性能降低的原因。
性能正常时
18左右秒处理完全部请求
使用trait后
性能降低两倍,实际访问也能感觉到差异
相关环境
Laravel 9.20
PHP 8.1.7
Swoole 4.x
测试方式不对吧?
你是不是模拟请求测试 trait 功能了?这样的误差会很大
试下循环 new 带 trait 和不带的 class 的执行时间
可能的影响
代码独立到 trait 文件,会多读一个文件,就多一次 io 时间(非常驻内存,如 php-fpm)
用了 swoole 已经是常驻内存的,应该不会用影像了