我很喜欢使用特征来保持代码的清洁,并且不包含具有2000行的类。但是,我想知道这是否会对性能产生负面影响吗?有人用真实的课程测试过吗?
关于下面的一些演示代码,WithTraits类比SomeClass慢吗?
最好的问候 菲利普
class SomeClass {
public function function1() {
//...
}
public function function2() {
//...
}
public function function3() {
//...
}
}
trait Function1 {
public function function1() {
//...
}
}
trait Function2 {
public function function2() {
//...
}
}
trait Function3 {
public function function3() {
//...
}
}
class WithTraits {
use Function1;
use Function2;
use Function3;
}
答案 0 :(得分:1)
通过将特征复制并粘贴到使用该特征的所有类中来进行工作,因此可能会对性能产生一些影响。但是,这不是不使用它们的充分理由。
首先,如果您正在使用操作码缓存(应该这样做),那么在将PHP编译为字节码时将复制特征,因此在执行初始编译步骤后,您应该不会看到性能上的任何显着差异
第二,这是微优化的一个很好的例子。在大多数网络应用中,总是会出现更严重的性能问题,例如:
这些问题可以通过诸如重构查询,添加索引,使用ORM的急切加载,缓存数据或响应以及将功能移动到消息队列中的方式来解决,而用户在技术上不需要等待它。
与这些问题相比,引入特征的任何开销都可以忽略不计,并且当然不值得失去将代码移至特征所获得的更具可读性的代码和减少的代码重复的好处。当然不值得担心。