登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
答寒冬九问之讲讲输入完网址按下回车,到看到网页这个过 ...
答寒冬九问之讲讲输入完网址按下回车,到看到网页这个过程中发生了什么。
[ 复制链接 ]
毁抨句
2025-5-29 17:02:56
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
无意中看到寒冬关于前端的九个问题,细细想来我也只是对第一、二、九问有所了解,正好也趁着这个机会梳理一下自己的知识体系。由于本人对http协议以及dns对url的解析问题并不了解,所以这里之探讨url请求加载到浏览器端时,浏览器对html的解析到呈现过程,后来经过几位道友分享,整理了一下url解析的过程,如下:
用户输入url地址,浏览器根据域名寻找IP地址
浏览器向服务器发送http请求,如果服务器段返回以301之类的重定向,浏览器根据相应头中的location再次发送请求
服务器端接受请求,处理请求生成html代码,返回给浏览器,这时的html页面代码可能是经过压缩的
浏览器接收服务器响应结果,如果有压缩则首先进行解压处理,紧接着就是页面解析渲染
解析渲染该过程主要分为以下步骤:
解析HTML
构建DOM树
DOM树与CSS样式进行附着构造呈现树
布局
绘制
解析与构建DOM树
前两步我们放在一起讨论,浏览器的实际工作也是将他们放在一起进行的。对于HTML浏览器有专门的html解析器来解析HTML,并在解析的过程中构建DOM树。在这里我们讨论两种DOM元素的解析,即样式(link、style)与脚本文件(script)。由于浏览器采用自上而下的方式解析,在遇到这两种元素时都会阻塞浏览器的解析,直到外部资源加载并解析或执行完毕后才会继续向下解析html。对于样式与脚本的先后顺序同样也会影响到浏览器的解析过程,究其原因主要在于:script脚本执行过程中可能会修改html界面(如document.write函数);DOM节点的CSS样式会影响js的执行结果。在我的测试中得到以下四条结论:
1)外部样式会阻塞后续脚本执行,直到外部样式加载并解析完毕。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
<link href="http://udacity-crp.herokuapp.com/style.css?rtt=2" rel="stylesheet">
</head>
<body>
<span id="result"></span>
</body>
</html>
复制代码
View Code
2)外部样式不会阻塞后续外部脚本的加载,但会阻塞外部脚本的执行。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
<link href="http://udacity-crp.herokuapp.com/style.css?rtt=2" rel="stylesheet">
</head>
<body>
test
</body>
</html>
复制代码
主页代码
var loadTime = document.createElement('div');
loadTime.innerText = document.currentScript.src + ' executed @ ' + window.performance.now();
loadTime.style.color = 'blue';
document.body.appendChild(loadTime);
复制代码
外部脚本 从瀑布图中我们可以看到,外部脚本与外部样式是并行加载,但直到外部样式加载完毕,外部脚本才开始执行
3)如果后续外部脚本含有async属性(IE下为defer),则外部样式不会阻塞该脚本的加载与执行
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
<link href="http://udacity-crp.herokuapp.com/style.css?rtt=2" rel="stylesheet">
</head>
<body>
test
</body>
</html>
复制代码
View Code 从瀑布图中可以看到外部脚本的加载与执行并不受link的阻塞
4)对于动态创建的link标签不会阻塞其后动态创建的script的加载与执行,不管script标签是否具有async属性,但对于其他非动态创建的script,以上三条结论仍适用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
test
</body>
</html>
复制代码
View Code 这是最终页面结构
通过瀑布图与页面结果可以看到动态创建的外部脚本并未受link的阻塞。
link或style标签都会被解析成DOM节点。浏览器对于样式表还会生成CSSStyleSheet对象(C++代码),他集成子CSSStyle,指标是样式表对象而不管该对象来自于Style还是link。该对象主要包含以下几个重要属性和方法
CSSRules 即css样式代码
type 表示样式表类型的字符串。对CSS样式表而言,这个字符串是“type/css”。
href 通过link生成的为样式链接,否则为undefined
insertRule(rule,index):向cssRules集合中指定的位置插入rule字符串。IE不支持这个方法,但支持一个类似的addRule()方法。
deleteRule(index):删除cssRules集合中指定的位置的规则。IE不支持这个方法,但支持一个类似的removeRule()方法。
文档中对于所有的样式表集合可以通过document.styleSheets来访问。同时对于style或link DOM元素可以通过element.sheet来访问CSSStyleSheet对象,IE中则通过element.styleSheet来访问。
html解析完毕,DOM树创建完成后DOMContentLoaded事件即触发,这时候可以用过script来操作DOM节点。
构建呈现树
HTML解析完毕后,开始构建呈现树RenderTree,这一步的主要工作在于将css样式应用到DOM节点上,WebKit内核将这一过程称为附着,其他浏览器有不同的概念。对前端工程师而言这个过程会涉及到CSS层叠问题。
首先将根据样式重要性排序,由低到高依次为:
浏览器声明
用户普通声明
作者普通声明
作者重要声明
用户重要声明
对于同一重要级别,则是根据CSS选择符的特指度来判定优先级;一条样式声明的特指度由以下四个部分决定:S-I-C-E
声明来自内联的style属性则 S+1;
声明中含有id属性则 I+1;
声明中含有类、伪类、属性选择器则 C+1;
生命中含有元素、伪元素选择器则 E+1;
特指度的比较类似于两个字符串之间比较大小。
呈现树的每一个节点即为与其相对应的DOM节点的CSS框,框的类型与DOM节点的display属性有关,block元素生成block框,inline元素生成inline框。每一个呈现树节点都有与之相对应的DOM节点,但DOM节点不一定有与之相对应的呈现树节点,比如display属性为none的DOM节点,而且呈现树节点在呈现树中的位置与他们在DOM树中的位置不一定相同,比如float与绝对定位元素。
下图为呈现树与其相对应的DOM树节点
布局
呈现树构造完成后浏览器便进行布局处理,及计算每个呈现树节点的大小和位置信息。有道友可能要问,前面已将样式附着到DOM节点上,不是已经有了样式信息为何还要计算大小。这里可以这样理解,以上包含大小的样式信息只是存在内存里,并没有实际使用,浏览器要根据窗口的实际大小来处理呈现树节点的实际显示大小和位置,比如对于margin为auto的处理。
布局是一个递归过程,从跟呈现节点开始,递归遍历子节点,计算集合几何信息。具体过程还是比较复杂偶也不甚了解,道友们还是查阅其他资料吧。
绘制
布局完成后,便是将呈现树绘制出来显示在屏幕上。对于每一个呈现树节点来说,主要绘制顺序如下:
背景颜色
背景图片
边框
子呈现树节点
轮廓
参考资料:
http://velocity.oreilly.com.cn/2010/ppts/limufromTaobao.pdf
http://lifesinger.wordpress.com/
http://hikejun.com/blog/2012/02/02/js%E5%92%8Ccss%E7%9A%84%E9%A1%BA%E5%BA%8F%E5%85%B3%E7%B3%BB/
http://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/
http://www.2cto.com/kf/201406/305852.html
http://www.w3cmm.com/dom/document-stylesheets-getstylesheet.html
http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html
文章有错误之处欢迎各位道友不吝指正
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回车
发生了
过程中
这个
网页
相关帖子
PWA(渐进式网页应用)详解和应用场景(AI)
代码检查过程中为什么需要涉及到编译呢?
基于selenium的网页自动搜索
品牌故事不会写?这个AI指令可能帮你解决大问题
使用Codebuddy无码开发网页小工具并一句话自动部署到Lighthouse服务器
技术人被要求写活动策划案?这个AI指令帮你搞定
直播带货话术不会写?这个AI指令帮你搞定
网页端3D编程小实验-一种即时战略游戏的编程原型
网页版RStudio跑Harmony总报错?可能是这个原因导致的
【网页编写的编辑器对比】HBuilder / VS Code / Notepad++ / WebStorm
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
PWA(渐进式网页应用)详解和应用场景(AI)
3
362
醋辛
2025-10-10
安全
代码检查过程中为什么需要涉及到编译呢?
7
809
印萍
2025-10-10
安全
基于selenium的网页自动搜索
3
388
姚梨素
2025-10-11
安全
品牌故事不会写?这个AI指令可能帮你解决大问题
2
858
东门芳洲
2025-10-26
安全
使用Codebuddy无码开发网页小工具并一句话自动部署到Lighthouse服务器
1
522
庞环
2025-10-28
安全
技术人被要求写活动策划案?这个AI指令帮你搞定
3
118
诉称
2025-11-01
安全
直播带货话术不会写?这个AI指令帮你搞定
2
362
距佰溘
2025-11-04
安全
网页端3D编程小实验-一种即时战略游戏的编程原型
2
45
唐茗
2025-11-12
安全
网页版RStudio跑Harmony总报错?可能是这个原因导致的
3
998
訾颀秀
2025-11-24
业界
【网页编写的编辑器对比】HBuilder / VS Code / Notepad++ / WebStorm
0
982
人弧
2025-12-18
回复
(1)
颐港
2025-10-17 22:15:08
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
毁抨句
2025-10-17 22:15:08
关注
0
粉丝关注
20
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845358
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9981
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9949
查看更多
今日好文热榜
630
Spring+MyBatis环境下SqlSession管理机制详
928
Lit 架构解析:从 Web Components 到 lit-h
316
AI生成UI界面工具测评:8款主流设计工具的
31
JAVA 使用国密 SM4 加解密
151
Minio开始收费了?别慌,这5种免费的分布式
26
vue 甘特图 vxe-gantt 手动增加一条依赖线
640
荣耀再续 | 蚁景科技卫冕第138届广交会测试
103
荣耀再续 | 蚁景科技卫冕第138届广交会测试
933
上周热点回顾(12.15-12.21)
831
国产化Word处理组件Spire.DOC教程:通过Pyt
475
架构师必备:后端程序员需要了解的数仓知识
325
【GitHub每日速递 20251222】Paru:功能爆
961
企业级多智能体系统(MAS)架构深度研究:C
197
北京守嘉陪诊登顶2025年度陪诊行业排行 专
235
流量暴跌 96%:AI 聊天机器人正在构建危险
176
AI生成论文查重能过么?8款AI写论文软件测
511
懒人长期理财的投资系统
508
第40次CCFCSP认证邮寄
868
第40次CCFCSP认证邮寄
854
第40次CCFCSP认证邮寄