"函数调用很昂贵"与"保持函数小"

Nic*_*ick 46 javascript performance

一方面,我读到或听到"函数调用很昂贵"并且它们会影响效率(例如,在Nicholas Zakas的Google技术谈话中).

在另一方面,然而,似乎接受了函数/方法最好剪短,只应该真正执行一个任务,如一般在接受这里.

我在这里遗漏了什么,或者这两条建议是否相互冲突?是否有一些经验法则允许人们保持禅宗般的平衡?

Tom*_*icz 43

适用于所有语言的一般规则是:保持函数(方法,程序)尽可能小.当您添加适当的命名时,您将获得非常易于维护和可读的代码,您可以轻松地专注于一般情况并深入了解有趣的细节.通过一种巨大的方法,您始终可以查看详细信息并隐藏大图.

此规则特别适用于聪明的语言和编译器,它们可以执行花哨的优化,例如内联或发现哪些方法不是真正的虚拟,因此不需要双重调度.

回到JavaScript - 这在很大程度上依赖于JavaScript引擎.在某些情况下,我会期望合适的引擎内联函数,避免执行成本,特别是在紧密循环中.但是,除非遇到性能问题,否则请选择较小的功能.可读性更重要.

  • +1首先编写可读性,然后在遇到效率问题时优化代码并优化瓶颈. (19认同)

rai*_*7ow 12

在一个完美的世界中,没有错误(因为代码只是神奇地修复了自己),并且要求从第一天开始就被冻结,因此可能有巨大的无所不能的功能.

但在这个世界上,它变得过于昂贵 - 而且不仅仅是"人月".Nicholas Zakas写了一篇精彩的文章,描述了软件开发人员目前面临的大多数挑战.

过渡可能看起来有点人为,但我的观点是"一个功能 - 一个任务"的方法更加可维护和灵活 - 换句话说,它最终使得两个开发人员和客户满意.

但是,这并不意味着您不会尽可能少地使用函数调用:只要记住它不是最重要的.