JavaScript代码中一个例子,哪些语义会因为代码压缩而改变?

7
我收到一份报告,不幸的是没有源代码可用。 该报告称,在某些移动数据网络使用设备上无法运行web应用程序,因为网络运营商正在运行非透明代理,该代理正在压缩图像和缩小JavaScript,并且最小化操作实际上正在破坏代码。
我很好奇是否有人有一个例子(即代码片段加上一种最小化技术),粗心的JS代码结合激进的最小化可以实际上改变代码的含义? 我怀疑这样的组合是可能的,但想不出或找不到任何例子。 有人有很好的例子或相反的证明吗?

你没有源代码,但你有一个发生这种情况的运算符示例吗? - Nzall
1
希望你已经看到了这个问题;也许像这样的一些糟糕的代码在未压缩时可以通过,但实际错误会在压缩后显露出来。http://stackoverflow.com/questions/16484566/javascript-error-when-minified - sabithpocker
有传言称这是英国O2的问题 - 我个人没有亲身经历过这个特定的问题,但我从个人经验得知,O2在其移动数据网络上使用了大量图像压缩。 - Dylan Beattie
请注意,在移动网络上,压缩的JavaScript和图像实际上是一件好事。90%的用户在移动连接上有限带宽,这意味着他们可以节省的几KB随着时间的推移会累积起来。 - Nzall
哦,同意 - 最小化很好,尤其是在移动网络上。无法通过最小化的JavaScript可能本来就是糟糕的JavaScript :) - Dylan Beattie
1个回答

6
请看下面的代码: ```html

考虑以下代码:

```
function DoStuff(thingA, ThingB){
    var thingC = thingA + ThingB;
    return thingC;
}

var stuffingC = eval("DoStuff(stuffingA, stuffingB)");

压缩器有时会缩短变量或函数名称:

function DS(A, B){return A+B;}

var C= eval("DoStuff(stuffingA, stuffingB)");

在这种情况下,您的代码会出现问题,因为eval的字符串没有更改以考虑函数名称的更改。
这只是一个基本示例,但通常会发生这种情况:您对字符串变量进行某种反射或评估,该变量引用了一个经过缩小的代码片段,具有预缩小名称,但未考虑到这种缩小的特性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接