`

[转]浏览器加载和渲染html的顺序

阅读更多

浏览器加载和渲染html的顺序 
http://renyongjie668.blog.163.com/blog/static/1600531201097062789/ 

前阵子,在组内给大家做了一次关于“浏览器加载和渲染HTML的顺序”的分享,这里再总结一下吧。 
1.浏览器加载和渲染html的顺序 
1、IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的。 
2、在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完) 
3、如果遇到语义解释性的标签嵌入文件(JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载。 
4、并且在下载后进行解析,解析过程中,停止页面所有往下元素的下载。阻塞加载 
5、样式表在下载完成后,将和以前下载的所有样式表一起进行解析,解析完成后,将对此前所有元素(含以前已经渲染的)重新进行渲染。 
6、JS、CSS中如有重定义,后定义函数将覆盖前定义函数 

2. JS的加载 
2.1 不能并行下载和解析(阻塞下载) 
2.2 当引用了JS的时候,浏览器发送1个js request就会一直等待该request的返回。因为浏览器需要1个稳定的DOM树结构,而JS中很有可能有代码直接改变了DOM树结构,比如使用 document.write 或 appendChild,甚至是直接使用的location.href进行跳转,浏览器为了防止出现JS修改DOM树,需要重新构建DOM树的情况,所以 就会阻塞其他的下载和呈现. 

3.如何加快HTML页面加载速度 
1,页面减肥 
页面的肥瘦是影响加载速度最重要的因素 
删除不必要的空格、注释 
将inline的script和css移到外部文件 
可以使用HTML Tidy来给HTML减肥,还可以使用一些压缩工具来给JavaScript减肥 
2,减少文件数量 
减少页面上引用的文件数量可以减少HTTP连接数 
许多JavaScript、CSS文件可以合并最好合并,人家财帮子都把自己的JavaScript. functions和Prototype.js合并到一个base.js文件里去了 
3,减少域名查询 
DNS查询和解析域名也是消耗时间的,所以要减少对外部JavaScript、CSS、图片等资源的引用,不同域名的使用越少越好 
4,缓存重用数据 
使用缓存吧 
5,优化页面元素加载顺序 
首先加载页面最初显示的内容和与之相关的JavaScript和CSS 
然后加载DHTML相关的东西 
像什么不是最初显示相关的图片、flash、视频等很肥的资源就最后加载 
6,减少inline JavaScript的数量 
浏览器parser会假设inline JavaScript会改变页面结构,所以使用inline JavaScript开销较大 
不要使用document.write()这种输出内容的方法,使用现代W3C DOM方法来为现代浏览器处理页面内容 
7,使用现代CSS和合法的标签 
使用现代CSS来减少标签和图像,例如使用现代CSS+文字完全可以替代一些只有文字的图片 
使用合法的标签避免浏览器解析HTML时做“error correction”等操作,还可以被HTML Tidy来给HTML减肥 
8,Chunk your content 
不要使用嵌套tables 

<table> 
  <table> 
    <table> 
      .. 
    <table> 
  <table> 
<table> 


<table> 
  <table> 
    <table> 
      .. 
    <table> 
  <table> 
<table> 
而使用非嵌套tables或者divs 

<table>...</table> 
<table>...</table> 
<table>...</table> 


<table>...</table> 
<table>...</table> 
<table>...</table> 
将基于大块嵌套的tables的layout分解成小tables,这样显示时不用加载整个页面(或大table)的内容 
9,指定图像和tables的大小 
如果浏览器可以立即决定图像或tables的大小,那么它就可以马上显示页面而不要重新做一些布局安排的工作 
这不仅加快了页面的显示,也预防了页面完成加载后布局的一些不当的改变 
image使用height和width 
table使用table-layout: fixed并使用col和colgroup标签指定columns的width 
10,根据用户浏览器明智的选择策略 
IE、Firefox、Safari等等等等 
11,页面结构的例子 
· HTML 

    · HEAD 

        · LINK ... 
        CSS files required for page appearance. Minimize the number of files for performance while keeping unrelated CSS in separate files for maintenance. 

        · SCRIPT. ... 
        JavaScript. files for functions required during the loading of the page, but not any DHTML that can only run after page loads. 
        Minimize the number of files for performance while keeping unrelated JavaScript. in separate files for maintenance. 

    · BODY 
    · User visible page content in small chunks (tables / divs) that can be displayed without waiting for the full page to download. 

        · SCRIPT. ... 
        Any scripts which will be used to perform. DHTML. DHTML script. typically can only run after the page has completely loaded and all necessary objects have been initialized. There is no need to load these scripts before the page content. That only slows down the initial appearance of the page load. 
        Minimize the number of files for performance while keeping unrelated JavaScript. in separate files for maintenance. 
        If any images are used for rollover effects, you should preload them here after the page content has downloaded. 





4.HTML页面加载和解析流程 
1.用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件; 
2.浏览器开始载入html代码,发现<head>标签内有一个<link>标签引用外部CSS文件; 
3.浏览器又发出CSS文件的请求,服务器返回这个CSS文件; 
4.浏览器继续载入html中<body>部分的代码,并且CSS文件已经拿到手了,可以开始渲染页面了; 
5.浏览器在代码中发现一个<img>标签引用了一张图片,向服务器发出请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码; 
6.服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此浏览器需要回过头来重新渲染这部分代码; 
7.浏览器发现了一个包含一行Javascript代码的<script>标签,赶快运行它; 
8.Javascript脚本执行了这条语句,它命令浏览器隐藏掉代码中的某个<div> (style.display=”none”)。杯具啊,突然就少了这么一个元素,浏览器不得不重新渲染这部分代码; 
9.终于等到了</html>的到来,浏览器泪流满面…… 
10.等等,还没完,用户点了一下界面中的“换肤”按钮,Javascript让浏览器换了一下<link>标签的CSS路径; 
11.浏览器召集了在座的各位<div><span><ul><li>们,“大伙儿收拾收拾行李,咱得重新来过……”,浏览器向服务器请求了新的CSS文件,重新渲染页面。 


5.Yahoo对网页设计性能的建议,个人感觉是说得非常好的。 
  英文版:http://developer.yahoo.com/performance/rules.html 
  中文翻译:http://www.cnblogs.com/smjack/archive/2009/02/24/1396895.html 

参考资料: 
http://hideto.javaeye.com/blog/133384 
http://blog.chinaacc.com/liuzhantao/blog/20100430-3015241029081.html

分享到:
评论

相关推荐

    静态HTML页面加载和解析

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

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

    对于渲染,利用 Fiddler 将网速调慢,可以看到 css 下载后会马上渲染到页面,渲染和下载同步进行。js 的解析和运行,也类似。 对于 js 运行,以及页面加载相关事件的触发,特别做了测试。在 Firefox 下,打开测试...

    探析浏览器执行JavaScript脚本加载与代码执行顺序

    JavaScript在浏览器中被解析和执行时具有阻塞的特性,也就是说,当JavaScript代码执行时,页面的解析、渲染以及其他资源的下载都要停下来等待脚本执行完毕①。这一点是没有争议的,并且在所有浏览器中的行为都是一致...

    HTML页面加载和解析流程详细介绍

    浏览器加载和渲染html的顺序 1. IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的。 2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载...

    压测性能测试培训(2022-02-16 性能测试培训) 压缩文件包含 【JMeter基础培训、WEB网站优化、性能测试知识分享】

    浏览器加载和渲染顺序 HTML页面加载和解析流程 减少 HTTP 的请求数 添加Cache缓存 减少域名查询 网站图片的合并压缩 压缩css和js代码 去除页面中没有用到的CSS 优化页面元素加载顺序 避免使用css表达式 CSS和JS在...

    高性能的javascript之加载顺序与执行原理篇

    javascript在浏览器中的性能,可以认为是开发者所面临的最严重的可用性问题,今天,自己看完高性能的javascript的加载和执行这一章,聊聊怎么解决js的加载顺序和执行的原理,下面话不多说了,来一起看看详细的介绍:...

    浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入

    总的来看,这两种方法都能达到脚本加载不影响页面解析和渲染的作用,但是在不同的浏览器中,这两种技术所创建的脚本的执行时机还是有一定差异,今天我们再来探讨一下通过动态脚本技术和Ajax注入的脚本在这些方面的...

    JavaScript无阻塞加载和defer、async详解

    把js放在head里,浏览器是怎么去执行它的呢,是按顺序加载还是并行加载呢?在旧的浏览器下,都是按照先后顺序来加载的,这就保证了加载的js依赖不会发生问题。但是少部分新的浏览器已经开始允许并行加载js了,也就是...

    前端之前沿优化解决方案

    Flexbox布局提供了高渲染性能,容器可以决定子元素的大小、顺序、对齐方式和间隔,支持双向布局。 Preload和Prefetch: Preload 用于提前加载对当前页面重要的资源。 Prefetch 用于提前加载后续页面或路由所需的资源...

    为什么我们不建议用Table布局

    Tablle会阻挡浏览器渲染引擎的渲染顺序。 (会延迟页面的生成速度,让用户等待更久的时间。) Table里显示图片时需要你把单个、有逻辑性的图片切成多个图。 (增加设计的复杂度,增加页面加载时间,增加HTTP会话数。) ...

    SharpMap项目简单运用——mapViewer地图浏览器

    我学习时候用sharpmap开源代码写的一个小项目...存在一些BUG,比如地图打开先后顺序,渲染覆盖,重复打开同一个文件报BUG等问题。由于就是用来学习的小项目,没往深里面做。 希望可以对学习sharpmap的人有提示作用把。

    jQuery中借助deferred来请求及判断AJAX加载的实例讲解

    ajax请求异步队列加载 我们在开发程序的时候通常会碰到使用ajax加载数据显示到列表的情况。ajax默认使用异步加载...那么我们要怎么实现顺序加载而不引起该问题呢? 示例代码一: &lt;script src="http://libs.b

    front-end-world

    前端的世界 提供前端入门的知识框架,由前端进击团队开发。 该项目使用开源的方式一起...浏览器加载顺序 浏览器渲染过程 浏览器EventLoop 浏览器同源策略 跨域方案/ CORS 浏览器缓存 常见调试技巧 HTTP / Ajax HTTP请

    WordPress博客主题 Beginning(更新至 4.1.1 版本)

    全站 AJAX 加载,即使是 AJAX 加载也能使用浏览器的前进和后退功能;在不支持 JavaScript 的情况下依然可以通过普通的加载方式正常浏览网站;AJAX 加载时可以显示进度条 响应式设计,移动端完全重新设计,模仿 iOS ...

    P13_Blazor项目模板讲解ThreeBlazor2020_1_11.rar

    Blazor应用程序由使用C#,HTML和CSS实现的可重用Web UI组件组成。客户端和服务器代码都是用C#编写的,允许您共享代码和库。 在WebAssembly或服务器上运行 Blazor可以使用WebAssembly直接在浏览器中运行客户端C#...

    grid:一个性能不错的javascript网格的多种功能

    支持列渲染(图片,按钮,连接和自定义渲染),列样式渲染 支持单元格渲染,单元格样式渲染 支持行样式渲染 支持响应式的分页 支持追加、删除和修改数据 支持固定宽高和宽高自适应 支持固定列宽和列宽自适应 支持...

    JavaScript计划任务后台运行的方法

    想象一下,你的浏览器里住着一个魔法小精灵,负责浏览器的正常运转。不论渲染 HTML,响应菜单命令,屏幕渲染,处理鼠标点击,或者执行 JavaScript 函数,所有事情都归一个小精灵处理。它哪忙得过来,一次只能处理一...

    基于Require.js使用方法(总结)

    首先一个页面如果在加载多个js文件的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长;其次,由于js文件之间存在依赖关系,因此必须严格保证加载顺序,当依赖关系很复杂的时候,代码的编写和...

    learn-notes:学习笔记

    vue 父子组件的生命周期渲染顺序 vue组件通信 React React 生命周期的理解 React 代理 小程序 小程序内嵌html-分享注意事项 小程序分包预加载和分包 微信小程序添加外部字体 微信小程序遇到的兼容问题(时间) 前端...

Global site tag (gtag.js) - Google Analytics