LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

输入网址之后,浏览器到底做了什么?专业且好懂的“全流程讲解”

admin
2025年12月12日 22:41 本文热度 49

导读

把一次打开网页,想象成一段从“找路—取件—装配—上屏—互动—安保—回访”的流水线。本文用专业但不艰涩的方式,带你顺着这条线走一遍:每一步在做什么、为什么重要、能带来怎样的直观感受,以及顺手可用的小技巧。末尾附有权威延伸阅读,均可查证。

一、路线图(从回车到首屏)

  • 找路和通道:DNS 把域名变成 IP,TLS 建安全通道,HTTP/2 或 HTTP/3 负责传输。
  • 分工与隔离:多进程架构把页面、网络、GPU 分到不同“岗位”,互不拖累。
  • 读图纸、备材料:解析 HTML/CSS 形成 DOM/CSSOM,并用预解析器提早下单关键资源。
  • 装配与上色:布局(Layout)测量位置尺寸,绘制(Paint)上色,再交由 GPU 合成(Compositing)。
  • 脚本与节奏:JavaScript 引擎执行代码,事件循环在一帧内协调渲染与输入;若目标是 60FPS,每帧只有约 16.67ms 预算。
  • 安全与围栏:同源策略、CORS、站点隔离与沙箱保障安全。
  • 回头客体验:HTTP 缓存、Service Worker 与 IndexedDB 让复访更快、离线可用。


二、关键机制拆解

1) 网络链路:DNS → TLS → HTTP/2/3

  • 在做什么:定位服务器、建立加密通道,用支持多路复用的协议并行传输资源。HTTP/3 基于 QUIC,更抗丢包、建连更快。
  • 举个栗子:像去餐厅——先找地址(DNS),过安检(TLS),再一次点多道菜并行上(HTTP/2/3)。
  • 你会感受到:首屏快或慢、弱网是否“抖但不断”,二次访问是否更快(命中缓存)。
  • 顺手优化:  
     [1] 提前连接:
    <link rel="preconnect" href="https://example.cdn"> 
    [2] 合理使用 preload/fetchpriority 提升关键资源优先级。

