一个网站在浏览器端是如何渲染的?

一、html 页面加载渲染的过程。

请求回来最先应该是HTML,从一个字节流转换成字符流,浏览器拿到字符流,然后浏览器端进行相应的词法分析成相应的token,然后不断的通过next-token添加到DOM树中。然后有一些Link标签,浏览器并发的去请求一些CSS资源,被解析成CSSOM树,与DOM相结合生成渲染树。

梳理:浏览器中输入网址,到对应的IP服务器去请求资源,返回一个HTML文档,这个文档被浏览器中的HTML解析器进行解析,通过词法分析,将这些tag,分析成不同的相应的token,从HTML文档依次从上到下解析我们的token,当遇到Link这种标签,浏览器会进一步的发送请求去服务器获取CSS、js等外部资源。对于JavaScript外部资源,会交给浏览器内核中的v8的JavaScript执行引擎去执行。CSS资源请求回来就会去生成相应的CSS树。在请求回来css生成css树之前尼,其实即使DOM树已经解析完毕了,也不会去进行渲染,渲染的条件是CSS树和DOM树都生成后进行合并生成renderTree,进一步的进行布局和绘制。

二、HTML渲染过程的一些特点

  • 顺序执行、并发加载。(HTML会引入css,js外部资源,这些是并发加载的,但是并发加载是由限制数目的上线,因此设置3到4个CDN域名,防止一个CDN域名达到上线,无法并发请求多个资源)
  • 是否阻塞。(某个资源的加载是否会阻塞其他资源的加载,CSS加载是否会阻塞js的加载等,)
  • 依赖关系。(css代码在哪里引入,有的时候会出现没有样式,突然闪动出现样式,如果将css在header中引入,就不会出现,还有js引入,用了async之后异步加载,其实是放弃了依赖关系,谁先执行完加载谁)
  • 引入方式。(script中的src引入会有会有阻塞的问题,考虑使用defer,async标签。动态资源加载)

2.1 顺序执行、并发加载

  • 词法分析:浏览器对HTML文档进行分析的一个方式
  • 并发加载:HTML中引入的资源是并发加载的
  • 并发上限:某个域名的请求资源是由并发上线的

2.2 css阻塞

  • css head中Link标签引入,可以解决页面的渲染闪动
  • css阻塞js的执行(js可以动态的去修改DOM树因此在js修改DOM树的时候得保证,css树已经加载完成了,这样js才可以去修改)
  • css不阻塞外部脚本的加载(webkit有一个预先扫描器,对后面需要的资源都会发送请求去加载)

2.3 JS阻塞

  • 直接引入的js阻塞页面的渲染(直接通过script中的src引入,没有defer和asyn属性,理解:js代码可能调用document.write动态的修改文档的结构,会影响后面文档的渲染和分析,HTMLparser文档结构的分析和渲染要等到js的执行)
  • js不阻塞资源的加载(因为webkit增加了预先扫描器去扫描后面的词语,当扫描到后面link标签引用外部资源的时候,就会发送请求去加载后续资源)
  • js顺序执行,阻塞后续js逻辑的执行(比如引入10个js脚本,会顺序执行,并阻塞后面js的执行)

