从闭包编译器重构代码

问题描述 投票:0回答:2

我有两个不同版本的 JavaScript 文件:一个运行良好,另一个运行较慢。我已经在这两个文件上尝试过 Closure Compiler,但是......因为我是个白痴,几个月后我很高兴地注意到好版本的原始源文件丢失了。不仅来自我的硬盘,甚至来自我的记忆(我不记得我做了哪些更改)。

所以现在我有:

    • well工作文件的压缩代码
    • bad工作文件的压缩代码
    • bad工作文件的未压缩代码

我需要重建工作良好的源文件,很高兴,两个压缩版本之间确实存在一些差异。

这就是我需要你的帮助。

我在well工作压缩代码中找到了这个

(function () {
// same stuff here      
})();

requestAnimFrame(O);

bad工作压缩代码中是这样的

B.onload = function () {
// same stuff here
};
requestAnimFrame(O)

那么,Closure Compiler 究竟如何声明一个没有名字的函数呢?函数声明末尾的那些

();
是什么?这是如何在未压缩的代码中实现的?如果它可能有帮助,这就是未压缩的错误版本的样子(我希望修复):

function init() {
// same stuff here
}

B.onload = function(){
start()
}

function start() {
init()
requestAnimFrame(0);
}

如果你想自己测试差异,这是使用好的代码时的结果 这是使用错误代码时的结果

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

javascript canvas google-closure-compiler
2个回答
3
投票

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

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

“函数声明末尾的那些

();
是什么?”

它们执行与 any 函数后相同的操作。他们援引它。尽管它不是函数“声明”。因为函数被括在括号中,所以它是一个匿名函数表达式

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

这取决于未压缩的代码。人们在正常代码中经常使用这种模式。它创建一个可以在其中执行代码的局部变量范围。


0
投票

看起来区别在于,坏的会等待 B 加载然后再执行“相同的操作”,而好的则立即执行。

© www.soinside.com 2019 - 2024. All rights reserved.