`
ariyue
  • 浏览: 338634 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

浏览器加载和渲染网页的过程

阅读更多
     关于网页加载和渲染的过程,在网络上的讨论并不多。可能是因为这个过程比较复杂,而且浏览器执行的速度太快,目前还没有发现什么比较好的工具可以清楚的看到浏览器解析网页的每一个过程。通过firedug和httpWatch可以看到浏览器的http请求,但是对于浏览器如何paint和flow处理html元素,我们仍然是不得而知。“flow”这个词借鉴于reflow,表示浏览器第一次加载网页的过程。在网络上搜索了一下,学习如下。



关于浏览器加载网页过程的有趣视频


       可以参见:http://www.aoao.org.cn/blog/2008/05/reflow/ (形象化的reflow)。这个视频展现了网页加载的过程,看着比较有趣。要是可以更加形象化,就更好了,可以帮助我们书写更好的提高网页加载速度的代码。



浏览器内核


       不同的浏览器内核,对于网页的解析过程肯定也不尽相同。http://www.mac52ipod.cn/post/Trident-Gecko-WebKit-Presto.php 一文对各种浏览器的页面渲染引擎进行了简介。目前主要有基于

(1)Trident页面渲染引擎 –> IE系列浏览器;

(2)Gecko页面渲染引擎 –> Mozilla Firefox;

(3)KHTML页面渲染引擎或WebKit框架 –> Safafi和Google Chrome;

(4)Presto页面渲染引擎 –> Opera

       详细的介绍可以参见原文。



浏览器解析网页的过程


       http://hi.baidu.com/seosky/blog/item/78d3394c130f86ffd72afc56.html 浏览器加载和渲染原理分析一文中通过一定的方法,推断了浏览器加载解析网页的顺序大致如下:

1. IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的;

2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完);

3. 在下载过程中,如果遇到某一标签是嵌入文件,并且文件是具有语义解释性的(例如:JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载,并且在下载后进行解析,解析(JS、CSS中如有重定义,后定义函数将覆盖前定义函数)过程中,停止页面所有往下元素的下载;

4. 样式表文件比较特殊,在其下载完成后,将和以前下载的所有样式表一起进行解析,解析完成后,将对此前所有元素(含以前已经渲染的)重新进行样式渲染。并以此方式一直渲染下去,直到整个页面渲染完成。

       当然这是一个推断的过程。



借助Google PageSpeed和Yahoo YSlow分析网页加载


       通过这两个工具,测试网页加载过程,可以得到一些提高网页加载速度的建议。使用Google PageSpeed对Google首页进行分析,可以得到建议:

(1)压缩javascript和CSS;

(2)合并外部javascript和CSS;

(3)减少DNS寻址时间;这条与将图片分散到不同的域名存储这条折中处理;

(4)使用缓存;

(5)尽量避免CSS表达式;

(6)为图片增加宽度和高度属性;

(7)将css放在网页头部,合理放置js的位置。

       同时,利用YSlow对google首页进行分析,我们也可以得到一些改进的建议。这些建议差不太多,就不在详细说明。

       合理使用这两个工具,优化我们的网页,提高网页加载速度,增强用户体验。



---------------------------



我自己的误解

       过去一直以为,一个容器如果没有读到自己的结束标签,那么这个容器就不会在浏览器中显示出来。今天测试了下,却发现浏览器在读到一个容器的开始标签的时候,就可以显示该容器了。关于浏览器如何一个一个的paint HTML中的元素,如果flow它们,这个过程还需要进一步了解。当然,也可以不管过程,只看加载的结果,通过pagespeed和Yslow来优化自己的网页。个人在做布局的时候,还是会秉承一条原则:尽量让一个父容器小一些!



参考文献


[1] 形象化的reflow. http://www.aoao.org.cn/blog/2008/05/reflow/ . 2009-7-20

[2] 各种浏览器的页面渲染引擎简介. http://www.mac52ipod.cn/post/Trident-Gecko-WebKit-Presto.php. 2009-7-20

[3] 浏览器加载和渲染原理分析. http://hi.baidu.com/seosky/blog/item/78d3394c130f86ffd72afc56.html. 2009-7-20
分享到:
评论

相关推荐

    浏览器渲染过程及优化策略

    浏览器渲染过程是一个复杂的过程,它涉及到多个进程和线程的协作。为了确保浏览器的稳定性和安全性,浏览器采取了多进程模型。每个进程都有其自己的内存空间,每个线程都是进程的一部分,并且共享同一个进程的内存...

    浏览器加载、渲染和解析过程黑箱简析

    浏览器加载、渲染和解析过程的黑箱分析,对于渲染,利用 Fiddler 将网速调慢,可以看到 css 下载后会马上渲染到页面,渲染和下载同步进行,需要的朋友可以参考下

    浅析浏览器解析和渲染.pptx

    各浏览器加载策略,ie6/7/8/9,firefox,chrom.同步模型,JS阻塞,JS执行策略 ,Inline Script,阻塞渲染,浏览器的优化

    浏览器性能优化-渲染性能1

    浏览器性能优化-渲染性能1 ...浏览器渲染性能优化是指为了提高浏览器的加载速度和响应能力所采取的一系列优化措施。其中,渲染树、CSS 动画和过渡、JavaScript 动画、JQuery 动画等都是浏览器渲染性能优化的重要部分。

    gengarneko#Notes#浏览器的渲染:过程与原理1

    浏览器渲染页面的过程从耗时的角度,浏览器请求、加载、渲染一个页面,时间都花在以下五件事上:HTTP 请求及响应服务器响应客户端响应本文着重讨论第五部分,也就是浏

    5一面 5:浏览器相关知识点与高频考题解析.md

    - 浏览器加载页面和渲染过程 - 性能优化 - Web 安全 本小节会从浏览器的加载过程开始讲解,然后介绍如何进行性能优化,最后介绍下 Web 开发中常见的安全问题和预防。 ----- ## 加载页面和渲染过程 可将加载过程...

    用于切换CSS功能的devtools扩展以后开发人员查看页面应用在浏览器中的渲染方式

    用于切换CSS功能的devtools扩展,以后开发人员查看页面/应用在浏览器中的渲染方式

    Python爬虫代码,用于处理带有动态加载内容的网页,其中使用了Requests、Selenium和BeautifulSoup

    这个示例代码中,我们使用Selenium库创建一个浏览器驱动,并使用驱动的get()方法加载目标网页的URL。 然后,我们使用time.sleep()方法等待页面加载完成,确保JavaScript渲染完成。 接下来,我们将渲染后的网页内容...

    在浏览器加载CSS 时防止影响页面渲染的方法

    主要介绍了在浏览器加载CSS 时防止影响页面渲染的方法,其中以非阻塞CSS加载字体的技术为重点讲解,,需要的朋友可以参考下

    利用VisualBasic6-0精简版编写网页浏览器方法.pdf

    5. 实现页面加载功能:实现网页浏览器的页面加载功能,包括页面渲染和事件处理。 知识点4:使用MSHTML控件 MSHTML控件是Visual Basic 6.0中用于显示网页内容的控件。它提供了丰富的API,用于控制网页的显示和交互...

    React框架拥有服务器渲染实现快速的页面加载和在浏览器中页面之间无缝转换

    React框架拥有服务器渲染实现快速的页面加载和在浏览器中页面之间无缝转换

    静态HTML页面加载和解析

    今天给大家分享一篇文章,关于静态HTML页面加载和解析的相关显示流程的。浏览器加载和渲染html的顺序。

    前端性能(加载、渲染)优化.zip

    加载指标:秒开率; 稳定性指标:资源错误,JS报错,Crash,内存堆栈,接口报错等; 操作体验指标:响应延迟,卡顿 ,滚动流畅性 ,TTI(可...加载链路的优化:从访问url到页面呈现,整个加载渲染链路可以做优化的思路。

    维文浏览器

    该款维文浏览器具备传统浏览器的所有功能。... 在浏览维吾尔文网页时,浏览器渲染和加载网页速度快,可与使用市场主流浏览器打开普通网页的速度想媲美。更多的发现等待您的体验,欢迎您的热情评价。

    浏览器缓存机制介绍与缓存策略剖析.pptx

    浏览器缓存机制是指浏览器在请求资源时,对已经请求过的资源进行缓存,以便下次请求时可以直接从缓存中获取,从而提高页面加载速度和减少服务器的压力。本文将详细介绍浏览器缓存机制的工作原理、 Memory Cache、...

    最好用的Unity内嵌浏览器插件 Embedded Browser Unity v3.1.0

    (1)可以将网页渲染到UI上 (2)支持CSS、HTML和JavaScript (3)可以用来Unity和JavaScript的通信 (4)可以控制网页的前进、退后、重新加载、控制缩放大小等 (5)支持Video、支持SVG (6)自定义鼠标样式 (7)...

    闪游浏览器2.5版本

    一、闪游浏览器2.50更新历史 新增:全新默认皮肤 新增:换肤功能(右上角的衣服按钮) 新增:离线登录功能(不联网也可本地登录并访问账户下的收藏夹等数据) 新增:把网页添加到桌面快捷方式(标签上右键) 新增:...

    搜狗浏览器4.0b

    高速内核也迎来较大升级,高速内核性能进一步增强,渲染能力、网页标准兼容性都有了大幅提升。 2. 皮肤:浏览器默认皮肤全新改版,界面更清爽、更现代。 3. 安装界面:重新设计了安装程序,安装界面简约时尚,并可一...

    Python爬虫谷歌Chrome F12抓包过程原理解析

    浏览器打开网页的过程就是爬虫获取数据的过程,两者是一样一样的。浏览器渲染的网页是丰富多彩的数据集合,而爬虫得到的是网页的源代码htm有时候,我们不能在网页的html代码里面找到想要的数据,但是浏览器打开的...

Global site tag (gtag.js) - Google Analytics