__使用PHP获取/设置/调用性能问题
我有一个定制的MVC PHP框架,我正在重写这个框架,并且对性能和神奇的方法有疑问。对于框架的模型部分,我想如果__使用PHP获取/设置/调用性能问题,php,performance,magic-methods,Php,Performance,Magic Methods,我有一个定制的MVC PHP框架,我正在重写这个框架,并且对性能和神奇的方法有疑问。对于框架的模型部分,我想如果\uuuu get/\uu set魔术方法会导致太多的性能损失,不值得使用。我的意思是访问(读和写)模型数据将是执行的最常见的事情之一。对于像MVC框架的模型部分这样的大量使用功能来说,使用\uuu get/\uu set魔术方法对性能的影响是否太大 它当然会对性能造成很大的影响,特别是考虑到PHP中函数调用的开销。在PHP的下一个版本中,这种差异将更大,它实现了优化,使对声明的实例属
\uuuu get
/\uu set
魔术方法会导致太多的性能损失,不值得使用。我的意思是访问(读和写)模型数据将是执行的最常见的事情之一。对于像MVC框架的模型部分这样的大量使用功能来说,使用\uuu get
/\uu set
魔术方法对性能的影响是否太大
它当然会对性能造成很大的影响,特别是考虑到PHP中函数调用的开销。在PHP的下一个版本中,这种差异将更大,它实现了优化,使对声明的实例属性的常规访问大大加快
也就是说,PHP很少成为瓶颈。I/O和数据库查询通常需要更多的时间。但是,这取决于您的使用情况;唯一能确定它是否符合基准的方法
这也是magic方法的其他可读性问题。它们经常退化为一个大的
开关语句和折衷的代码完成,这两个语句都可能会影响编程效率。纯粹根据我的经验,它确实会增加相当多的开销。在一个大约有4000个\uuu get
的页面上(是的,该页面上有很多数据),性能相当慢,以至于无法接受。我扔掉了所有变量的\uuu set
,\uu get
,这些变量不需要更改其他数据或检查外部依赖性(如外键),之后,生成该页面的时间大约是以前的15%。我刚刚问了自己同样的问题,得出了同样的结论:最好以传统方式设置属性__get()+巨大的开关使一切都变慢了这是一个(三岁)的有一些基准测试。运行您自己的测试,看看它如何影响您的代码
一般来说,它们的速度要慢得多。但它们是瓶颈吗?这取决于你在做什么。如果你关心速度,它会停在哪里?foreach
循环比for
循环慢,但大多数人不会重写所有代码来使用for
仅仅使用PHP意味着代码的速度并不那么关键。就我个人而言,我喜欢任何使编程更容易的风格 有些IDE允许在有魔法方法的情况下完成代码。您应该尝试另一种方法来使用它们,并且只在必要时使用它们。在我看来,它们不仅速度慢,而且更难阅读和维护。