JSONP是否进行异步调用?

我是jsonp的新手,我知道JSONP是一种创建动态脚本src =“...”标记的技术,它使用回调函数封装了返回的javascript(或json对象)。

但是如果我没有弄错,脚本标签中的src属性会阻止所有进一步的执行,直到脚本加载,那么它怎么会是异步调用呢?


这个相关的问题应该对你的问题有所了解。

使用javascript动态添加的脚本节点是异步执行的,它们不会阻止执行其他脚本。


实际上,正如你可以在这里和这里阅读动态创建的<script src=".."> DOM完成加载后的元素将不会被阻止,并且由于它们将是异步...至少按照它们创建的顺序。

qutoted from http://calendar.perfplanet.com/2010/the-truth-about-non-blocking-javascript/

当动态插入脚本时,非阻塞下载立即开始。 该脚本在完全下载后立即执行。 在大多数浏览器中,执行顺序无法保证,但Firefox <4和Opera将按插入顺序执行脚本。 所有主流浏览器都支持这种通用方法。


我认为你的问题有两个部分。

首先,JSONP本质上不是动态脚本标记,而是动态脚本标记是JSONP携手使用的技术。

JSONP是一种允许网站从ORIGIN以外的不同域加载内容的方法,利用浏览器对src指向外部域的SCRIPT标记的容忍度。 (你应该通过其他答案中的链接了解这一点)。

另一方面,动态SCRIPT标签为任何脚本提供异步性质,无论它是JSONP还是其他。

要点是,只要浏览器在文档上点击SCRIPT标签,它就会停止大多数其他活动(专门渲染DOM),直到该脚本被下载。 这会影响用户对网站响应程度的体验。 如果脚本不直接对网站的主要内容做出贡献(例如Google Ads,Tweets或Facebook Timeline(假定您不是Mark Z.:P)等),则效果更糟糕。

为了避免这个问题,您可以在页面完全加载到浏览器(即就绪/加载事件)后向页面注入动态SCRIPT标签。 然后浏览器会默默地加载新脚本,但是用户已经为他呈现了整个页面(几乎),给他提供了快速加载的印象。 从这个意义上说,动态脚本可以与页面加载异步。

然而,在实践中,大多数以这种方式使用的脚本是驻留在不同域的JSONP脚本,尽管这不是必需的。

希望这是有道理的。

对于TRUE异步脚本加载,您应该查看HTML5同步属性:

链接地址: http://www.djcxy.com/p/47499.html

上一篇: Does JSONP make an asynchronous call?

下一篇: Read JSON from URL