Jop*_*eph 5 javascript minify google-closure-compiler
我正在查看由闭包生成的一个缩小的js文件.我发现无论我在哪里检查变量和字符串之间的相等性,
a == "13" || a == "40"
Run Code Online (Sandbox Code Playgroud)
闭合取代它
"13" == a || "40" == a
Run Code Online (Sandbox Code Playgroud)
为什么要进行此修改?这里有一些性能优势吗?
这样做是为了获得较小的gzip压缩优势.如果您有"x == 1"和"1 == x",编译器会在两种情况下将其切换为"1 == x",您可以获得更好的压缩常规代码.胜利是如此轻微,以至于我考虑删除代码并保存cpu周期,但它现在已经开启了.它与防止程序员错误无关,因为它永远不会将"x = 2"切换为"2 = x",因为这会改变程序的含义.
[更新:请参阅@ John的回答,为什么js minifier会这样做更有意义,应该是接受的答案]
作为一般概念,这是为了避免程序员错误.如果您手动修改代码并将变量放在第一位且常数为第二位,则可能会意外地键入:
a == '40' || a = '13'
Run Code Online (Sandbox Code Playgroud)
哎呀!我们刚刚成立a,以'13'代替比较.通过将常量放在左边,我们避免了这种可能性:
'40' == a || '13' = a
Run Code Online (Sandbox Code Playgroud)
将抛出异常,因为您不能在赋值操作的左侧放置常量字符串.
所以在某些思想流派中,最好的做法是在对常量进行相等比较时始终将常量放在左边.看起来像关闭遵循这种做法.
这些被称为"尤达条件".
请注意,我个人的偏好是在大多数情况下实际上只是将常量放在右边,因为代码往往读得更好,所以我认为权衡不够好.但我看到了尤达条件背后的逻辑.
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |