1

我试过同时使用Google ClosureYahoo's YUI,但重复的长行并没有被缩小。为了解决这个问题,我添加了:

var M = 
{
    m1:  function( html_id, method_call )
    {
        return ( document.getElementById( html_id ).onclick = method_call );
    }
};

所以而不是写

document.getElementById(test).onclik = test;

我可以写

M.m1(test,test);

然而,这使得代码难以阅读。有没有我想念的选项可以为我做这件事。Google 或 Yahoo 肯定知道如何自动执行此操作吗?

4

4 回答 4

1

也许闭包和 YUI 在处理时不够“最佳”。您可以查看js1k 竞赛条目以获得一些灵感。

这篇文章概述了您可以手动执行的一些操作。

这是一个压缩器工具的示例,它在最小化方面可能做得更好(例如闭包或 YUI)。

于 2012-05-12T18:12:18.027 回答
0

问题不在于没有缩小长行,而在于“文档”是一个主机对象,其属性名称由 JS 环境固定。缩小器通过用较短的名称重命名变量来工作,但它不能重命名“文档”或其他主机对象的属性。

如果您的大部分代码被这些重复的行占用,您应该将功能包装在一个您在所有这些地方调用的函数中,而不是每次都直接使用“文档”。您的代码的一些示例将有助于更具体地了解如何执行此操作。

于 2012-05-12T17:34:24.070 回答
0
  1. 列出您在 JS 中执行的重复操作

  2. 定义所有这些函数,在脚本的开头给它们一个自定义名称,并在任何你想要的地方使用这些函数(看看这里

  3. 在此处压缩/缩小您的 JavaScript

希望这可以帮助。

于 2012-05-12T17:37:19.533 回答
0

它不可读,因为您创建了不可读的变量名,为什么不创建相关的变量名然后编译它。

document.getElementById不能重命名,但您可以创建一个返回的函数,该函数document.getElementById可以重命名。

var getElementById = function(id){
  return document.getElementById(id);
}
var getElementByIdClick = function(id, method_call){
    return getElementById(id).onclick = method_call;
}

这可以编译为

function f(h) {
  return document.getElementById(h);
}
function g(h, k) {
  return f(h).onclick = k;
}

或者

function f(h){return document.getElementById(h)}function g(h,k){return f(h).onclick=k}

闭包编译器的诀窍是尽可能多地使用变量,这通常不是一个好主意,但闭包非常好,它会决定什么是最好的。

因此,除了将重复出现的代码移动到函数中之外,您还可以将每个“点符号”交换为“方括号符号”,并为每个属性和方法名称使用一个变量。

这是一个极端的例子。

var _document=document,getElementById='getElementById', id='test',onclick='onclick',method_call=function(){};
_document[getElementById](id)[onclick] = method_call;

闭包编译器将决定是否使用括号,如果使用它将重命名您的变量。

你可能会得到这个;

var a=document,b='getElementById',c='test',d='onclick',e=function(){};
a[b](c)[d]=e;

或者它可能会用点符号替换它并删除所有变量,但至少你已经给了它选项。

document.getElementById('test').onclick=function(){} //method_call

document.getElementById('test')永远不能编译成这个a[b](c)

闭包编译ADVANCED_OPTIMIZATIONS选项将重命名函数,但它确实考虑了函数的使用次数。它可能会完全删除该功能而只使用它。document.getElementById

于 2016-03-15T11:15:14.333 回答