本文只是提一些关于混淆与压缩的想法,可能会偶发抽风型更新。
混
混淆就是尽量让JS代码看不懂。
JS的变量名可以以字母或特殊符号开头,但不能以数字开头.
1a不是一个合法的变量名,但_1a就是
JS的变量名开头能用的特殊符号只有两个:$和_.前者被jquery等发扬光大,后者则由underscore占据.
混淆可以让格式良好的代码都看不懂,就是把变量名函数名通通变成_1,_2,_11,_a,_1a2c这种(easyui就是这么搞的).
相比a,b,c,我觉得_1,_2,_3这种名称更让人混淆,虽然后者更长.
easyui的混淆,做得还不算太绝。虽然他所有变量都是_+数字这样的,但重名的变量却不算多,梳理一下还是可以看懂的。
要做得更绝,可以人工使用大量同名变量————因为JS的不同作用域里,同名变量并不会冲突。
压缩加密
很多人认为两者是一样的,所以我就都放一起了。反正就是指:让代码量变得更少。
要想压缩得更小,还要靠一些特别的编码格式—-不过这些格式一般也是良好的编码格式,并不是为了压缩了故意这样做.
用一个var加,分隔声明多个连续变量.
如:
1
var a = 1,b = 2, c={},d='sss',e=[1,2,3];
因为压缩工具不会把多个var自动合并成一个.
压缩工具不会把true和false做处理。在不严谨的场景,你可以把true写成1,false写成0.或把true改为!0,false改为!1(有的压缩工具会自动改)
如果多处用到undefined或null,可用变量预先保存他们
压缩工具不会把变量本地化,但把变量本地化后再压缩可以缩减很大的字节量.所以推荐.
本地化(其实叫做私有化)即你有一个函数,里面多次调用了外部的a.b.c方法(或属性),那么你就应该把他存下来,
var c = a.b.c;
c...
极端压缩法
将命名空间调用链里的.式调用,改成[]式调用。如:页面中有好几处这样的调用:
a.replace(...)
bbb.replace(...)
c.replace(...).replace(...)
则可以改成:
var r = 'replace';
a[r](...)
bbb[r](...)
ccc[r](...)[r](...)
虽然多了一个变量,但压缩后会减少不少字节(而且让代码更看不懂了)