在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并发控制流框架" 本文主要介绍了基于Node.js的JavaScript并发控制流框架。该框架旨在解决Node.js异步I/O的并发控制问题,从而提高开发效率。 Node.js作为一个基于V8引擎的服务器端...
JavaScript多并发问题处理涉及到在进行多个异步操作时,如何同步它们的完成状态,以便在所有操作完成后执行某些后续操作。这个问题在编写Web应用程序时尤为常见,尤其是在初始化页面时需要获取多项数据时。 1. 异步...
为了让JavaScript和其他资源如图片、CSS等可以并发下载,而不互相阻塞,从而加快页面加载速度,人们总结出了一系列的技术手段。在传统的网页中,JavaScript文件通常通过`<script>`标签直接嵌入到HTML文档中。在HTML5...
题目要求在并发下载8个图片资源时,任何时刻同时进行的下载任务不超过3个,以实现高效且有序的图片加载。 首先,我们需要理解题目的核心需求。给定一个包含8个图片URL的数组`urls`,以及一个函数`loadImg`,它接收...
JavaScript并发是现代Web开发中的重要概念,特别是在单线程环境中,JavaScript引擎如V8执行代码的方式使得并发处理变得至关重要。本教程将深入探讨JavaScript如何处理并发,并通过代码示例进行解释。 1. **事件循环...
异步编程是JavaScript的核心特性之一,通过回调函数、Promise或者async/await,开发者可以处理复杂的并发情况。DOM操作则是前端开发的基础,学习如何有效地选取、修改和添加DOM元素是每个JavaScript开发者必须掌握的...
虽然JavaScript在浏览器环境中通常是单线程的,但随着Web Workers的引入和其他异步编程模式的流行,理解并发变得越来越重要。作者讨论了一些处理并发问题的策略,如事件循环和回调函数。 总的来说,《Effective ...
5. 异步编程:JavaScript支持异步编程模型,如回调函数、Promise和async/await,能处理复杂的并发问题,提高程序性能。 这个小型网站的构建可能涉及以下JavaScript技术: 1. DOM操作:通过JavaScript可以动态修改...
### JavaScript TypeScript 实现并发请求控制 #### 背景与目标 在现代Web开发中,高效处理异步请求是一项重要技能。特别是在面对大量HTTP请求时,如何合理地控制并发数,既可以提高系统的响应速度又能避免服务器...
7. **异步优化**:如何有效利用事件循环和并发,避免阻塞主线程。 8. **代码压缩和打包**:了解构建工具如Webpack或Rollup,以及代码混淆和压缩技术,以减小文件大小,提高加载速度。 这两本书结合阅读,将为...
useless.js 是一个轻量级的JavaScript库,其主要功能是帮助开发者管理异步操作的并发和执行顺序。在现代Web应用中,由于Ajax、Promise、async/await等技术的广泛应用,异步编程变得越来越常见,同时也带来了挑战,如...
书中可能会讲解如何组织和管理代码,以及如何使用这些特性解决复杂的并发问题。 最后,JavaScript的最新版本ES6(ECMAScript 2015)及后续版本引入了大量的新特性,如箭头函数、类、模板字符串、解构赋值、let和...
Node.js是基于Chrome V8引擎的JavaScript运行环境,它通过libuv库提供了异步I/O操作,使得JavaScript可以在服务器端运行,处理大量并发连接。它的非阻塞I/O模型使得Node.js非常适合处理高并发请求,避免了传统的多...
这个名为"JavaScript_一个功能齐全的下载管理器.zip"的压缩包可能包含了一个用JavaScript实现的全面下载管理器项目。下载管理器通常允许用户在浏览器中控制和管理他们的下载任务,包括暂停、恢复、速度限制以及多...
通过比较JavaScript和Python的异步文件下载,我们可以发现两者在处理并发下载时都能达到类似的效果。然而,Python的异步模型(基于事件循环和协程)可能在处理大量并发时更具优势,因为它可以更有效地利用CPU资源。...
Node.js基于Chrome的V8引擎,提供了一个运行JavaScript的高性能平台,支持非阻塞I/O,适合开发高并发的网络应用。 十、框架与库 JavaScript有许多流行框架和库,如React、Vue、Angular等,它们简化了开发过程,提高...
该项目是一款基于Python、HTML、JavaScript、CSS构建的多用户并发聊天机器人,源码包含268个文件,涵盖32个Python脚本、28个PNG图片、25个rst文档、22个txt文本、22个HTML页面、19个ico图标、15个id标识、14个ttf...