2) 多进程与站点隔离:稳定与安全的底座

    • 在做什么:Browser 进程管全局;每个站点/标签多为独立 Renderer 进程;GPUNetwork Service 各司其职;再配合操作系统级沙箱。
    • 打个比方:分仓运营,某个分仓出问题不致牵连全局。
    • 你会感受到:某页崩溃不影响其它页;恶意页面更难突破“围栏”。

    3) 解析与预加载:边读边搭骨架

    • 在做什么:HTML 构建 DOM,CSS 构建 CSSOM;两者合并为渲染树。预解析器会在解析过程中提前请求图片、样式等关键资源。
    • 举个栗子:工人一边搭骨架,一边让物流先把材料运到工地。
    • 你会感受到:白屏更短、首屏更快。
    • 顺手优化   
       [1] 关键 CSS 前置;阻塞性 JS 延后执行。   
       [2] 使用 preload 告诉浏览器“这个很要紧,请预先加载”。

    示例:

    <link rel="preload" href="/css/critical.css" as="style" onload="this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/css/critical.css"></noscript><script src="/js/app.js" defer></script>

    4) 渲染流水线:布局 → 绘制 → 合成

    • 在做什么:计算每个元素的几何信息(布局),绘制像素(绘制),将多个图层交给 GPU 合成(合成)。transform/opacity 可走合成级动画,避开昂贵的重排/重绘。
    • 举个栗子:先摆家具(布局),再上色(绘制),最后在舞台灯光下把布景叠起来(合成)。
    • 你会感受到:滚动是否“跟手”、动画是否流畅。
    • 顺手优化  
       [1] 优先用 transformopacity 做动画;必要时点到为止地用 will-change

    示例:

    .card { will-change: transform; }.card:hover { transformtranslateY(-4px); }

    5) JavaScript 与事件循环:别占满主线程

    • 在做什么:V8 等引擎 JIT 编译执行 JS,并进行 GC;事件循环在一帧内调度宏任务、微任务、样式计算、布局、绘制与输入。若目标 60FPS,每帧约 16.67ms,长任务会让页面掉帧卡顿。
    • 举个栗子:共享一个“出餐口”,JS 长时间占用,渲染与输入就只能排队。
    • 你会感受到:点击迟缓、动画卡顿、滚动不顺。
    • 顺手优化   - 将重计算放至 Web Worker;动画用 requestAnimationFrame;拆分长任务

    示例:

    // rAF 驱动动画function tick() { /* 只更新与 transform/opacity 相关的样式 */ requestAnimationFrame(tick); }requestAnimationFrame(tick);// 计算密集任务交给 Workerconst worker = new Worker('/heavy.js');worker.postMessage({ payload });worker.onmessage = ({ data }) => { /* 更新 UI */ };


    6) 安全模型:同源、CORS、Site Isolation

    • 在做什么:同源策略限制不同源间的读写;CORS 通过明确授权放行;站点隔离把不同站点放进不同进程并加沙箱。
    • 举个栗子:小区围栏 + 门禁系统 + 不同单元楼。
    • 你会感受到:有些“跨域”会被拦,但账号与数据更安全,问题页面也不易拖累其他标签。


    7) 缓存与离线:让“回头客”更快

    • 在做什么:依据 Cache-ControlETag 等规则命中 HTTP 缓存;Service Worker 可拦截请求、预缓存关键资源,配合 IndexedDB 管理更大数据。
    • 举个栗子:菜做成半成品,来就能热上桌;甚至停电(离线)也能端上基础套餐。
    • 你会感受到:二次访问“秒开”,地铁无网也能用部分功能。
    • 顺手优化:   
      [1] 正确设置缓存头;用 workbox 或手写 Service Worker 实现离线与预缓存。

    示例:

      <img src="/hero.jpg" fetchpriority="high" width="1200" height="600" alt="Hero"><img src="/gallery-1.jpg" loading="lazy" alt="Gallery">

      三、原理到体验:一张“映射表”

      四、常见误区与更好的做法

      • “把所有 JS 放头部更保险”:实际上同步脚本会阻塞解析与渲染。优先使用 defer 或按需异步加载。
      • “动画卡就加 will-change”:过度使用会增加内存与层开销。仅在动画开始前短暂启用。
      • “图片先上,样式慢慢来”:样式缺席会阻塞渲染树合并,引发抖动和重排。保证关键 CSS 可用、图片设定明确尺寸避免布局跳动。
      • “HTTP/2 万能并行,不用合并资源了”:虽不必盲目打包巨文件,但合理拆分与缓存仍重要;过多小文件在高延迟场景仍有成本。


      五、把原理“用起来”的“三步诀”

      • 看链路:DNS/TLS/协议与优先级,决定首屏速度。
      • 看流水线:尽量让变化发生在合成阶段,减少布局/重绘。
      • 看主线程:每帧预算约 16.67ms,避免长任务,输入与渲染就能“跟手”。

      六、延伸阅读(卷,就使劲卷)

      • inside look at modern web browsers(Chrome 官方)  
        - Part 1(多进程与导航):https://developer.chrome.com/blog/inside-browser-part1/   
        - Part 2(渲染管线):https://developer.chrome.com/blog/inside-browser-part2/   
        - Part 3(JS 与事件循环):https://developer.chrome.com/blog/inside-browser-part3/  
        - Part 4(数据存储):https://developer.chrome.com/blog/inside-browser-part4/
      • How browsers work(Tali Garsiel & Paul Irish):https://web.dev/howbrowserswork/
      • Critical Rendering Path:https://web.dev/critical-rendering-path/
      • RenderingNG(Chrome 渲染架构):https://developer.chrome.com/blog/renderingng/
      • Event Loop(MDN):https://developer.mozilla.org/docs/Web/JavaScript/Event_loop
      • HTTP 缓存(MDN):https://developer.mozilla.org/docs/Web/HTTP/Caching
      • Service Worker(MDN):https://developer.mozilla.org/docs/Web/API/Service_Worker_API
      • Same-origin policy(MDN):https://developer.mozilla.org/docs/Web/Security/Same-origin_policy
      • Site Isolation(Chromium):https://www.chromium.org/Home/chromium-security/site-isolation/
      • HTTP/3(RFC 9114):https://www.rfc-editor.org/rfc/rfc9114
      • QUIC(RFC 9000):https://www.rfc-editor.org/rfc/rfc9000
      • 资源优先级与 fetchpriorityhttps://developer.chrome.com/articles/fetch-priority/
      • rel="preload"
        (MDN):https://developer.mozilla.org/docs/Web/HTML/Attributes/rel/preload
      • requestAnimationFrame
        (MDN):https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame


      结语

      浏览器并不是“黑盒”,而是一条严谨而高效的生产线:网络把货送到门口,解析与预加载安排好物料,渲染流水线负责装配与上色,脚本与事件循环维持节奏,安全机制在旁护航,缓存与离线让“回头客”受益。理解这些原理,你能读懂“为什么这页快、那页慢”,也能写出既专业又体面的优化方案。下次按下回车,不妨想象幕后这场协作正在流畅地上演。


      阅读原文:原文链接


      该文章在 2025/12/13 8:57:26 编辑过
      关键字查询
      相关文章
      正在查询...
      点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
      点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
      点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
      点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
      Copyright 2010-2025 ClickSun All Rights Reserved