变量名称会影响网站的性能吗?


10

变量名称会影响网站性能吗?我知道这将是一个很小的数字,但是仍然有人可以提供在性能方面不选择长变量名的原因吗?


2
请阐明您的问题-该变量在哪里以及用什么语言编写?
卢克·格雷厄姆

16
如果您的推理是(可疑的)性能,则绝​​对不要选择简短而又不合逻辑的变量名。源代码供其他人阅读,而不是使计算机及其微观性能得到满足。
Michael JV

我正在使用PHP ..
Avinash

2
...而您拥有xpertdeveloper.com?
Jim G.

3
嗨,阿维纳什(Avinash),您可以在问题中解释认为可能是这种情况的理由吗?

Answers:


17

有谁能提供在性能方面不选择长变量名的原因?

迈克尔回答了这个问题(即,否),但是变量名确实会影响程序员的性能。如果您聘请了新的开发人员或不熟悉代码的人,那么变量名长和/或令人困惑可能会分散注意力并延缓理解过程。

通常,您希望使用简短的描述性变量名,因为它们更易于阅读。想象一下,如果您不得不忽略代码十年,然后又重新理解了一切。您是要阅读“ getInput”还是“ getInputFromUserWhoInputsStringOrElseInformReaderOfError”?(当然是夸大了:P)

但是有时候,使用稍长的名称可能会有所帮助。例如,getBirthdayInput()比getInput()具有更多的描述性。您想要简化到一定程度,但是过度简化也可能会带来问题。


6
对于读取长名称来说更好,如果找到“ getInputFromUserWhoInputsStringOrElseInformReaderOfError”,则无需阅读文档,此功能是什么,如果找到“ getInput”,则不需要。10年后,文档将是错误,不完整或丢失的。getInputFromUserWhoInputsStringOrElseInformReaderOfError当然是很长的,但是了解它的长短会更好(而且我也不关心女人说的长短无关紧要)。
Dainius

在这种情况下,我不同意。我认为仅通过阅读代码,就很容易理解getInput()的功能,特别是如果它显示“无效输入”或之后立即显示某些内容的话。当然,有时候长名称会更好-我会编辑它!
BlackJack

ofc取决于上下文,但是以我的经验,名称越长越好(但只要getInputFromUserWhoInputsStringOrElseInformReaderOfError不宜)。作为file.read()真正重要的上下文比file.readAllFileAsByteArray()更快。但是正如我所说,通常恕我直言,较长的名称会提供更多信息。
Dainius

1
如果文档错误,不完整或丢失,则代码库注定要失败。
Christopher Mahan

2
这是在回答未曾提出的问题。

16

不,不会。一般来说,在编译代码时,变量名将被它们所引用的内存地址替换。计算机对变量名一无所知。他们只想知道值存储在哪里。

变量是符号,仅此而已。他们用名称替换了十六进制值,以便程序员可以更轻松地了解自己在做什么。因此,选择较短的变量名称将不会提高性能。

就是说,您可能会在编译时间和JIT首次解释方面获得微小的改进(我在说微观的),但这只是因为解析器读取变量名所需的CPU周期更少。这是一次性的成本,并且在担心性能时在统计上微不足道。


11
尽管您的答案对应用程序编程是正确的,但是OP所指的是网站,因此他有机会使用一种解释语言。在这种情况下,需要从文件中读取代码,然后进行解释。在这种情况下,较长的变量名将花费较长的时间来加载和解析。但是,性能提升将是微不足道的,并且会被程序员阅读和理解代码的额外麻烦所抵消。
加文·科茨

1
@Gavin对于解释语言也是正确的-“ JIT优先解释”。现在,大多数解释语言在执行时都会编译,而不是逐行执行AFAIK。
Michael K

1
Michael-为了进行编译,必须首先将文件读入内存。此过程将花费更长的时间,具体取决于文件的长度。较长的变量名=较长的文件。
加文·科茨

该问题被标记为PHP。PHP还没有JIT-这将是计划于今年下半年发布的8.0版本的新功能。它在执行之前确实会编译为字节码,并且该字节码通常会缓存在Web服务器上以在多个请求中使用。
bdsl

8

除非您使用操作码缓存(也称为“ PHP加速器”),否则确实会有影响。但是这种影响是如此之低,以至于可以忽略不计。如果确实使用操作码缓存,那么影响将为零。


