从闭包编译器重构代码

时间:2012-10-07 20:49:38

标签: javascript canvas compiler-construction google-closure-compiler

我有两个不同版本的javascript文件:一个工作正常,另一个执行速度较慢。我在两个文件上都尝试过Closure Compiler,但是......因为我是个白痴,几个月后我很高兴地注意到原版的原始文件丢失了。不仅来自我的硬盘,甚至来自我的记忆(我不记得我做了哪些改变)。

所以现在我有:

    • 工作文件的压缩代码
    • 错误工作文件的压缩代码
    • 错误工作文件的未压缩代码
  1. 我需要重建运行良好的源文件,很高兴,两个压缩版本之间确实存在一些差异。

    这是我需要你帮助的地方。

    我在 well 工作压缩代码

    中找到了这个
    (function () {
    // same stuff here      
    })();
    
    requestAnimFrame(O);
    

    错误工作压缩代码

    中就是这样的
    B.onload = function () {
    // same stuff here
    };
    requestAnimFrame(O)
    

    那么,Closure Compiler如何声明一个没有名字的函数呢?那些函数声明末尾的();是什么?这是如何在未压缩的代码中实现的?如果它可能有帮助,这就是未压缩的坏版本(我希望修复)的样子:

    function init() {
    // same stuff here
    }
    
    B.onload = function(){
    start()
    }
    
    function start() {
    init()
    requestAnimFrame(0);
    }
    

    如果您想自己测试差异,here's the result when using the good codehere's the result when using the bad code

    尝试点击徽标:多维数据集在第一个链接中滑动得更快,如果你有一个好的cpu,它不应该在运行视觉效果时被杀死。相反,第二个链接似乎会使cpu过载并在动画中进行不同的显示(我已经可以解决第二个问题,发现了代码中的差异,并记住了我改变的内容)。

2 个答案:

答案 0 :(得分:3)

  

“那么,Closure Compiler如何声明一个没有名字的函数?”

因为JavaScript支持匿名函数。在分配事件处理程序时,您可能经常使用它们。

  

“在函数声明的末尾那些();是什么?”

他们在任何功能之后做同样的事情。他们调用它。虽然它不是一个功能“宣言”。因为函数包含在括号中,所以它是一个匿名函数表达式

  

“这是如何在未压缩的代码中实现的?”

这取决于未压缩的代码。人们经常在他们的普通代码中使用这种模式。它创建了一个局部变量作用域,代码可以在其中执行。

答案 1 :(得分:0)

看起来差别在于,在做“相同的东西”之前,坏的人正在等待B加载,而好的人在做同样的事情之前就会加载。