为什么Bing要混淆他们的JavaScript?

11

我像往常一样浏览网页,想查看Bing的源代码,因为我很好奇想知道他们使用了什么来使他们的图片淡入。但是我被以下这行代码所震惊:

天啊!这太长了!

这让我想知道是否有任何优势来混淆您的(X)HTML、CSS和JavaScript像这样?也许可以减少文件大小吗?


编辑:翻看了一些资料后,我意识到这是一种普遍的做法。以前从未从缩小文件大小的角度考虑过这个问题!

11个回答

31

他们并没有混淆代码,而是进行缩小以减少每天数百万次请求所使用的带宽。

JavaScript和CSS的缩小目标始终是保留代码的操作特性,同时减少其总字节占用量(无论是原始术语还是在gzip压缩后,因为大多数从生产Web服务器提供的JavaScript和CSS都会作为HTTP协议的一部分被gzip压缩)。

您可能还有兴趣阅读Yahoo!用户界面博客文章,标题为"Minification v. Obfuscation"


8
如果这是被选中的答案,值得注意的是Peter [http://stackoverflow.com/users/131858/peter] 的回答[https://dev59.com/4XNA5IYBdhLWcg3wKaYx#1070535],他认为不应该试图以这种方式*编写代码*,而是应该作为某种自动化过程或将代码移入生产环境的一部分来进行。 - anonymous coward
这根本没有回答问题。虽然它是对“微软正在对他们的Bing JavaScript做什么?”这样的问题的好回答,但它对“你应该混淆你的JavaScript吗?”这个问题毫无帮助。 - Adam
1
@Adam:问题的标题并不太准确。我的回答解决的是作者实际上想要问的问题。作者想知道为什么微软会混淆他们的Javascript代码。我指出他们并非有意地混淆代码,而是为了加快速度进行压缩。我认为这足以回答他的问题。 - William Brendel
我已经更新了标题,以更准确地反映问题和这个被接受的答案。希望能有所帮助... - Shog9
很好,现在更有意义了 :-) - William Brendel
显示剩余2条评论

7

代码混淆的两个主要原因:

  • 减小文件总大小(如你提到的那样)如果你用'C'替换一个名为'CallThisFunctionAndReturnAnArray'的函数,则可以在文件中节省大量字符。

  • 保护知识产权——虽然这是否切实可行是有争议的,但这是常见的理由。您可以通过好的工具或者您本身聪明来避免这一点。


这是不容置疑的。混淆 JavaScript 是浪费时间。如果你的 JavaScript 很有趣,别人会反向工程。这并不难。 - Kenan Banks

4

文件大小肯定是一个优点,例如Gmail不仅可以压缩其内容,而且还可以执行此操作。


2

这样做确实有优势。但需要注意的是,没有必要一直以这种方式编写代码。相反,在完成某些操作(并且以易读的形式编写)后,使用压缩工具来删除不必要的空格等内容。对于较大的文件,这可以极大地减少加载时间。


仅是想到像这样编码就让我毛骨悚然! - Gab Royer

2
我会回答,“混淆”不是这些情况的目标,而是“带宽”。如果您正在以可缓存的速率提供内容,减少主页大小将有益,则确实有意义这样做。
至于混淆以避开窥探 - 不要这样做。

2

只有在大型模块上才能减小大小,而且仅仅是为了减小大小。使用gzip可以获得更大的收益。

如果您使用任何第三方代码,当您进行缩小时可能需要保留其版权/许可注释。人们经常忘记这样做。您可能还希望保留自己的版权注释。


1

是的,文件大小缩减。


1

是的。减小文件大小不仅可以减少下载时间,还可以减少解析时间,在某些浏览器上非常有用(特别是那个可恶的IE6)。

这可能需要重新标记为缩小。


1

我会区分减小文件大小的优化和意图防止(或至少使逆向工程难以进行)的混淆。例如,谷歌有一个“编译器”,可以扩展JavaScript以包括一些高级类型系统等;然后将这个扩展代码“编译”成常规的JavaScript。显然,以优化的方式创建此生成的代码是有意义的——没有必要使其可维护。


1
我敢打赌他们这样做的主要原因是为了减小文件大小。文件越小,页面加载速度就越快。
混淆并不是很重要。而且,它可能会让调试变得非常麻烦,这取决于你如何进行混淆。 搜索中速度至关重要。

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