JavaScript命名约定


12

我来自Java,对JavaScript还是陌生的。我注意到许多使用单个字符参数名称的JavaScript方法,例如以下示例。

doSomething(a,b,c)

我不喜欢它,但是一位JavaScript开发人员说服我这样做是为了减小文件大小,并指出必须将JavaScript文件传输到浏览器。

然后我发现自己正在与另一位开发人员交谈。他向我展示了Firefox将截断变量名以更快地加载页面的方式。这是Web浏览器的标准做法吗?

使用JavaScript编程时应遵循的最佳实践命名转换是什么?标识符长度重要吗?如果有,程度如何?


13
我非常怀疑浏览器会更改变量名称。存在时eval,它是不安全的(是的,eval太可怕了,但这是标准的一部分,您不会为了优化而放弃标准的合规性),并且丝毫没有减少流量的可能性-您仍然发送完整的文件。

4
我经常看到开发人员在争论短变量名的优点。不要听他们的话。这几乎始终是“我太不愿意发明一个好名字”或“我懒得键入那么多字符”的借口。
布朗

@DocBrown:即使我不喜欢它。由于我不是JavaScript方面的专家,所以希望了解最佳实践。
ManuPK 2012年

最终,为了使用有意义的方法名称,正在讨论的可能是价值50-100KB的附加数据?如果100KB导致速度问题,那么它就不值得尝试解决,因为没有足够大的用户群会遇到该问题。
Ramhound 2012年

Answers:


26

您会发现开发人员本身并未使用简短的变量名。在开发过程中,它们正在使用有意义且详细的变量名。

然后,在构建/发布过程中,他们编写的代码通过压缩程序/ 混淆器运行,目的是使文件大小最小,这是加速网站的最佳实践。如果您非常关心性能那么这是一个可选步骤。大多数小型网站都不这样做。

作为开发人员,不应该关心缩小/混淆过程;编写代码,使代码可读,有意义,文档完善且结构合理。然后,如果您非常在意性能(可选,请不要忘记!),请在发布过程中引入压缩器/混淆器,以最小化代码(删除空格,换行,注释等)并对代码进行混淆(例如,缩短变量)名称)。在这里可以找到一篇很好的文章,说明混淆与缩小。

此外,Desktop FireFox 不会截断变量名称period。变量名的截断可以加快页面下载速度。到FireFox拿到文件时,它已经被下载了,因此不需要这样做。您的朋友可能正在运行执行此操作的插件;在这种情况下,请告诉他卸载它,因为它没有用。

为了完成此操作,某些(移动)浏览器可以选择使用中间人服务器,这些服务器会拦截您请求的资源的响应,并为您压缩它们(可能包括压缩JavaScript文件)。请注意,压缩是在服务器上完成(即,下载页面之前),因此潜在的好处是下载较小的文件,而不是一旦下载完文件后再在浏览器中下载(如问题中所建议的)。此类移动浏览器包括Opera Mini和较新版本的Google Chrome(至少在iOS上;不确定Android)。有关更多信息,请参见此处


11

不,并非所有浏览器都会自动缩短JavaScript来提高性能。

但是,就JavaScript而言,您不应为了提高处理速度或安全性而牺牲代码的可读性/可维护性,因为存在为此目的而设计的称为混淆器的工具和称为闪闪器(或压缩器)的其他工具。

记住,不要预先优化。如果您的页面加载速度足够快,并且您的JavaScript中没有任何过于敏感的内容,请不必担心。用有意义的名称命名变量。代码的可读性对于可维护性至关重要,因此很少(如果有的话)被牺牲。

如果您想参考一些良好的JavaScript编码约定,则建议使用these



1

我在JavaScript中工作了很长时间。

我们有一个命名标准,您必须对所有变量使用匈牙利表示法

看来工作正常。我知道有些情况下不能使用它,但是它对我们来说效果很好。特别是当您有大量的JavaScript文件需要查找内容时。

我会提防过早优化。您很有可能最终会得到杂乱的代码,而这些杂乱的代码实际上根本无法运行得更快。


5
匈牙利符号?那是老学校。匈牙利表示法是一种古老的开发惯例,因此在以后不建议使用。
Smokefoot'3

2
我倾向于稍微使用它,但是仅对于jquery包装的值,我将以$开头。匈牙利表示法存在的问题是,人们过去常常以“ int”和“ String”的形式告诉您键入内容,而不是以程序的语义来表示
Zachary K

