是否可以将库JavaScript预编译为纯JavaScript?

时间:2014-03-28 11:40:31

标签: javascript jquery performance compiler-construction

我使用JQuery在JavaScript中编码。它简单,编码更少,更易读。 当我们将JQuery与纯JavaScript进行比较时,JQuery比纯JS慢约80%。

因此,JQuery(或其他JS库)对于开发人员来说是一件非常好的事情,但最终对用户来说是一件坏事:加载速度慢,运行速度慢。

JavaScript正在客户端运行。

所以,在我看来,如果我想用框架轻松编码,那就是我的事。

开发人员的问题和客户不必看到差异。

我想知道是否可以在JQuery中编码,并在纯JavaScript上编译它(本地)。

我的意思是像lesscss。


使用Jquery进行DOM访问

这个JQuery代码写得更快但比纯JS慢80%:performance report

例如,JQuery代码:

   $('#mydiv').css('backgroundColor', 'red');
   $('#mydiv').hide();
   $('#mydiv').html('hello');

   $('#content .col').each(function () {
       $(this).html('ok')
   });

将编译为纯JS:

 document.getElementById('mydiv').style.backgroundColor = 'red';
 document.getElementById('mydiv').style.display = 'none';
 document.getElementById('mydiv').innerHTML = 'hello';

 var query = document.querySelectorAll('#content .col');
 for (var i = 0; i < query.length; i++) {
      query[i].innerHTML = 'ok';
 }

prototype.js类声明

这个prototype.jsdéclaration写得更快但比纯JS慢98%:performance report

例如prototype.js代码:

var Animal = Class.create({
  initialize: function(name, sound) {
    this.name  = name;
    this.sound = sound;
  },

  speak: function() {
    alert(this.name + " says: " + this.sound + "!");
  }
});
var cat = new Animal('Kitty', 'Meow');
cat.speak();

将编译为纯JS:

function Animal(name, sound) {
  this.name = name;
  this.sound = sound;
}

Animal.prototype.speak = function() {
  result = (this.name + " says: " + this.sound + "!");
}

var cat = new Animal('Kitty', 'Meow');
cat.speak();

最后,问题是要有快速编码的好工具,而不会对用户造成影响。

1 个答案:

答案 0 :(得分:1)

我对此没有任何个人经验,但Google Closure Compiler可能是您最好的选择。

https://developers.google.com/closure/compiler/?csw=1

“它解析你的JavaScript,分析它,删除死代码并重写并最小化剩下的内容。”

这应该会使你的代码更有效率,虽然我不确定它在专门优化jQuery方面有多么有效。您不太可能真正获得完全“本机”JavaScript。