关于JavaScript无阻塞心中的疑问,希望哪位大神能指点指点

JavaScript无阻赛加载最常用的就是xhr 注入script dom element,《高性能JavaScript》一书中有提到,倘若我用script dom element技术,将script动态插入head中,文件的下载和运行都不会阻塞其他页面处理过程。这里百思不得其解,通过动态插入head中,JavaScript文件下载不会阻塞其他页面处理过程,但运行肯定会吧?浏览器不是单进程的么,一旦下载成功后立即执行,其他一切操作肯定会等该JavaScript代码执行完后,才进行啊。那为什么还说无阻塞呢。

我的观点:只能说加载无阻赛,但运行肯定会使其他操作挂起,等待完成后再处理。

疑问:JavaScript无阻赛技术为什么可以毫无顾忌地将JavaScript放到head中,且运行时不会阻塞其他页面处理过程?像这样,页面渲染时,在遇到<body>前执行JavaScript,不同样会出现短时间的白屏么?除开下载改善了外,与将<script>标签放到<head>中有什么区别?

Cats萌萌
浏览 663回答 24
24回答

叮当猫咪

你把它想复杂了,事实上它很简单,动态加载js无非是利用了流量器的多线程技术实现了无阻塞加载,加载成功后,运行效果是一样的。

慕妹3242003

是针对加载而言?就是说加载后,执行时,还是会阻塞哈?但书上和其他博客上,怎么都说利用无阻赛技术可以放到head中,且运行时不会阻塞其他操作呢?这点让我很费解

梵蒂冈之花

@猴子猿: 运行是指加载js的js代码,而不是加载后的js代码,加载后的js代码运行一样会阻塞其他操作

慕村225694

@上帝之城: 麻烦问下执行呢?

慕少森

@猴子猿: 执行过程会阻塞

慕沐林林

@上帝之城: 

精慕HU

就是告诉浏览器,这个js文件先下载着,不用执行,等页面都加载好了在执行

牛魔王的故事

@猴子猿: 也就是说这个js在下载和执行的时候,其他的资源可以同步下载 js执行是单线程,html渲染也是这个单线程,但是请求资源可以多个线程一起下载,只不过有些浏览器在同一个域名下只能最多5个一起下载

守着一只汪

@刘宏玺: 恩恩,同步下载是可以的,但是下载完了立即执行,这个立即执行,难道不会影响进程?

www说

@猴子猿: 只要是执行,都会占用这个线程 如果当前线程正在渲染html那么就会停止渲染,然后执行js,等js执行完毕再去渲染html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript