JavaScript并发下载

js实现多线程并行文件下载,js实现多线程并行文件上传 在web端下载文件时,有时候文件过大,下载时间过长,但是有时候我们发现下载速度很慢,并不是由于带宽不够,而是由于下载是单线程进行的,所以导致带宽没充分发挥,导致等待很长时间,那么是不是可以进行多线程并行下载,这样下载速度就是多个线程所占带宽合并的大小,能充分发挥带宽能力,答案是肯定的。 阅读详情

在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 EvalIE, FF, Saf, Chr, OpnonoSaf, Chr-~500
XHR InjectionIE, FF, Saf, Chr, OpnoyesSaf, Chr-~500
Script in IframeIE, FF, Saf, Chr, OpnonoIE, FF, Saf, Chr-~50
Script DOM ElementIE, FF, Saf, Chr, OpyesyesFF, Saf, ChrFF, Op~200
Script DeferIE, Saf4, Chr2, FF3.1yesyesIE, FF, Saf, Chr, OpIE, FF, Saf, Chr, Op~50
document.write Script TagIE, Saf4, Chr2, OpyesyesIE, FF, Saf, Chr, OpIE, 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");

 

前端 JavaScript 中快速发起多个下载请求时,解决浏览器的并发下载连接限制 快速发起多个下载请求时,浏览器可能无法处理所有请求,导致一些链接被忽略。可能的原因为浏览器对并发 HTTP 连接的限制,例如 Chrome 可能限制每秒下载 10 个文件(当你在前端 JavaScript 中快速发起多个下载请求时,浏览器可能无法同时处理所有请求,导致一些请求被忽略。通过在每次下载请求之间添加延迟,可以逐个处理请求,避免浏览器因并发限制而忽略某些请求。Firefox 在处理批量下载时可能表现不同,延迟方法可能无效(具体没有尝试),建议使用 JSZip 来确保所有文件都被包含。 阅读详情

相关推荐

JS实现多线程数据分片下载

在大数据开发过程中,为了提高大文件的上传速度,往往需要将大文件切割为小的数据分片,这样小分片数据可以充分利用有限的带宽,加快上传速度。 上传完成后,通常做法是在后端进行合并,而我的做法是后台保持分片存储,数据使用时候,前端JS开启多线程下载,再合并为完整的文件。这样的好处和上传一样,可以提高下载速度很多倍。下载效率和分片算法相关。 以下是多线程分片下载聚合的实现。 function concatenate(arrays) { if (!arrays.length) return null;

关于代码的那些事 2417

详解JS实现单个或多个文件批量下载的方法

JavaScript是一种基于原型的语言,它意味着它不使用类来定义对象,而是使用原型来定义对象和它们的属性和方法。这种原型继承模式是JavaScript的一个独特特征,使其与其他基于类的语言(如Java和C++)有所不同。JavaScript在Web开发中扮演着非常重要的角色。在Web应用程序中,它可以用来验证表单、处理数据、响应用户交互等。JavaScript可以与HTML和CSS结合使用,创建交互式的、动态的Web页面。

qq_38334677的博客 3679

Node.js 入门介绍与安装

Node.js 是什么 Node.js 是一个Javascript运行环境(Runtime Enviroment)。后端程序员如果理解这个有障碍的话, 可以想想JRE。 Node.js 基于Google的V8引擎。实质是对Chrome V8引擎进行了封装。 Node.js 是运行在服务端的 JavaScript。 Node.js 发布于2009年5月,由Ryan Dahl开发。 Node.j......

oscar999的专栏 1148

Node.js 中实现多任务下载的并发控制策略

1、背景与需求在实际开发中,我们常常需要从多个源下载文件,例如从多个服务器下载图片、视频或音频文件。如果不加以控制,同时发起过多的下载任务可能会导致服务器过载,甚至引发网络拥堵。因此,合理控制并发数量是实现高效下载的关键。2、 并发控制的核心问题在 Node.js 中,并发控制的核心问题包括:资源竞争:过多的并发请求可能导致内存或 CPU 资源耗尽。速率限制:目标服务器可能会限制单个 IP 的请求频率。错误处理:部分下载任务可能失败,需要重试机制。性能优化。

Z_suger7的博客 1437

multithreaded-downloader-js:用Javascript实现的基于浏览器的多线程下载器

多线程下载器 使用香草JavaScript实现的基于浏览器的多线程下载器。 发送HTTP HEAD请求以获取文件信息并计算块数 为每个块发送带有“ Range:bytes = start-end”标头的HTTP GET请求 监控每个响应流的进度 重试失败或特定的HTTP状态代码(例如503服务不可用) 将每个响应流(按顺序)连接为最终输出流 使用简化下载输出流。 使用 (HTML5文件系统api)临时保存每个块。 一旦完成将所有块连接起来,并触发带有最终文件的[下载]。 100%客户端JavaScript,无需插件或代理 该项目正在开发中,仍然存在一些错误。 Backblaze B2 如果使用B2命令行工具,请记住用单引号将JSON转义。 B2存储桶必须为“公共”,并且应用了以下CORS规则: [{ "corsRuleName": "someName",

javascript模拟多线程

这是一个跨多浏览器的js框架,用以把javascript模拟成多线程

Python+JS自动化批量下载金山文档:从网页分析到并发下载实战

在数据处理与办公自动化场景中,批量文件下载与归档是常见需求。其核心原理在于模拟浏览器行为或调用API,实现对网络资源的程序化获取。通过分析网页结构、拦截网络请求,可以绕过界面限制,实现高效、准确的批量操作,这对于文档管理、数据备份等场景具有重要技术价值。本文聚焦于金山文档的批量下载难题,通过Python与JavaScript的组合方案,详细解析了如何利用JS在浏览器内获取文档列表,再通过Python模拟请求实现并发下载,并深入探讨了链接解析、会话管理、错误处理等关键环节,为处理类似在线文档平台的批量导出需求

weixin_32075843的博客 327

js多线程--很好用的东东

js多线程脚本库,实现多线程 比如执行太慢,可以试用下这个,不错的

高并发外部JS的阻塞下载

所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等。至到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容。     有人会问:为什么JS不能像CSS、image一样并行下载了?这里需要简单介绍一下浏览器构造页面的原理, 当浏览器从服务器接收到了HTML文档,并把HTML在内存中转换成DOM树,在转换的过程中如果发现某个节点(node)上引用了C

路在脚下 1289

multithread.js, 在浏览器多线程中轻松实现.zip

multithread.js, 在浏览器多线程中轻松实现 多线程在浏览器多线程中轻松实现。在不中断用户体验的情况下运行任何业务逻辑。多线程是一个简单的包装器,它消除了处理网络工作者和可以传递对象的麻烦。在不中断用户体验的情况下,在它的自己的线程中异步运行任何代码。使用多线程使用多线程很

Hamsters.js, 100%个普通Javascript多线程&并行执行库.zip

Hamsters.js, 100%个普通Javascript多线程&并行执行库 Hamsters.js作者:奥斯汀K 。 史密斯网站: Hamsters.io描述: 100%个普通Javascript多线程&并行执行库许可证: 艺术许可 2.0 环境支持所有主流浏览器 IE9 +现有网

10倍速Node.js版本管理:fnm并发下载与安装的底层优化解析

fnm是一款基于Rust构建的快速简单的Node.js版本管理器,它通过底层优化实现了并发下载与安装,为开发者提供了高效的Node.js版本管理体验。无论是项目切换还是版本更新,fnm都能以极快的速度完成操作,大大提升了开发效率。 ## 为什么选择fnm进行Node.js版本管理 在众多Node.js版本管理工具中,fnm凭借其出色的性能脱颖而出。作为用Rust编写的工具,fnm从底层就具备了

gitblog_01100的博客 378

JavaScript单线程还是多线程

NULL 博文链接:https://baiyejianxin.iteye.com/blog/1295730

Js多文件批量下载器

Js多文件批量下载器step1.导入Downer.jsstep2.使用对象 找来找去发现浏览器对文件下载操作文件系统不大支持,限制颇多,还是尽早切换到桌面应用为好。不过作为缓存方案原生JS通过xhr下载文件还是能接受的。 下载器参照download.js写了文件保存部分,下载文件部分使用“XMLHttpRequest”实现 step1.导入Downer.js < script type="application/javascript" src="Downer.js"> step2.使用对象

lambert_Lei的专栏 839

Synopsys Sentaurus TCAD新手教程:从零开始仿真trench MOSFET(附完整代码解析)

本文提供Synopsys Sentaurus TCAD新手教程,详细讲解从零开始仿真trench MOSFET的全过程,包括环境搭建、外延生长、沟槽刻蚀、栅极形成等关键步骤,并附完整代码解析。通过实际案例帮助半导体工程师掌握Sprocess操作技巧,优化工艺参数设置,提升仿真效率。

weixin_30505225的博客 219

RAGFlow API 实战指南:从数据集管理到智能对话

本文提供了RAGFlow API的实战指南,详细介绍了如何从零开始构建基于检索增强生成(RAG)的智能应用。内容涵盖环境准备、API密钥获取、核心概念理解,以及通过API进行数据集创建与管理、文档上传解析、知识块管理、检索测试,最终创建并配置智能聊天助手,实现基于私有知识库的精准对话。

weixin_29284885的博客 379

在 Node.js 中使用 axios 配置代理并实现图片并发下载

该方法可直接复制使用,需要传递两个参数,`imageUrls` 参数为需要下载的图片列表,是一个存储了图片下载链接的数组,例:`['http://xxx','http://xxx']`,第二个参数是 `savePath` ,即文件保存路径,例:`D:/Desktop`,函数会提取文件名称进行路径的拼接,如果路径不存在则会自动创建。

qq_45897239的博客 1138

VOWIFI--相关的协议文档

一、3GPP相关协议文档 3GPP 23.402 Architecture enhancements for non-3GPP accesse- //重要 整体框架结构和流程,3GPP和NON-3GPP切换 3GPP 36.304  User Equipment (UE) procedures in idle mode //重要,终端在空闲状态下3GPP与NON-3GPP之间的重选方法   3GP

时九博客 3580

【亲测免费】 Node.js 16.14.2 Windows 版本安装包

Node.js 16.14.2 Windows 版本安装包 【下载地址】Node.js16.14.2Windows版本安装包 这是一个专为Windows用户提供的Node.js 16.14.2版本安装包,采用.zip格式压缩,方便快速下载和安装。Node.js是一个强大的服务端JavaScript运行环境,基于Chrom...

gitblog_06777的博客 568

NTFS分区变成RAW别乱修!正确数据恢复与修复方法详解

文件系统是操作系统管理存储数据的核心机制,NTFS作为Windows主流文件系统,一旦分区识别异常,常会显示为RAW格式。分区变RAW通常意味着文件系统入口信息损坏,而非数据物理消失,但若采用错误的修复方式,如直接对RAW分区执行chkdsk /f,可能因系统无法正确识别文件系统结构,导致写入操作落在错误偏移位置,二次破坏本可恢复的数据。正确的处理思路是:先停止一切写入操作,通过扇区级镜像备份保留原始现场,再分析DBR、分区表及$MFT状态,依据诊断结果选择修复或深度扫描恢复。实际排查中,常见问题如DBR记

weixin_31155097的博客 134

保姆级教程:用QSTEM和DrProbe搞定你的第一张STEM模拟图(附Fe3O4实例文件)

本文提供了一份详细的STEM模拟图像生成教程,涵盖从晶体结构获取到最终图像模拟的全过程。通过QSTEM和DrProbe软件的操作指南,帮助材料科学研究者快速掌握STEM模拟技术,特别适合初学者。教程包含Fe3O4实例文件,详细解析参数设置、计算优化和结果分析等关键步骤。

weixin_33730836的博客 523
上一篇: JavaScript并发下载
下一篇: 【博客搬家】博客搬家了,请大家访问我的个人网站 http://www.raychase.net/
RayChase
博客等级 码龄20年 71粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值