Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 速度比较-解释语言中的过程与OO_Performance_Oop_Maintainability_Procedural_Interpreted Language - Fatal编程技术网

Performance 速度比较-解释语言中的过程与OO

Performance 速度比较-解释语言中的过程与OO,performance,oop,maintainability,procedural,interpreted-language,Performance,Oop,Maintainability,Procedural,Interpreted Language,在解释型编程语言(如PHP和JavaScript)中,使用面向对象的方法而不是过程方法会产生什么影响 具体地说,我要寻找的是在创建Web应用程序和在程序和面向对象方法之间进行选择时要考虑的事项清单,不仅要优化速度,还要优化可维护性。如果您知道任何进一步探讨这一点的文章,引用的研究和测试案例也会有所帮助 底线:在解释语言中使用OO与过程相比,性能的影响到底有多大(如果有的话)?底线:没有,因为解释的开销压倒了方法调度的开销。也许我疯了,但在这种情况下,使用解释性语言担心速度就像试图弄清楚要把棚子涂

在解释型编程语言(如PHP和JavaScript)中,使用面向对象的方法而不是过程方法会产生什么影响

具体地说,我要寻找的是在创建Web应用程序和在程序和面向对象方法之间进行选择时要考虑的事项清单,不仅要优化速度,还要优化可维护性。如果您知道任何进一步探讨这一点的文章,引用的研究和测试案例也会有所帮助


底线:在解释语言中使用OO与过程相比,性能的影响到底有多大(如果有的话)?

底线:没有,因为解释的开销压倒了方法调度的开销。

也许我疯了,但在这种情况下,使用解释性语言担心速度就像试图弄清楚要把棚子涂成什么颜色一样。我们甚至不要认为这种优化是完全不成熟的


你说“可维护性”一针见血。我会选择最高效、最易维护的方法。如果您以后需要速度,它不会来自在解释语言内部的过程性和面向对象的编码范例之间的切换。

如果您使用的是解释语言,那么差异是无关的。如果性能有问题,则不应使用解释语言。两者的性能大致相同。

事实上,我在自己维护的网站上用python做了一个类似的小测试,发现它们的速度几乎相当,过程性方法以大约万分之一秒的速度获胜,但由于OO代码非常干净,我只进行了一次迭代


因此,实际上,这并不重要(以我的经验来说)。

您的性能将由实现而不是语言决定。你可以使用最慢的语言,只要你按比例设计,它就可以成为世界上最大的网站

记住优化的第一条规则

不要


:)

不幸的是,我也做了测试。我确实测试了速度,大致相同,但在PHP中测试内存使用量getting memory_get_usage()时,我发现OOP端的数字要大得多


OOP为116576字节,过程为18856字节。我知道“硬件很便宜”,但别这样!使用量增加1000%?对不起,这不是最好的。如果有这么多用户同时访问你的网站,我敢肯定你的内存会烧坏,或者耗尽。我错了吗?

根据我的经验,一个负载很重的站点会陷入困境,使用OOP代码比使用程序代码更容易失去响应。原因很容易理解

OOP需要比过程代码多得多的内存分配(MALLOC)和在内存中运行的操作。它需要更多的CPU时间来执行任务。它本质上是“开销”,缠绕在过程代码周围,增加了执行过程的CPU负担,尤其是在执行数据库操作时

许多程序员喜欢OOP的便利性,在简单的界面后面创建隐藏的小黑匣子。然而,我得到了很好的报酬来恢复那些在沉重的用户负载下永远无法响应的网站。剥离OOP并用简单的过程函数替换它,产生了巨大的不同


如果你不希望你的站点非常繁忙,那么一定要使用OOP。如果你正在构建一个高流量的系统,你会希望尽可能地从处理中去除每个CPU周期,从输出中去除每个字节。

我让老板从地狱里出来。他对编程一无所知,但认为自己什么都懂(有一次他教我Unix时间戳,告诉我,“Unix时间戳就像欧洲的时间戳。他们做得很奇怪,他们把日期放在第一位,然后把月份放在第二位:dd/mm/yyyy”ROFL,真是个白痴)。所以当他发现我在做OO PHP时,他激动地说这会“减慢我们网站的速度”。我一直在寻找我能找到的任何类型的研究来证明他充满了它,这样我就可以继续编程OO…OOP是生产力和可维护性较低的。@cmccilloh是的,在欧洲,它是从第一天到第二天,基本上是从最小到最大,在中国,它是从最大到最小的yyyy/mm/dd。显然,这些是逻辑上有意义的唯一方法。嗯,有趣的类比,对我来说没有意义,可以很容易地在最后选择棚子的颜色,它不会影响棚子的整体设计。在过程风格和面向对象风格之间切换代码库非常复杂,几乎需要完全重写代码。