拉取 HTML 页面 (e.g. index.html)开始解析 HTML解析到 标签之后准备获取 script 文件.浏览器获取script文件。同时,html 解析中断并且阻断页面上其他html的解析。一段时间后,script下载完成并且执行。继续解析HTML文档的其他部分(解析script之后的html代码)
第4步导致了不好的用户体验,直到script文件全部下载完成之前HTML都不能得到解析。
为什么会发生阻断事件?
任何script代码都能改变HTML的结构,通过 这种方式或者其他方式。 这就导致了HTML解析必须等待script全部被下载和执行完,HTML才能解析script标签之后余下的部分。
然而,大部分的Javascript开发者在加载文档过程中,不会通过script操作HTML的DOM结构。然而,他们必须等到script全部加载结束,才能看到页面。举个例子:
Javascript:
因为你的浏览器在下载并执行完my-script.js标签之前,并不知道my-script.js这个文件不会去修改DOM结构,导致HTML停止解析(在script下载并执行完之前)
之前推荐的方法(已过时):
之前解决这个问题的方法是把 标签放到标签之后 ,这确保了解析到</body>之前都不会被script终端。
这个方法是有问题的: 浏览器在整个文档解析完成之前都不能下载script文件,如果文档很大的话,解析完HTML,用户依然要等待script文件下载并执行完成之后,才能操作这个网站。(主要是串行,先解析HTML完,再下载并执行script,速度肯定没有并行块,那么怎么并行呢?大家假设能在解析HTML一开始,就开始下载script,并且不阻断HTML的解析,是不是就并行了呢)如果你的网站在2秒之内没有响应,用户就会跑掉;
现在推荐的解决方案:
现在浏览器script标签支持 和 属性. 应用这些属性当script被下载时,浏览器更安全而且可以并行下载(下载script并不阻断HTML解析)。
async
async标记的Script异步执行下载,并执行。这意味着script下载时并不阻塞HTML的解析,并且下载结束script马上执行。异步意味着,上述代码script2可能比script1先下载完并执行完。
根据 /#feat=script-async, 90% 的浏览器支持async属性.
defer
defer标签的script顺序执行。这种方式也不会阻断浏览器解析HTML。
跟 async不同, defer scripts在整个文档里的script都被下载完才顺序执行。
根据 /#feat=script-defer, 90% 的浏览器支持这个属性. 92% 至少部分支持此属性。
注意:在 IE <= 9 浏览器应用defer属性可能会导致script不会顺序执行。如果你想让低版本IE支持此属性,请看 this
结论
应用 or 这两个属性,拥抱未来。
原答案来自万能的: stackoverflow
@ bfc是什么的简称?
BFC全称为:Block Formatting Context——块级格式化布局,简称BFC,它是一块独立的渲染区域,这个区域决定了常规流块盒的布局。 也就是说,BFC是一块区域,作用是决定常规流块盒的布局。
BFC的创建:BFC由某个HTML元素创建,下列元素会在其内部创建BFC区域。
根元素(<HTML>元素,<HTML>元素创建的BFC区域覆盖了所有网页的元素)
浮动定位或者绝对定位元素(float 和 position:absolute)
overflow属性不为默认值(visible)的块盒元素。
@ div布局简单实例?
DIV+css布局的基本流程
解决这个问题的方法如下:
新建一个html文件,命名为test.html,用于讲解div+css布局的基本流程。
在test.html文件内,对body进行样式初始化,设置外边距margin为0,内边距padding为0,同时使用text-align设置文字居中。
html 布局时候div用了绝对定位或者漂浮以后,下面
#main{width:960px;height:auto;}#left{width:250px;height:600px;}#right{width:700px;height:600px;margin-left:10px;}#left,#right{float:left;} 大概是这样,,。
介绍几个CSS+DIV布局实例
介绍几个CSS+DIV布局实例给偶。。。谢了
没什么布局实例,就是看一些站然后自己写,内容直接用颜色代替就行了,
DIV布局怎么在页面水平居中?
方法如下: 在布局一张网页时,通常网页主体框架是居中于浏览器中的。实现最外层DIV水平居中与浏览器中需要一个条件和一个设置。假如最外层DIV盒子的CSS命名为“#divcss5”,这个时候为了兼容各大浏览器实现最外层的这个盒子居中。
怎么用div布局加css样式做网页
在div里设置id或者class 然后在css样式表里定义样式 #aaa{ } .bbb{ } – DIV+CSS通用样式布局实例代码 对于刚开始接触DIV+CSS的同学来说,记住那些对象属性以及对应的值就很困难了,更何况来完成页面的布局了 一下是一个非常简单易
div+css上中下布局的问题
div头部和底部固定,中间部位想自适应到底部为止。 一直没找到办法。各正好自己以前写过,奉上最简短的代码,效果已亲测,兼容IE7/8以及Chrome等现代浏览器,代码如下: div+css上中下布局html,body {height:100%; *overflow:hidden; /* 消除IE7下的横向滚动条 */}body {margin:0; padding:0; font-size:30px; text-
DIV+CSS布局问题,让两个DIV标签并排
DIV+CSS布局问题,让两个DIV标签并排而不是2行显示
使用css float并排显示: 对div设置一个float浮动属性即可解决不并排显示,只要并排div盒子总宽度小于或等于最外层盒子宽度即可实现多个div对象并排显示。 加float浮动实现多个div并排显示。 这里对div通设一个浮动,当然实际使用时候。
如何实现上左右在个DIV满屏布局?
1.实现上、左、右三块组成样式的全屏布局?2.A区和B区,也要能够在指定 #all{ width:100%; height:100%; } #left{ position:absolute; background-color:#3aadf0; float:left; width:50%; height:100%; } #right{ position:absolute; background-color:red; float:right; width:50%; height:100%; margin-left:50%;
@ html中怎么设置右侧加滚动条?
在需要滚动的元素标签中加style=“overflow-y:auto”