【问题标题】:jQuery getScript vs Embedding Script in FilejQuery getScript vs 在文件中嵌入脚本
【发布时间】:2012-08-28 08:35:19
【问题描述】:

我想知道是否使用 jquery 的 getScript

我有一个需要包含在我的网站中的 jQuery 插件,但我不确定该怎么做,我想知道这些方法之间是否有区别:

就我而言,我必须包含一个相当大的脚本,但仅适用于 IE 浏览器。此刻我是这样做的:

if($.browser.msie){
 //minifed code
}

现在我想知道这是不是:

if($.browser.msie){
 $.getScript('link to minified script');
}

会有什么优点/缺点吗?或者如果它或多或少是一样的?

【问题讨论】:

  • 我会看看 YepNope.js 的类似内容
  • 这不是主要用于如果您想将第 3 方脚本滚动到可重新分发的插件中吗?
  • 选择第二个选项.. 阅读我在回答中的解释
  • @AshirvadSingh 似乎对什么更快有不同的看法,所以我会尝试两个版本,然后标记答案。
  • 一定要和我们分享你得到的东西.. :)

标签: javascript jquery html getscript


【解决方案1】:

更好用:

if($.browser.msie){
 //minifed code
}

因为.getScript() 永远不会缓存文件。

【讨论】:

  • 这是真的吗?当你调用getScript时,jQuery的来源似乎是在注入一个脚本标签,如果浏览器会缓存一个手写的脚本标签,为什么它不会缓存一个注入的?
  • 是的:http://api.jquery.com/jQuery.getScript/ 缓存是 false
  • 结果完全一样,但我更喜欢缓存文件。
  • 这可以被覆盖吗?如果该脚本很大,您不希望非 IE 用户加载它(如果它是内联的,他们会加载它)。
  • ye,正如 Jason Sperske 伤心:$.ajaxSetup({cache: true });
【解决方案2】:

获取外部脚本会有一些缺点。

一个 HTTP 请求

if($.browser.msie){
 //minifed code
}

两个 HTTP 请求

 if($.browser.msie){
 $.getScript('link to minified script');
}

您的浏览器通常只能同时处理 2 个 http 请求。所以从性能的角度来看,第一个会更快。

进一步说明

使用getScript,IE 用户的请求会更小,(-您的“缩小代码”的大小)。但是其他人每次都必须下载外部脚本(+ 外部脚本的大小 * 页面请求数)+ 由于额外的 HTTP 请求而导致响应延迟。

使用缩小代码,每个人都必须下载你的缩小代码大小(+缩小代码大小)。

假设你的 minifed 代码是 5K 并且被访问了 10 次,这意味着:

IE GetScript:

(5K * 10) + 使用第二个 HTTP 请求的性能 = 50K+

非 IE

0

/////////////////////////////////////// /////////

IE 非GetScript

5K

非 IE

5K

【讨论】:

  • 第一个对于非 IE 用户来说也会更快吗?
  • 同一个http请求
  • 这将是同一个 http 请求,但 http 响应更短(没有 IE-only 代码)。
  • 就像@andrea 说 getscript 也不会缓存你的脚本,这很糟糕!
  • 感谢您的努力 :) 我决定现在使用getScript,如果将来我需要包含更多“插件”,我可能会考虑@ 987654321@(正如@Jason Sperske 之前建议的那样。)
【解决方案3】:

这是两个完全不同的东西。 在一种情况下,您将脚本嵌入到页面中,因此可以立即访问它,并且您不需要任何其他代码来验证它是否可用。 但是,在第二种情况下,您将脚本作为外部资源加载,这意味着您可能需要处理可能的通信错误、脚本错误等。

【讨论】:

    【解决方案4】:

    这两种方法之间存在差异。 即使浏览器不是 ie,您嵌入的第一种方法也会下载整个脚本。它会增加页面大小,从而影响页面加载性能。

    第二个方法会更好,只有在需要时才从外部 js 文件加载脚本,这意味着只有当浏览器是 IE 时。所以在其他浏览器中性能会更好。

    你还提到剧本很大。所以最好将该脚本包含在外部 js 文件中。由于这些文件被缓存在客户端机器中,从而提高了性能。无需一次又一次地获取它

    【讨论】:

      【解决方案5】:

      所以根据source drill down a bit 你可以看到getScript 正在为你添加一个脚本标签,所以没有区别。除了启动 jQuery 和处理添加脚本元素的 JavaScript 的(小)处理。我认为最大的区别在于它允许您以编程方式注入脚本标签,以便您可以添加逻辑,如浏览器测试。

      【讨论】:

        【解决方案6】:

        不需要在文件中嵌入脚本,使用其他浏览器的用户不应该得到它。 $.getScript 只是 $.ajaxdataType script 的简写,所以它只是加载脚本并执行它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-09
          • 1970-01-01
          • 1970-01-01
          • 2020-12-10
          相关资源
          最近更新 更多