1
如果您非常在乎性能,那么您会考虑缩短变量名以获取一些周期,那么不使用操作码缓存将构成犯罪……并且建议您改用C之类的编译语言。
SF。

但是显然影响是累积的,因此应用程序越大,影响越大,对吗?
n00dles

Zend Opcache已经随PHP一起交付了几年,因此每个人都应该使用它。我认为通常默认情况下启用。
bdsl

3

尽管Michael对于应用程序编程是正确的,但您的问题是使用PHP(一种解释型语言)进行的Web开发。在这种情况下,需要从文件中读取代码,然后进行解释。在这种情况下,较长的变量名将花费较长的时间来加载和解析。

但是,这样做对性能的影响不大,对于整个脚本而言,可能在几分之一毫秒的范围内。您始终可以使用示例脚本进行尝试,并使用一种计时方法,例如http://www.developerfusion.com/code/2058/determine-execution-time-in-php/中详细介绍的方法,但这可能不会开始计时,直到读完文件为止。此外,重试之间的执行时间将比变量名长度之间的差异大得多,因此您将需要执行大量的重试并取平均,然后才能获得一个有意义的平均值。

正如BlackJack所指出的那样,较长的名称可能更难于理解,并且花很多力气才能键入(而且更容易出现错字)。尽管可能会获得很小的性能提升,但这并不能证明为程序员带来的额外麻烦。因此,首选简短,简洁且易于理解的变量名。

简而言之,不必担心变量长度名称,而可以专注于编写干净,有意义的代码。


1

也许

服务器代码通常是经过编译的,并且出于上述原因,变量名的长度不会影响它。但是,如果使用变量名来构建标记,则会进行各种字符串操作。由于HTTP响应(包含标记/返回的json /返回的数据)较大,因此花费的时间会稍长一些,尽管差异可以忽略不计。如果未缩小JavaScript,它将是一个更大的文件,需要更长的时间才能到达客户端。

除了缩小JavaScript文件之外,对Web应用程序/网站的任何优化工作都将更好地用于其他方面。


1

是的,它可以,但不是您正在考虑的意义。

如果变量名不正确,开发人员将很容易在源代码中感到困惑。这将很难阅读和理解。

最后,源代码将很难维护,并且几乎不可能使其发展。这将不可避免地导致更高的维护成本,更高的开发成本,更多的错误以及更差的性能

变量名在运行时绝对没有影响,而在编译时完全可以忽略。但是,坏名字不可避免地会导致性能下降,因为没有人理解代码,并且代码最终陷入一堆又一堆的骇客之中,从而使情况每况愈下。

阅读以下内容以了解良好的变量名:http : //tottinge.blogsome.com/含义fulnames

请注意,如果您觉得需要很长的变量名,则意味着您的代码架构不良。变量名称始终在上下文中表示:名称空间,类名称,文件名,文件夹,函数名称等。因此,如果名称需要很长才能明确,则表示您要命名​​的名称是DOESN'贝隆。在这种情况下,请考虑将代码放在适当的位置,或者在尚不存在的位置创建该位置。


0

对于php,答案显然是肯定的。

表示不会有所作为的答案不一定正确。例如,我有一个小的php脚本,只有几行,但是在完成工作之前它必须循环约1,950,000次,因此,尽管可能不会注意到脚本的一次运行,但这些零点几秒的时间实际上相加循环很多次。


1
但是你错了。任何体面的php解释器都只会解析一次代码。编写php解释器的家伙并不傻。
gnasher729

@ gnasher729您正在假设解释器或整个服务器的工作方式,您绝对不要这样做。即使每次运行只解析一次,它也可能在每次运行时重新解析,并且不缓存解析的表示(其他系统会这样做,但您无法提前知道)。通常情况下,脚本越多的字节就越需要解析。因此,Diorthotis通常并没有错,他/她可能只针对特定系统是错的。
Mecki

0

您可以使用短名称来减少代码的可读性。您将节省一两秒。但是,由于代码的可读性较差,因此很难改进代码并使之更快。因此,带有短名称的无法维护,无法改进的代码最终将以明显较慢的速度运行。

因此,回答您的问题(“是否会影响性能”):是的,但不是您喜欢的方式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.