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

问题描述

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

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

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

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

性能正常时

18左右秒处理完全部请求

使用trait后

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

相关环境

Laravel 9.20
PHP 8.1.7
Swoole 4.x

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

测试方式不对吧?

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

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

可能的影响

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

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

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

测试方式不对吧?

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

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

可能的影响

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

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

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

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