在 PHP 和 JavaScript 等解释性编程语言中,使用面向对象的方法优于过程方法的影响是什么?
具体来说,我正在寻找的是在创建 Web 应用程序并在过程和面向对象方法之间进行选择时要考虑的事项清单,不仅可以优化速度,还可以优化可维护性。如果您知道任何进一步探讨此问题的文章,引用的研究和测试用例也会有所帮助。
底线:在解释语言中使用 OO 与程序时,性能的真正影响有多大(如果有的话)?
在 PHP 和 JavaScript 等解释性编程语言中,使用面向对象的方法优于过程方法的影响是什么?
具体来说,我正在寻找的是在创建 Web 应用程序并在过程和面向对象方法之间进行选择时要考虑的事项清单,不仅可以优化速度,还可以优化可维护性。如果您知道任何进一步探讨此问题的文章,引用的研究和测试用例也会有所帮助。
底线:在解释语言中使用 OO 与程序时,性能的真正影响有多大(如果有的话)?
也许我疯了,但在这种情况下使用解释性语言担心速度就像试图弄清楚要给棚子涂上什么颜色一样。我们甚至不要认为这种优化完全不成熟。
当您说“可维护性”时,您一针见血。我会选择最高效和最可维护的方法。如果您以后需要速度,它不会来自解释语言中的过程与面向对象的编码范例之间的切换。
不幸的是,我也做过测试。我测试了速度,结果差不多,但是当在 PHP 中测试内存使用获取 memory_get_usage() 时,我看到 OOP 方面的数字要大得多。
OOP 为 116,576 字节,程序为 18,856 字节。我知道“硬件很便宜”,但是来吧!使用量增加 1,000%?抱歉,这不是最佳选择。有这么多用户同时访问您的网站,我敢肯定您的 RAM 会烧毁或耗尽。我错了吗?
底线:不,因为解释的开销超过了方法调度的开销。
根据我的经验,使用 OOP 代码而不是程序代码,负载重的站点会更容易陷入困境并变得无响应。原因很容易理解。
OOP requires a lot more memory allocations (MALLOC) and a lot more operations to run in memory than procedural code. It requires a lot more CPU time to perform its tasks. It is essentially 'overhead', wrapped around procedural code, adding to the CPU burden to execute it, especially when performing database operations.
Many programmers like the convenience of OOP, creating little black boxes hidden behind simple interfaces. However, I have been paid well to revive sites that were taking forever to respond under heavy user load. Stripping out the OOP and replacing it with simple procedural functions made a huge difference.
If you don't expect your site to be very busy, by all means use OOP. If you are building a high-traffic system, you'll want to strip every CPU cycle from the processing and every byte from the output that you can.
如果您使用的是解释性语言,则差异无关紧要。如果性能是一个问题,您不应该使用解释型语言。两者的表现大致相同。
你的表现将取决于实现,而不是语言。你可以使用最慢的语言,只要你设计成可扩展的,它就可以扩展成世界上最大的网站。
只要记住优化的第一条规则。
不。
:)
我实际上在我维护的一个网站上用 python 做了一个像这样的小测试,发现它们的速度几乎相同,程序方法以千分之十秒的速度获胜,但是 OO 代码是如此显着更清洁我没有继续练习超过一次迭代。
所以真的,没关系(无论如何根据我的经验)。