三、css 和 js 的装载与执行的更多相关文章

  1. 【转】html、css、js文件加载顺序及执行情况

    原链接:http://www.cnblogs.com/Walker-lyl/p/5262075.html 今天看书,看到html,css,js加载执行情况,发现自己并不是真正的了解,网上搜了半小时依然 ...

  2. 【转载】IIS7.5(经典模式)访问静态资源(.css和.js文件)提示:未能执行 URL

    IIS7.5(经典模式)静态资源(.css和.js文件)提示:未能执行 URL “/”应用程序中的服务器错误. 未能执行 URL. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪 ...

  3. html、css、js文件加载顺序及执行情况

      HTML页面加载和解析流程 1. 用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件. 2. 浏览器开始载入html代码,发现<head& ...

  4. 前端性能优化 css和js的加载与执行

    一个网站在浏览器端是如何进行渲染的? html本身首先会被渲染成 DOM 树,实际上 html 是最先通过网址请求过来的,请求过来之后,html 本身会由一个字节流转化成一个字符流,浏览器端拿的就是字 ...

  5. 性能优化-css,js的加载与执行

    前端性能优化 css,js的加载与执行 javascript是单线程的 一个网站在浏览器是如何进行渲染的呢? html页面加载渲染的过程 html渲染过程的一些特点 顺序执行,并发加载 词法分析 并发 ...

  6. Javascript 装载和执行(copy的感觉有很多错误。。)

    copy from:http://coolshell.cn/articles/9749.html 首先,我想说一下Javascript的装载和执行.通常来说,浏览器对于Javascript的运行有两大 ...

  7. javascript的装载和执行

    前言 为什么要采用js来create一个script标签,设置src然后append到head中,而不是直接使用script标签,这样不是更简单点吗? javascript的装载和执行 首先,我想说一 ...

  8. grunt自定义任务——合并压缩css和js

    npm文档:www.npmjs.com grunt基础教程:http://www.gruntjs.net/docs/getting-started/ http://www.w3cplus.com/to ...

  9. JS的解析与执行过程

    JS的解析与执行过程 全局中的解析和执行过程 预处理:创建一个词法环境(LexicalEnvironment,在后面简写为LE),扫描JS中的用声明的方式声明的函数,用var定义的变量并将它们加到预处 ...

随机推荐

  1. 第七篇 elasticsearch 链接mysql不会更新

    这是我键的索引 "settings":{ "number_of_shards":3, "number_of_replicas":2 }, & ...

  2. sell02 展现层编写

    # API ###商品列表 ``` GET /sell/buyer/product/list ``` 参数 ``` 无 ``` 返回 ``` { "code": 0, " ...

  3. ObservableCollection 分组后排序报错问题

    ObservableCollection通过Move方法可以移动顺序,如下: 将ObservableCollection中的一个item置顶: private ObservableCollection ...

  4. 14、/proc/cpuinfo 文件(查看CPU信息)

    转载http://www.cnblogs.com/itcomputer/p/4888438.html /proc/cpuinfo文件分析 根据以下内容,我们则可以很方便的知道当前系统关于CPU.CPU ...

  5. 文件格式——fastq格式

    fastQ格式 FASTQ是一种存储了生物序列(通常是核酸序列)以及相应的质量评价的文本格式. 他们都是以ASCII编码的.现在几乎是高通量测序的标准格式.NCBI Short Read Archiv ...

  6. win7 64位安装nokia 920驱动

    折腾了很长时间,终于安装成功,先将一些步骤记下来,此方法适用于哪些网上常规方法无法安装驱动的: 需要注意920不要连到电脑上的USB3.0接口,相关文件下载地址:http://pan.baidu.co ...

  7. HTML5秘籍(第2版) 中文pdf扫描版

      HTML5秘籍(第2版)共包括四个部分,共13章.第一部分介绍了HTML5的发展历程,用语义元素构造网页,编写更有意义的标记,以及构建更好的Web表单.第二部分介绍了HTML5中的音频与视频.CS ...

  8. EIP权限工作流平台总结-2前端框架

      1.预览地址:www.eipflow.com (1) 权限工作流:www.demo.eipflow.com/Account/Login (2) 基础权限版:www.auth.eipflow.com ...

  9. 业务、数据记录——ThreadPool.QueueUserWorkItem及Redis的实现

    业务描述 当用户执行完业务操作,或者数据操作后,讲业务记录/数据追踪插入到Redis中.ThreadPool.QueueUserWorkItem定时检查队列并将上述数据插入到数据库中持久化. 实现流程 ...

  10. 2018杭电多校第五场1002(暴力DFS【数位】,剪枝)

    //never use translation#include<bits/stdc++.h>using namespace std;int k;char a[20];//储存每个数的数值i ...