• 从输入URL到浏览页面的过程


    之前我们已经讨论过浏览器的渲染原理,今天我们来讨论下更广泛的从输入URL到渲染出页面的过程。

    1. 查询该URL是否有缓存

          如果有,则直接返回,没有的话,下一步

    2. 查询URL对应的IP

      首先,到 host 文件查找,如果找到则返回。

      如果没有找到,去访问 DNS 服务器(一般先访问本地路由器,没有再访问更高级的 DNS 服务器),最终得到对应的 IP

    3. 建立 TCP 连接

      首先,通过 IP 协议,指定 出发地 和 目的地

      然后,通过 OSPF 协议,计算路由的最佳路径,得到路过的每个路由器的 IP地址

      然后,再利用 ARP 计算出路径经过每个路由器的 MAC地址

      最后再利用我们熟悉的3次握手,建立连接

    4. 如果对方是Nginx服务器

      一般会做负载均衡,根据 url 重写转发到真实处理请求的服务器

    5. 根据HTTP状态码来执行对应行为

      如果 200 那就继续解析

      如果 300 的话会进行重定向

      如果 400 或 500 的话就会报错

    6. 如果返回来的是gzip格式(content-encoding: gzip content-type:text/html; charset=utf-8)

      浏览器会先解压。

    7. 接收 html 字节流

      首先,浏览器把接收到的一个个字节拼接成字符串

      然后,通过词法分析,把字符串转换为一个个 Token

      最后,根据 Token,通过语法分析,构建成 DOM 树

    8. 接收 css 字节流

      首先,浏览器把接收到的一个个字节拼接成字符串

      然后,通过词法分析,把字符串转换为一个个 Token

      最后,根据 Token,通过语法分析,构建成 CSSOM 树

    9. 结合 CSSOM 和 DOM,生成 Render Tree

    9. 遇到 script(有3种可能),如果有相关 DOM 操作,可以修改已构建部分的 DOM 树,从而改变 Render Tree

    11. 调用 GPU 绘制,合成图层,将内容显示在屏幕上

  • 相关阅读:
    spring mvc随便接收list<objeect>参数
    python django model类型摘要
    【Unity3D自我记录】解决NGUI通过问题触发事件点
    sqlcipher移植
    外键约束列并没有导致大量建筑指数library cache pin/library cache lock
    34一个美丽的生活窍门
    html表格合并(行,一排)
    01标题背包水章 HDU2955——Robberies
    苹果Swift编程语言新手教程【中国版】
    神经网络和BP算法推导
  • 原文地址:https://www.cnblogs.com/amiezhang/p/11450455.html
Copyright © 2020-2023  润新知