`

JavaScript并发下载

 
阅读更多

 在IE6/7里JavaScript会从两个方面阻碍页面呈现:
script标签下面的网页资源在script加载完之前会停止请求、下载。
script标签下面的html元素在script加载完之前会停止渲染。

 

在ie6/7 firefox2/3 Safari3 Chrome1 和 opera下 script标签会阻碍下载:



 

 

虽然在ie8,safari4,chrome2下script可以并发,但依然阻碍了其他资源的下载:



 

 

有6种方法可以使script与其他资源并行下载:

  • XHR eval -- 通过XHR(XMLHttpRequest 对象)下载script,然后用eval方法执行XHR的responseText
  • XHR Injection -- 通过XHR下载script,然后建立一个script标签并把它插入文档中(body或者head标签内),接着把script标签的text属性设置为XHR的responseText的值
  • XHR in Iframe -- 把script标签放到一个iframe里,通过iframe下载它
  • Script DOM Element -- 创建script标签并把它的src属性指向你的脚本地址
  • Script Defer -- 添加script标签的defer属性,这个只在ie中有效,但firefox3.1也支持这个属性了
  • 使用document.write方法在页面中写入<script src="">,这个只在ie里有效

可以通过Cuzillion查 看各个方法的使用例子。

 

Technique 方法 Parallel Downloads 是否并行下载 Domains can Differ 可否跨域 Existing Scripts 是否需要更改现有脚本 Busy Indicators是否出现示忙器 Ensures Order 是否确保顺序 Size (bytes)
XHR Eval IE, FF, Saf, Chr, Op no no Saf, Chr - ~500
XHR Injection IE, FF, Saf, Chr, Op no yes Saf, Chr - ~500
Script in Iframe IE, FF, Saf, Chr, Op no no IE, FF, Saf, Chr - ~50
Script DOM Element IE, FF, Saf, Chr, Op yes yes FF, Saf, Chr FF, Op ~200
Script Defer IE, Saf4, Chr2, FF3.1 yes yes IE, FF, Saf, Chr, Op IE, FF, Saf, Chr, Op ~50
document.write Script Tag IE, Saf4, Chr2, Op yes yes IE, FF, Saf, Chr, Op IE, FF, Saf, Chr, Op ~100

 

如果有一些内联脚本需要在外部脚本执行后才能执行,那就需要同步(synchronize)他们了。称作"coupling",Coupling Asynchronous Scripts 这篇文章介绍了一些目前可以实现“coupling”的方法。

 

 

headjs,能使JS并发下载(但是顺序执行):http://headjs.com/

 

head.js("/path/to/jquery.js", "/google/analytics.js", "/js/site.js", function() {
  // all done
});

// the most simple case. load and execute single script without blocking.
head.js("/path/to/file.js");

// load a script and execute a function after it has been loaded
head.js("/path/to/file.js", function() {

});

// load files in parallel but execute them in sequence
head.js("file1.js", "file2.js", ... "fileN.js");

// execute function after all scripts have been loaded
head.js("file1.js", "file2.js", function() {

});

// files are loaded in parallel and executed in order they arrive
head.js("file1.js");
head.js("file2.js");
head.js("file3.js");

// the previous can also be written as
head.js("file1.js").js("file1.js").js("file3.js");


 

  • 大小: 2.2 KB
  • 大小: 1.8 KB
分享到:
评论

相关推荐

    基于Node.js的JavaScript并发控制流框架.pdf

    "基于Node.js的JavaScript并发控制流框架" 本文主要介绍了基于Node.js的JavaScript并发控制流框架。该框架旨在解决Node.js异步I/O的并发控制问题,从而提高开发效率。 Node.js作为一个基于V8引擎的服务器端...

    JavaScript多并发问题如何处理

    JavaScript多并发问题处理涉及到在进行多个异步操作时,如何同步它们的完成状态,以便在所有操作完成后执行某些后续操作。这个问题在编写Web应用程序时尤为常见,尤其是在初始化页面时需要获取多项数据时。 1. 异步...

    让JavaScript和其它资源并发下载的方法

    为了让JavaScript和其他资源如图片、CSS等可以并发下载,而不互相阻塞,从而加快页面加载速度,人们总结出了一系列的技术手段。在传统的网页中,JavaScript文件通常通过`&lt;script&gt;`标签直接嵌入到HTML文档中。在HTML5...

    【JavaScript源代码】Promise面试题详解之控制并发.docx

    题目要求在并发下载8个图片资源时,任何时刻同时进行的下载任务不超过3个,以实现高效且有序的图片加载。 首先,我们需要理解题目的核心需求。给定一个包含8个图片URL的数组`urls`,以及一个函数`loadImg`,它接收...

    Javascript-Concurrente:用于解释Javascript并发的教程代码

    JavaScript并发是现代Web开发中的重要概念,特别是在单线程环境中,JavaScript引擎如V8执行代码的方式使得并发处理变得至关重要。本教程将深入探讨JavaScript如何处理并发,并通过代码示例进行解释。 1. **事件循环...

    精通JavaScript2015

    异步编程是JavaScript的核心特性之一,通过回调函数、Promise或者async/await,开发者可以处理复杂的并发情况。DOM操作则是前端开发的基础,学习如何有效地选取、修改和添加DOM元素是每个JavaScript开发者必须掌握的...

    Effective JavaScript 编写高质量JavaScript代码的68个有效方法1

    虽然JavaScript在浏览器环境中通常是单线程的,但随着Web Workers的引入和其他异步编程模式的流行,理解并发变得越来越重要。作者讨论了一些处理并发问题的策略,如事件循环和回调函数。 总的来说,《Effective ...

    javascript编写的小型网站

    5. 异步编程:JavaScript支持异步编程模型,如回调函数、Promise和async/await,能处理复杂的并发问题,提高程序性能。 这个小型网站的构建可能涉及以下JavaScript技术: 1. DOM操作:通过JavaScript可以动态修改...

    【JavaScript源代码】JavaScriptTypeScript 实现并发请求控制的示例代码.docx

    ### JavaScript TypeScript 实现并发请求控制 #### 背景与目标 在现代Web开发中,高效处理异步请求是一项重要技能。特别是在面对大量HTTP请求时,如何合理地控制并发数,既可以提高系统的响应速度又能避免服务器...

    JavaScript语言精粹(高清电子版)和高性能JavaScript 双语版

    7. **异步优化**:如何有效利用事件循环和并发,避免阻塞主线程。 8. **代码压缩和打包**:了解构建工具如Webpack或Rollup,以及代码混淆和压缩技术,以减小文件大小,提高加载速度。 这两本书结合阅读,将为...

    uselessjs一个用于控制javascript异步并发后执行顺序的小型库

    useless.js 是一个轻量级的JavaScript库,其主要功能是帮助开发者管理异步操作的并发和执行顺序。在现代Web应用中,由于Ajax、Promise、async/await等技术的广泛应用,异步编程变得越来越常见,同时也带来了挑战,如...

    javascript权威指南与实例

    书中可能会讲解如何组织和管理代码,以及如何使用这些特性解决复杂的并发问题。 最后,JavaScript的最新版本ES6(ECMAScript 2015)及后续版本引入了大量的新特性,如箭头函数、类、模板字符串、解构赋值、let和...

    nodejs测试mysql并发

    Node.js是基于Chrome V8引擎的JavaScript运行环境,它通过libuv库提供了异步I/O操作,使得JavaScript可以在服务器端运行,处理大量并发连接。它的非阻塞I/O模型使得Node.js非常适合处理高并发请求,避免了传统的多...

    JavaScript_一个功能齐全的下载管理器.zip

    这个名为"JavaScript_一个功能齐全的下载管理器.zip"的压缩包可能包含了一个用JavaScript实现的全面下载管理器项目。下载管理器通常允许用户在浏览器中控制和管理他们的下载任务,包括暂停、恢复、速度限制以及多...

    JavaScript 和 Python 中的异步文件下载.docx

    通过比较JavaScript和Python的异步文件下载,我们可以发现两者在处理并发下载时都能达到类似的效果。然而,Python的异步模型(基于事件循环和协程)可能在处理大量并发时更具优势,因为它可以更有效地利用CPU资源。...

    JavaScript学习指南 源代码

    Node.js基于Chrome的V8引擎,提供了一个运行JavaScript的高性能平台,支持非阻塞I/O,适合开发高并发的网络应用。 十、框架与库 JavaScript有许多流行框架和库,如React、Vue、Angular等,它们简化了开发过程,提高...

    基于Python、HTML、JavaScript、CSS的多用户并发聊天机器人设计源码

    该项目是一款基于Python、HTML、JavaScript、CSS构建的多用户并发聊天机器人,源码包含268个文件,涵盖32个Python脚本、28个PNG图片、25个rst文档、22个txt文本、22个HTML页面、19个ico图标、15个id标识、14个ttf...

Global site tag (gtag.js) - Google Analytics