javascript非阻塞加载问题
dom load事件不同的浏览器处理方式不同,你只需要认为在这个事件激发以后,整个html dom文档就是一个可用的状态,此时documen已经被关闭了,调用document.write会刷白整个页面。下载是异步的没问题,但是每个javascript执行的时候还是同步的,就是先出现的script标签一定是先执行,即使是并行下载它最后一个下载完成。除非标有defer的script标签,否则任何javascript在执行的时候都会中断当前html文档解析,自然会阻止页面渲染。其实没什么性能上的区别,只是异步下载javascript可以尽快的让用户看到页面,比较安心罢了。javascript加载是不会影响已经渲染的页面,但是会中断html文档解析,浏览器会在javascript执行以后决定当前文档是否需要进行重新渲染或者文档重排。所以即使javascript放到最后面也会使浏览器暂停,但不影响之前已经解析出来的dom文档,此时对于用户来说是可操作的,而在之前就加载javascript,浏览器会提早暂停,给用户看到的就是白色的页面,不友好。javascript有可能会修改dom,此时修改dom可能比较危险,因为正处于不稳定的状态,如果使用document.write甚至会迫使浏览器强制解析新出现的动态内容,如果是这种情况,javascript执行完成以后就会进行重排。如果javascript修改了css,影响了layout的话,也会进行重渲染或重排。项目大了重构起来很方便的,没必要在初期就引入复杂性。
■网友
【javascript非阻塞加载问题】 单说页面上的js执行:js执行与浏览器paint之间存在着奇怪的关系(同一线程下即阻塞):有时候先执行js,有时候先进行页面layout后paint。前者导致页面出现空白的时间会长很多,在异步加载js之前,可以使用setTimeout(loadScripts, 0)来将异步加载其他js文件的函数加入事件队列,线程优先级低于浏览器paint。这样就保证了先paint后加载其余js模块,从而减少页面空白时间。(这是针对现代浏览器的js hack)
推荐阅读
- |心酸!小男孩跪地守候的妈妈去世了
- 为啥网速明明很快,但看视频都是看多少加载多少,而不是一次性全给加载完呢
- javascript 中this的四种调用模式
- 在pat中怎样运用javascript等非常用语言做题
- javascript怎样关闭手机网页双指触屏
- javascript函数的调用模式有哪几种
- |男子因情感纠纷遭“浸猪笼” 警方回应:抓获一嫌犯
- 民房起火|民房起火 老人多年积蓄被烧成焦炭
- 在Linux网络协议栈中,IP选项功能是一个可选加载模块,类似于make install
- vs2012调试时加载符号是干啥的?
