
1浏览器渲染工作流程
浏览器的工作方式. 以Webkit引擎的工作流程为例,浏览器在加载HTML页面后执行以下操作:

解析HTML [遇到标签以加载图像] —>构建DOM树
加载样式->解析样式[背景图像链接未加载]->构建样式规则树
加载javascript —>执行javascript代码
匹配DOM树和样式规则树以构建渲染树[将背景图像加载到渲染树上]
计算布局的元素位置
绘制[开始渲染图片]
2个图像加载和渲染规则
并非所有标签图像和样式表背景图像都已加载到页面上. 对于具有display: none属性设置的元素,图像将不会呈现但会被加载.
.img-purple {
background-image: url(../ image / purple.png);
}
style>

图像资源请求如下:

原理
当DOM树与样式规则树匹配以构建渲染树时,可渲染元素上的所有属性(例如display: none属性和background-image属性)都将合并到渲染树中.
解析渲染树时,将加载标记元素上的图像. 在元素上找到background-image属性时,将加载背景图像.
在绘制时在元素上找不到display: none属性时,不计算元素的位置,也不绘制元素.
.img-{
background-image: url(../ image / yellow.png);
}
style>

div>
图像资源请求如下:

通过显示的子元素: none属性元素的设置,样式表中的背景图像将不会被渲染并且不会被加载;并且标签的图像将不会呈现,但会被加载.
原理
如上所述,在构建渲染树时,仅可渲染元素输出到渲染树,这意味着存在不可渲染元素. 当匹配DOM树和样式规则树时,如果使用display: none找到元素的属性,浏览器将认为该元素的子元素不可渲染,因此将不会输出此元素的子元素呈现树的元素.
解析渲染树时,显示中没有显示子元素: 在渲染树上未设置任何属性元素,因此将不会加载该元素中子元素的背景图像.
在绘制时,由于在渲染树上未设置display: none属性元素的子元素,因此不会渲染该元素中子元素的背景图像.
.img-blue {
background-image: url(../ image / blue.png);
}
图像资源请求如下:


页面上多个标记或样式表中的背景图像具有相同的路径,并且图像仅加载一次.
原理
当浏览器请求资源时,它将首先确定是否存在缓存. 如果浏览器具有缓存并且尚未过期,它将从缓存中读取并且不会再次请求它. 第一个加载的图像将存储在浏览器缓存中,并且稍后稍后再次请求同一路径图像时,将直接读取缓存中的图像.
.img-blue {
background-image: url(../ image / blue.png);
}
.img-橙色{
background-image: url(../ image / orange.png);
}
图像资源请求如下:

没有元素的背景图片将不会加载.
原理
不存在的元素将不会输出到DOM树,因此呈现树中将不存在不存在的元素. 解析渲染树时,无法解析不存在的元素,并且不存在的元素上的图片自然会加载并且不会渲染.
.img-green {
background-image: url(../ image / green.png);

}
.img-green: 悬停{
background-image: url(../ image / red.png);
}
触发悬停之前的图像资源请求如下:

触发悬停后的图像资源请求如下:

触发伪类时,将加载伪类样式的背景图像.
原理
在触发悬停之前,DOM树和样式规则树与无悬停选择器.img-green的样式匹配浏览器加载图片原理,因此渲染树上background-image属性的值为url(../ image /在解析渲染树时加载green.png,在绘制它时也渲染green.png.
触发悬停后,由于.img-green: 悬停具有更高的优先级,因此DOM树将样式规则树与悬停状态选择器.img-green: hover匹配,从而在树上呈现背景图像该属性的值为url(../ image / red.png),在解析渲染树时加载red.png,在绘制它时也渲染red.png.
在样式表中将背景图像用作占位符时,必须将背景图像转换为base64格式. 这是因为背景图像的加载顺序在标签后面. 加载标签图像后,背景图像可能会开始加载,这可能无法达到预期的效果.
在许多场景中,更改或触发状态后都会显示图片. 例如,单击选项卡后,通过设置显示隐藏的父元素将显示: 不显示任何内容浏览器加载图片原理,并且该父元素中的子元素图片将位于父元素中. 它只有在显示后才开始加载;例如,将鼠标悬停在图标上时,图标图片会更改,并且图片将在悬停后开始加载,从而产生这种不友好的体验.
在这种情况下,我们需要预加载图像. 有多种预加载方式:
如果它是一个小图标,则可以将其合并到Sprite图表中,并在更改状态之前将所有图标一起加载.
使用带有display: none属性的元素,将不会渲染图像,但会加载该图像. 将要预加载的图像添加到背景图像或带有显示的元素标签: 未设置.
在javascript中创建一个img对象,然后将图片网址设置为img对象的src属性.
浏览器渲染工作流程以及图像加载和渲染规则
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-149703-1.html
从不买
他要的就是你这句话
谋求战略均衡点