这段代码如何优化缩小?

Bob*_*ler 12 javascript minify

我在这里看到了一些具有这些变量声明的代码:

var equestAnimationFrame = 'equestAnimationFrame',
    requestAnimationFrame = 'r' + equestAnimationFrame,

    ancelAnimationFrame = 'ancelAnimationFrame',
    cancelAnimationFrame = 'c' + ancelAnimationFrame
Run Code Online (Sandbox Code Playgroud)

根据页面上的评论,这是为了改善缩小,但我无法弄清楚如何.有人能告诉我吗?谢谢.

Ben*_*aum 22

这不是为了适当改进缩小 - 有问题的代码是requestAnimationFramepolyfill.这意味着它将尝试不同的供应商前缀.因此,有时代码将是"requestAnimationFrame"(小写r),有时使用供应商前缀,例如msRequestAnimationFrame.

出于这个原因,它是动态构建的,"equestAnimationFrame"总是存在,但它可能以一个"r"或一个为前缀"R".

"改善缩小"部分是因为而不是写作:

var requestAnimationFrame = window.requestAnimationFrame || 
                            window.msRequestAnimationFrame ||
                            window.mozRequestAnimationFrame ||
                            window.webkitRequestAnimationFrame ||
                            window.oRequestAnimationFrame ||
Run Code Online (Sandbox Code Playgroud)

他们运行for循环["ms","moz","o", "webkit"]并尝试前缀.这最多可以节省几个字节.

这是我认为更清晰的代码并做同样的事情:

var base = "equestAnimationFrame" // the base string
var alternatives = window["r"+base] || // try the basic option first
['moz', 'ms', 'o', 'webkit'].map(function(x){ 
    return x+"R" + base; // all the options
}).filter(function(x){ // check if in window
    return x in window;
})[0];
Run Code Online (Sandbox Code Playgroud)

  • 老实说,我认为"未经宣传"的版本更具可读性. (10认同)
  • @ Ajedi32我完全同意.假设代码是gzip压缩的,即使它不是 - 我怀疑这会对文件大小产生重大影响.有时,明显的解决方案是更好的解决方案 (4认同)