Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 处理包含许多脚本文件的页面_Javascript_Performance - Fatal编程技术网

Javascript 处理包含许多脚本文件的页面

Javascript 处理包含许多脚本文件的页面,javascript,performance,Javascript,Performance,我们的项目包含许多页面,最多有20个选项卡,每个选项卡使用不同的脚本。所有脚本文件都在中引用,并在第一页加载。现在我们有了性能问题,因为打开页面时页面上的脚本太多(每个选项卡上大约有2k行JavaScript)。问题是,在很多情况下,用户需要使用2-3个选项卡,因此超过60%的代码没有被使用。因此,我们需要任何脚本延迟加载解决方案来简化页面。由于每个选项卡的HTML都是按需加载的,因此我们可以在每个选项卡中放置引用,这将提供一个良好的工作解决方案。但我敢肯定,在中包含不包含的引用是一种糟糕的风格

我们的项目包含许多页面,最多有20个选项卡,每个选项卡使用不同的脚本。所有脚本文件都在
中引用,并在第一页加载。现在我们有了性能问题,因为打开页面时页面上的脚本太多(每个选项卡上大约有2k行JavaScript)。问题是,在很多情况下,用户需要使用2-3个选项卡,因此超过60%的代码没有被使用。因此,我们需要任何脚本延迟加载解决方案来简化页面。由于每个选项卡的HTML都是按需加载的,因此我们可以在每个选项卡中放置
引用,这将提供一个良好的工作解决方案。但我敢肯定,在
中包含不包含的引用是一种糟糕的风格。
所以我想知道,还有别的解决办法吗?像我们这样的大项目是如何解决这些问题的?任何建议都会有帮助。

提前谢谢

jQuery对于这个解决方案有很好的功能:

$.getScript("my_lovely_script.js", function(){


   alert("Script loaded and executed.");
   // here you can use anything you defined in the loaded script

});
默认情况下,这是不缓存的。我在jQuery网站上寻找了一个解决方案,该解决方案声明用于缓存脚本include

jQuery.cachedScript = function(url, options) {

  // allow user to set any option except for dataType, cache, and url
  options = $.extend(options || {}, {
    dataType: "script",   //Note this
    cache: true,          //Enable caching
    url: url
  });

  // Use $.ajax() since it is more flexible than $.getScript
  // Return the jqXHR object so we can chain callbacks
  return jQuery.ajax(options);
};

// Usage
$.cachedScript("URL HERE").done(function(script, textStatus) {
  console.log( textStatus );
});

jQuery对于这种解决方案有很好的功能:

$.getScript("my_lovely_script.js", function(){


   alert("Script loaded and executed.");
   // here you can use anything you defined in the loaded script

});
默认情况下,这是不缓存的。我在jQuery网站上寻找了一个解决方案,该解决方案声明用于缓存脚本include

jQuery.cachedScript = function(url, options) {

  // allow user to set any option except for dataType, cache, and url
  options = $.extend(options || {}, {
    dataType: "script",   //Note this
    cache: true,          //Enable caching
    url: url
  });

  // Use $.ajax() since it is more flexible than $.getScript
  // Return the jqXHR object so we can chain callbacks
  return jQuery.ajax(options);
};

// Usage
$.cachedScript("URL HERE").done(function(script, textStatus) {
  console.log( textStatus );
});

是的,如果您没有在
标记中引用脚本,那么您将丢失缓存(我想!),这通常会影响性能。不过,这里主要关心的是,每个选项卡是否真的需要一个单独的javascript文件?它们各自有不同的功能吗?你有没有试过在你的javascript文件上运行一个最小化程序,看看你能得到多小的文件?更正:不需要在头部缓存,只需要在
标记中使用
src
属性。如果您可以在正文中引用,那么do itlogic对于选项卡来说确实是不同的,并且无法合并到单个文件中,因为脚本用于不同的区域。最小化帮助但不太好是的,如果在
标记中没有引用脚本,那么就会丢失缓存(我想!),这通常会影响性能。不过,这里主要关心的是,每个选项卡是否真的需要一个单独的javascript文件?它们各自有不同的功能吗?你有没有试过在你的javascript文件上运行一个最小化程序,看看你能得到多小的文件?更正:不需要在头部缓存,只需要在
标记中使用
src
属性。如果您可以在正文中引用,那么do itlogic对于选项卡来说确实是不同的,并且无法合并到单个文件中,因为脚本用于不同的区域。最小化帮助,但不会太多在浏览器中缓存如何?加载了
getScript
的脚本是否缓存?@DotNETNinja我编辑了我的答案,这就是你要搜索的吗?如果您需要了解更多信息,请查看,如果您无法理解,请发表评论。很好的代码片段,谢谢!我将等待任何其他解决方案,并接受您的解决方案,如果您不愿意,那么在浏览器中缓存如何?加载了
getScript
的脚本是否缓存?@DotNETNinja我编辑了我的答案,这就是你要搜索的吗?如果您需要了解更多信息,请查看,如果您无法理解,请发表评论。很好的代码片段,谢谢!我将等待一点,等待任何其他解决方案,并接受你的,如果不愿意