Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

代码混淆压缩与黑魔法

  今天微博上看到关于函数参数自识别相关的坑,故记录一下这个问题。确实ES里没有定义函数转成字符串具体应该返回什么,所以一些以函数定义字符串作为判断依据的程序可能会在某些情况下出问题,即使不是引擎的问题,可能也会因为混淆压缩后产生问题。
  微博上说的是函数参数自识别这个黑魔法,其实我之前也有用这个,见:“利用函数的形参列表选择回调参数”。但我当时确实没考虑到代码混淆压缩的问题,所以没特别在意。混淆压缩后,参数和局部变量名可能被替换成其它奇怪的东西,所以很容易踩到这个坑。函数转换成字符串的结果目前是没有具体定义的,见:“函数定义方式与其字符串”。这个坑很大,比如 RequireJS 的 require 也有通过解析函数体来取这个方法的黑魔法,所以我一直很讨厌这个,我自己封装的 AMD 就把这东西去掉了。
  不过这个黑魔法确实挺实用的,可以节省很多代码。也许不是这个用法本身的问题,而是那些混淆压缩工具开启变量名压缩是否太过分了?JavaScript是动态语言,变量名什么的可能都是临时计算出来的字符串(虽然这样渣性能),压缩变量名的话不仅会在这种地方出问题,还有很多很多坑是我没想到的。因为我自己也从不混淆压缩,是我的代码风格比较奇葩吧,别人经常说我写的代码就好像压缩过似的(这是说我写的东西不是人读的)= =||。
  如果函数可以提供一个获取形参列表变量名的方法,是不是就可以不用在去从函数定义字符串中分析呢?虽然即使这东西出现也解决不了混淆压缩的问题,但是至少可以让一些做法从黑魔法变成白魔法。不过着只是我现在突然冒出的想法,得再找人讨论讨论这东西是否真的该有。
  其实,要说黑魔法吧,混淆压缩才是最大的黑魔法,所以不要认为是其它做法不对,或许错的是混淆压缩本身。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^