为什么继承trait类会使程序整体性能降低两倍!

问题描述

我有个需求,就是控制器需要继承两个类,TraubenBBS类和Controller类。

所以我把TraubenBBS写trait里,然后控制器继承这个trait和Controller类,然而发现性能大大折扣。

只能TraubenBBS类继承Controller类,然后控制器在继承TraubenBBS类。解决性能折扣问题,但我并不喜欢这种写法,而且不容易维护。

所以我需要另外一种解决方式,以及使用trait使性能降低的原因。

性能正常时

18左右秒处理完全部请求

使用trait后

性能降低两倍,实际访问也能感觉到差异

相关环境

Laravel 9.20
PHP 8.1.7
Swoole 4.x

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

测试方式不对吧?

你是不是模拟请求测试 trait 功能了?这样的误差会很大

试下循环 new 带 trait 和不带的 class 的执行时间

可能的影响

代码独立到 trait 文件,会多读一个文件,就多一次 io 时间(非常驻内存,如 php-fpm)

用了 swoole 已经是常驻内存的,应该不会用影像了

2年前 评论
威尼斯 (楼主) 2年前
讨论数量: 2

测试方式不对吧?

你是不是模拟请求测试 trait 功能了?这样的误差会很大

试下循环 new 带 trait 和不带的 class 的执行时间

可能的影响

代码独立到 trait 文件,会多读一个文件,就多一次 io 时间(非常驻内存,如 php-fpm)

用了 swoole 已经是常驻内存的,应该不会用影像了

2年前 评论
威尼斯 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!