Javascript 如何防止编译器解析/评估JS代码?

Javascript 如何防止编译器解析/评估JS代码?,javascript,performance,module,Javascript,Performance,Module,我有一个包含很多JS代码的模块。模块的创建方式如下: (function (root, factory) { // root === window root.MyModuleName = factory(); })(this, function () { 'use strict'; var MyModuleName = function() { // A lot of code here that I don't want to be parsed or evaluate

我有一个包含很多JS代码的模块。模块的创建方式如下:

(function (root, factory) {
  // root === window
  root.MyModuleName = factory();
})(this, function () {
  'use strict';
  var MyModuleName = function() {
    // A lot of code here that I don't want to be parsed or evaluated
    // until MyModuleName constructor is executed.
    //
    // For example:
    // var a = { d: 123 };
    // var b = function() { return 45; };
    // this.someMethod = function() { b() + a.d };
    // ...
  };
  return MyModuleName;
});
所有方法和属性都在
MyModuleName
闭包中,并且(我认为)只有在执行
MyModuleName()
之后才应该解析它们

用户单击某个按钮后,我创建了一个MyModuleName的实例,并执行了一些方法:

someButton.onclick = function() {
  // I want compiler to parse and evaluate JS code only here
  var myModule = new MyModuleName();
  console.log(myModule.someMethod());
};
即使
MyModuleName
constructor只在单击后执行(),但在加载JS文件时会计算其中的代码(我可以在Chrome开发工具时间线中看到)


如何确保编译器只在单击后计算代码,而不是在加载JS文件后计算代码?

您不能。JS引擎必须先评估代码以创建函数,然后才能在任何地方分配函数。

Hm,我认为JIT编译器可能会有所帮助。谢谢你的回答。我想我需要通过ajax请求或“prefetch”链接标记手动预加载JS文件。必须对代码进行分析,以检查整个脚本中的语法错误,但在调用函数之前通常不会编译代码?不确定“评估”是什么意思。不评估代码需要解决的问题到底是什么?@Bergi,在手机上解析脚本需要花费大量时间,这会导致尝试滚动时出现延迟。脚本标记上的Defer属性没有多大帮助,它只是延迟了延迟。所以我试图在不完全执行/解析JS文件的情况下预加载它。非常感谢。