“特别是当您有大量的JavaScript文件需要查找内容时。” -我听到你了。但是匈牙利表示法只是一个贴膏药...从长远来看无济于事,当您需要更改某些内容的类型而又没有时间更改所有变量前缀时,它只会使您感到困惑。将GWT纳入其自己的IMO的过程自动化。
funkybro 2012年

1
我不一定会使用这种符号来“破坏”该语言的松散类型。当然,更改类型时必须更改名称,但这还是一件好事,这样您就可以跟踪自己在做什么。我知道它的某些方面很难看。但是,如果您曾经以松散类型的语言从事过大型(我正在谈论成千上万的代码行)项目,那么它可以帮助您在某些情况下更快地找到路。说过时了,等等确实不能解决OP试图解决的核心问题。
艾伦·德利蒙

1
匈牙利表示法是人们在不真正了解其原因的情况下立即将其忽略的事情之一。发现它与goto人们无意识地重复“不要使用goto ...不要使用goto ...”的口头禅一样。现实情况是,这只是您工具包中的一个工具。像任何工具一样,它在某些情况下很有用,而在某些情况下却没有那么有用(甚至有害)。就像有人在尝试用锤子锯一块木头时遇到了糟糕的经历,然后宣称“永远不要使用锤子,锯会更好!” 。笼统的概括总是错误的
MattDavey 2012年

1

标识符长度无关紧要。正如其他人所说,在生产中可以使用缩小来减少脚本下载时间。实际上,应该遵循可接受的编码/命名约定,特别是因为JavaScript是一种古怪的语言,并且很长一段时间以来,JavaScript一直只是被视为完成工作的一件事情。如果您正在寻找命名约定的地方,那么“ Google JavaScript样式指南”是个不错的地方。它表明,

  • functionNamesLikeThis,例如,getCashbackData(){}
  • variableNamesLikeThis,例如var alertInterval = 10;
  • ClassNamesLikeThis,例如,var CustomerOrder = {getOrderLines:function(){}}
  • EnumNamesLikeThis,例如var ColorOfChoice = {白色:“ #FFFFFF”}
  • methodNamesLikeThis,例如,var CustomerOrder = {getOrderLine:function(){}}
  • SYMBOLIC_CONSTANTS_LIKE_THIS,例如var EPOCH_UNIX =“ 01011970”

您还有什么要添加的,然后是一堆链接?我的意思是您甚至都不解释谁是道格拉斯·克罗克福德。
Ramhound 2012年

0

我对“干净的代码开发人员”的理念感到恼火(并且现在您已经从上面的帖子中知道,由于减小了变量名的大小,因此对性能的影响为零),我只能建议:

  1. 为您的个人发展需求找到最佳的IDE,这些IDE具有自动完成和智能感知功能,例如aptana,netbeans,eclipse(全部免费)或众多商业产品中的任何一种(如果我有免费游戏,我会调查JetBrains的产品)
  2. 以使任何注释都多余的方式编写代码。这意味着,而不是写作

    getXy(e) { return [e.pageX, e.pageY ] }

    这实际上可能意味着任何事情(尤其是在像js这样疯狂的宽松类型的语言中),您使代码可以表达自己

    getPageCoordinatesFromEvent(event) { 
        return [event.pageX, event.pageY ];
    }

    在一个好的IDE中,您通常不会键入任何会持续很长时间的变量名-键入几个字母仅几秒钟,然后从自动补全中按Enter键。如果您坚持自己键入每个字符,那么无论如何,一个优秀的IDE都会注意到您的错字。这只是一个非常肤浅的例子,因此我强烈建议您(不是作为批评的形式,而是作为诚实的建议)

  3. 拿到Robert C.Martin的“ Clean Code”和Hunt / Thomas的“ Pragmatic Programmer”一书,再也不要问自己这种问题了-您在连续集成服务器上工作太忙了,无法自动化无聊的测试-,并构建开发过程的各个部分(包括最小化),并专注于有趣的部分,编写清晰易懂的代码,这些代码可以做很多事情!

PS:如果您需要赶上开发最新的javascript代码的速度,请紧随其后或与之一起浏览John“ jQuery先生” Resig关于“ Pro Javascript Techniques”的书。

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.