JavaScript压缩库使用什么技术来最小化文件大小?

JavaScript压缩库使用什么技术来最小化文件大小?,javascript,optimization,theory,Javascript,Optimization,Theory,请注意,这个问题更多的是关于这个主题的理论方面,但是除了去除空白,还有什么其他技术可以使用呢 我可以在Google Web Toolkit编译器中找到一些: 方法调用的内联 死码消除 变量重命名/源混淆 这意味着将长变量重写为短变量等等 几乎所有这些都需要Javascript解析(即它们的工作超出了纯粹的词法分析) 标记局部变量,然后将其重命名为最小大小的变量 删除大量空白 删除不必要的大括号(例如,if语句后的单行执行可以删除大括号并添加一个分号) 删除不必要的分号(例如,在结束大括

请注意,这个问题更多的是关于这个主题的理论方面,但是除了去除空白,还有什么其他技术可以使用呢

我可以在Google Web Toolkit编译器中找到一些:

  • 方法调用的内联
  • 死码消除
  • 变量重命名/源混淆
    • 这意味着将长变量重写为短变量等等

几乎所有这些都需要Javascript解析(即它们的工作超出了纯粹的词法分析)

  • 标记局部变量,然后将其重命名为最小大小的变量
  • 删除大量空白
  • 删除不必要的大括号(例如,if语句后的单行执行可以删除大括号并添加一个分号)
  • 删除不必要的分号(例如,在结束大括号“}”之前)

我最常用的迷你们是,而且,它是开源的,所以你可以自己看看它们到底做什么。(我不确定他们所说的“微优化”是什么意思,可能是一堆罕见的案例,可以让你获得一两个角色。)

大多数压缩器使用不同技术的组合:

  • 剥离空白
  • 用压缩算法压缩文件(gzip,deflate)
  • 将所有内部变量和函数重命名为较短的名称可以节省大部分空间,例如:
此功能:

function func (variable) {
  var temp = 2 * variable;
  return temp;
}
将成为:

function func (a) {
  var b = 2 * a;
  return b;
}
  • 迪安·爱德华兹使用了一些内部压缩。当脚本加载到页面上时,将对其进行解压缩
  • 使程序代码更短的所有常用内容:
    • 删除未使用的代码
    • 函数内联

对重命名和重新排序进行编码,以便gzip压缩器获得更好的结果

例如(不那么聪明)

原始代码:

function mul(mul1, mul2)
{
 return mul1 * mul2;
}

function print(str)
{
  // do something 
}

function add(add1, add2)
{
 return add1 + add2;
}
修改代码:

function mul(a,b)
{
 return a * b;
}

function add(a, b)
{
 return a + b;
}

function print(str)
{
  // do something 
}

那个死代码部分让我害怕,当JS具有全局作用域时,GWT怎么知道代码死了?或者说GWT是为一次编译所有JS而设计的,如果只在多个JS文件中的一个文件上执行它,它就不起作用了?GWT是一个整体编译器,因此,通过对java中的操作添加一些限制,它可以准确地确定是否调用了一个方法(类似于使用eclipse ide所做的操作).我投票反对这个答案,因为你没有真正回答这个问题,即使用了什么技术。对不起,罗布,我没有阅读整个问题。新的答案,希望我这次做得更好:)这只是一个示例,当然,您可以只执行不会影响结果的操作。将变成:函数f(a){return 2*a;};)从72个字符减少到27个字符如果您想在全局javascript作用域上使用func,我会保持名称不变…;-)