【问题标题】:$(slector).load('page.html #id') vs $.get and filter/find #id$(selector).load('page.html #id') vs $.get 和 filter/find #id
【发布时间】:2013-05-28 20:44:34
【问题描述】:

我想知道性能是否有任何差异(或根本不同)

在这之间:

$(selector).load('page #myid');

$.get('page',function(data){
     $(selector).html( $(data).find('#myid') );
     /* depending the dom tree it should be .filter() */
})

【问题讨论】:

  • @Alexander Sagen 在stackoverflow.com/questions/3870086/…中描述得很好
  • 这两个例子几乎都是一样的,cf。 the source,即将响应解析为 HTML,应用选择器并将结果插入 DOM。我想性能差异可以忽略不计。
  • 我也想知道这个。以我的经验 load() 比自己“解析”结果更快。
  • 但显然这只是我的想象
  • 没有明显区别,尤其是考虑到大部分时间都花在了执行请求上。

标签: jquery ajax performance get load


【解决方案1】:

我会说使用load().get() 更多地与您的意图和要求有关,而不是性能。

加载()


.load() 用于轻松/简单地加载文档或其一部分。
它将加载完整的文档,然后使用innerHTML 解析 HTML 以仅返回您感兴趣的部分。

如果您只需要一种将某些内容加载到 div 中的快速方法,那么$(element).load(url, selector) 是您的最佳选择。我会假设 load() 已为此进行了优化。

获取()


load() 不同,.get() 允许设置dataType 以获得更大的灵活性,例如用于跨域请求的 JSONP。

它还实现了promise 接口,赋予它Deferred Object 的所有功能。

来自文档:

Promise 接口还允许使用 jQuery 的 Ajax 方法,包括 $.get(),链接多个 .done()、.fail() 和 .always() 回调 在单个请求上,甚至在 请求可能已完成。如果请求已经完成,则 回调被立即触发。

总结


在非常基本的层面上,简单的.load(url, selector).get(url, callback) 之间应该没有值得的性能差异。使用其中任何一个都可以。

我想,这里没有对错之分。使用任何适合您的需求。

问自己类似的问题:

您需要跨域 (JSONP) 吗?
需要链接.fail().done()等吗?
您是否需要 get() 提供的任何 load() 所没有的功能?
...

如果您使用load()get() 取决于您的要求。在这种情况下,性能是次要的。

【讨论】:

  • 但无论如何都必须下载整个文档...让我们说一个案例。只需要一个选择器
  • “不允许你传递数据对象”是什么意思?你是说.load()不能执行POST
  • @ToniMichelCaubet:它们都允许您传递数据。在我发帖之前,我忘了从我的模板中删除那些。为此道歉。我想编辑我的帖子以突出load()get() 之间的更多差异,以便更清楚地表明主要关注点应该是“哪种方法满足我的需求”,而只关注性能次要。例如,如果您需要进行跨域调用或需要使用延迟对象等,那么快速调用load() 是没有意义的。希望这是有道理的。没有对错之分。您可以使用适合您需要的任何东西。
  • @ToniMichelCaubet:我唯一能想到的另一件事是,如果您想要文档中的多个部分,那么在回调中使用带有 find() 的单个 get() 比多个单独的 @987654347 更好@请求。
  • 是@Jack 询问了数据对象
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2011-11-03
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多