ZiuChen.github.io/article/深入理解浏览器运行原理.html

73 lines
67 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>深入理解浏览器运行原理 | ZiuChen</title>
<meta name="description" content="Unlimited Progress.">
<link rel="preload stylesheet" href="/assets/style.275d0d0a.css" as="style">
<script type="module" src="/assets/app.e7bd02ab.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.2ed14f66.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/framework.abedd97e.js">
<link rel="modulepreload" href="/assets/chunks/theme.7ca09a1e.js">
<link rel="modulepreload" href="/assets/article_深入理解浏览器运行原理.md.38520844.lean.js">
<link rel="icon" href="/logo.png">
<script id="check-dark-light">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-7a6cea33><!--[--><!--]--><!--[--><span tabindex="-1" data-v-5f1bf755></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-5f1bf755> Skip to content </a><!--]--><!----><header class="VPNav" data-v-7a6cea33 data-v-3a18c829><div class="VPNavBar has-sidebar" data-v-3a18c829 data-v-1b2815df><div class="container" data-v-1b2815df><div class="title" data-v-1b2815df><div class="VPNavBarTitle has-sidebar" data-v-1b2815df data-v-1e59ca87><a class="title" href="/" data-v-1e59ca87><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.png" alt data-v-ccf440f7><!--]--><!--[-->ZiuChen<!--]--><!--[--><!--]--></a></div></div><div class="content" data-v-1b2815df><div class="curtain" data-v-1b2815df></div><div class="content-body" data-v-1b2815df><!--[--><!--]--><div class="VPNavBarSearch search" style="--vp-meta-key:&#39;Meta&#39;;" data-v-1b2815df><!--[--><!----><div id="docsearch"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg class="DocSearch-Search-Icon" width="20" height="20" viewBox="0 0 20 20" aria-label="search icon"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-1b2815df data-v-0d82d2f2><span id="main-nav-aria-label" class="visually-hidden" data-v-0d82d2f2>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-0d82d2f2 data-v-b46cf0af data-v-8fe481ea><!--[-->首页<!--]--><!----></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-0d82d2f2 data-v-b50a22ea><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-b50a22ea><span class="text" data-v-b50a22ea><!----> 我的项目 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-b50a22ea><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-b50a22ea><div class="VPMenu" data-v-b50a22ea data-v-922429a3><div class="items" data-v-922429a3><!--[--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/project/ClipboardManager/" data-v-24309b78 data-v-8fe481ea><!--[-->超级剪贴板<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/project/Markdown/" data-v-24309b78 data-v-8fe481ea><!--[-->超级Markdown<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/project/JSRunner/" data-v-24309b78 data-v-8fe481ea><!--[-->超级JavaScript<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/project/SmartWordBreak/" data-v-24309b78 data-v-8fe481ea><!--[-->超级分词<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-0d82d2f2 data-v-b50a22ea><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-b50a22ea><span class="text" data-v-b50a22ea><!----> 开源作品 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-b50a22ea><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-b50a22ea><div class="VPMenu" data-v-b50a22ea data-v-922429a3><div class="items" data-v-922429a3><!--[--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/works/opensource.html" data-v-24309b78 data-v-8fe481ea><!--[-->个人作品<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/works/contribution.html" data-v-24309b78 data-v-8fe481ea><!--[-->社区贡献<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-0d82d2f2 data-v-b50a22ea><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-b50a22ea><span class="text" data-v-b50a22ea><!----> 学习笔记 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-b50a22ea><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-b50a22ea><div class="VPMenu" data-v-b50a22ea data-v-922429a3><div class="items" data-v-922429a3><!--[--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/note/JavaScript.html" data-v-24309b78 data-v-8fe481ea><!--[-->JavaScript基础<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/note/CSS.html" data-v-24309b78 data-v-8fe481ea><!--[-->CSS基础<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/note/JavaScriptEnhanced.html" data-v-24309b78 data-v-8fe481ea><!--[-->JavaScript进阶<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/note/Front-end%20Engineering.html" data-v-24309b78 data-v-8fe481ea><!--[-->前端工程化<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/note/SSR.html" data-v-24309b78 data-v-8fe481ea><!--[-->服务端渲染<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/note/React.html" data-v-24309b78 data-v-8fe481ea><!--[-->React基础<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/note/React%20Hooks.html" data-v-24309b78 data-v-8fe481ea><!--[-->React Hooks<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/note/Redux.html" data-v-24309b78 data-v-8fe481ea><!--[-->Redux<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/note/React%20Router.html" data-v-24309b78 data-v-8fe481ea><!--[-->React Router<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-922429a3 data-v-24309b78><a class="VPLink link" href="/note/MySQL.html" data-v-24309b78 data-v-8fe481ea><!--[-->MySQL<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/self/" tabindex="0" data-v-0d82d2f2 data-v-b46cf0af data-v-8fe481ea><!--[-->个人介绍<!--]--><!----></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-1b2815df data-v-5d8e5634><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-5d8e5634 data-v-cbb74a31 data-v-8bd12372><span class="check" data-v-8bd12372><span class="icon" data-v-8bd12372><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-cbb74a31><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-cbb74a31><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-1b2815df data-v-075317c7 data-v-698b8333><!--[--><a class="VPSocialLink" href="https://github.com/ZiuChen" aria-label="github" target="_blank" rel="noopener" data-v-698b8333 data-v-884cf77f><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink" href="https://juejin.cn/user/1887205216238477" aria-label target="_blank" rel="noopener" data-v-698b8333 data-v-884cf77f><svg width="36" height="28" viewBox="0 0 36 28" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M17.5875 6.77268L21.8232 3.40505L17.5875 0.00748237L17.5837 0L13.3555 3.39757L17.5837 6.76894L17.5875 6.77268ZM17.5863 17.3955H17.59L28.5161 8.77432L25.5526 6.39453L17.59 12.6808H17.5863L17.5825 12.6845L9.61993 6.40201L6.66016 8.78181L17.5825 17.3992L17.5863 17.3955ZM17.5828 23.2891L17.5865 23.2854L32.2133 11.7456L35.1768 14.1254L28.5238 19.3752L17.5865 28L0.284376 14.3574L0 14.1291L2.95977 11.7531L17.5828 23.2891Z" fill="#1E80FF"/></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-1b2815df data-v-337936da data-v-b50a22ea><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-b50a22ea><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-b50a22ea><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-b50a22ea><div class="VPMenu" data-v-b50a22ea data-v-922429a3><!----><!--[--><!--[--><!----><div class="group" data-v-337936da><div class="item appearance" data-v-337936da><p class="label" data-v-337936da>Appearance</p><div class="appearance-action" data-v-337936da><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-337936da data-v-cbb74a31 data-v-8bd12372><span class="check" data-v-8bd12372><span class="icon" data-v-8bd12372><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-cbb74a31><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-cbb74a31><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div></div></div><div class="group" data-v-337936da><div class="item social-links" data-v-337936da><div class="VPSocialLinks social-links-list" data-v-337936da data-v-698b8333><!--[--><a class="VPSocialLink" href="https://github.com/ZiuChen" aria-label="github" target="_blank" rel="noopener" data-v-698b8333 data-v-884cf77f><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink" href="https://juejin.cn/user/1887205216238477" aria-label target="_blank" rel="noopener" data-v-698b8333 data-v-884cf77f><svg width="36" height="28" viewBox="0 0 36 28" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M17.5875 6.77268L21.8232 3.40505L17.5875 0.00748237L17.5837 0L13.3555 3.39757L17.5837 6.76894L17.5875 6.77268ZM17.5863 17.3955H17.59L28.5161 8.77432L25.5526 6.39453L17.59 12.6808H17.5863L17.5825 12.6845L9.61993 6.40201L6.66016 8.78181L17.5825 17.3992L17.5863 17.3955ZM17.5828 23.2891L17.5865 23.2854L32.2133 11.7456L35.1768 14.1254L28.5238 19.3752L17.5865 28L0.284376 14.3574L0 14.1291L2.95977 11.7531L17.5828 23.2891Z" fill="#1E80FF"/></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-1b2815df data-v-6a3f6c55><span class="container" data-v-6a3f6c55><span class="top" data-v-6a3f6c55></span><span class="middle" data-v-6a3f6c55></span><span class="bottom" data-v-6a3f6c55></span></span></button></div></div></div></div><!----></header><div class="VPLocalNav" data-v-7a6cea33 data-v-163ef388><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-163ef388><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-163ef388><path d="M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"></path><path d="M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"></path><path d="M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"></path><path d="M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"></path></svg><span class="menu-text" data-v-163ef388>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-163ef388 data-v-bc2c8509><button data-v-bc2c8509>Return to top</button><!----></div></div><aside class="VPSidebar" data-v-7a6cea33 data-v-2f75884a><div class="curtain" data-v-2f75884a></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-2f75884a><span class="visually-hidden" id="sidebar-aria-label" data-v-2f75884a> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-2f75884a><section class="VPSidebarItem level-0" data-v-2f75884a data-v-3ae94607><div class="item" role="button" tabindex="0" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><h2 class="text" data-v-3ae94607>我的项目</h2><!----></div><div class="items" data-v-3ae94607><!--[--><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/project/ClipboardManager/" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>超级剪贴板</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/project/Markdown/" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>超级Markdown</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/project/JSRunner/" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>超级JavaScript</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/project/SmartWordBreak/" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>超级分词</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-2f75884a><section class="VPSidebarItem level-0 collapsible collapsed" data-v-2f75884a data-v-3ae94607><div class="item" role="button" tabindex="0" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><h2 class="text" data-v-3ae94607>开源作品</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-3ae94607><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-3ae94607><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-3ae94607><!--[--><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/works/opensource.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>个人作品</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/works/contribution.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>社区贡献</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-2f75884a><section class="VPSidebarItem level-0 collapsible has-active" data-v-2f75884a data-v-3ae94607><div class="item" role="button" tabindex="0" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><h2 class="text" data-v-3ae94607>文章归档</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-3ae94607><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-3ae94607><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-3ae94607><!--[--><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E3%80%902023%E3%80%91%E9%9D%92%E8%AE%AD%E8%90%A5%20-%20%E5%89%8D%E7%AB%AF%E7%BB%83%E4%B9%A0%E9%A2%98%E6%B1%87%E6%80%BB%E8%A7%A3%E6%9E%90.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>【2023】青训营 - 前端练习题汇总解析</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E3%80%90%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8%E3%80%91%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%A2%98%E6%80%BB%E7%BB%93.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>【字节跳动】前端面试题总结</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E3%80%90%E5%BF%AB%E6%89%8B%E3%80%91%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%A2%98.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>【快手】深入理解前端面试题</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E3%80%90%E7%94%A8%E5%8F%8B%E9%87%91%E8%9E%8D%E3%80%91%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%A2%98%E6%80%BB%E7%BB%93.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>【用友金融】前端面试题总结</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E4%B8%80%E6%96%87%E8%AF%BB%E6%87%82%E4%BA%8B%E4%BB%B6%E5%86%92%E6%B3%A1%E4%B8%8E%E4%BA%8B%E4%BB%B6%E6%8D%95%E8%8E%B7.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>一文读懂事件冒泡与事件捕获</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E4%B8%80%E6%96%87%E8%AF%BB%E6%87%82%E4%BC%AA%E7%B1%BB%E4%B8%8E%E4%BC%AA%E5%85%83%E7%B4%A0.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>一文读懂伪类与伪元素</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E4%B8%80%E6%96%87%E8%AF%BB%E6%87%82%E5%87%BD%E6%95%B0%E4%B8%ADthis%E6%8C%87%E5%90%91%E9%97%AE%E9%A2%98.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>一文读懂函数中this指向问题</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E4%BB%8E0%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E5%B9%B4%E5%BA%A6%E6%8A%A5%E5%91%8A.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>从0实现一个年度报告</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E5%BD%BB%E5%BA%95%E6%90%9E%E6%87%82%E5%AF%B9%E8%B1%A1%E7%9A%84%E6%95%B0%E6%8D%AE%E5%B1%9E%E6%80%A7%E6%8F%8F%E8%BF%B0%E7%AC%A6%E3%80%81%E5%AD%98%E5%82%A8%E5%B1%9E%E6%80%A7%E6%8F%8F%E8%BF%B0%E7%AC%A6.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>彻底搞懂对象的数据属性描述符、存储属性描述符</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E6%B5%85%E6%9E%90defineProperty%E4%B8%8EProxy%E5%AE%9E%E7%8E%B0%E7%9A%84%E5%8F%8C%E5%90%91%E7%BB%91%E5%AE%9A.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>浅析defineProperty与Proxy实现的双向绑定</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E6%B7%B1%E5%85%A5JavaScript%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>深入JavaScript数据类型</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E6%B7%B1%E5%85%A5Vue3%E6%BA%90%E7%A0%81%EF%BC%8C%E7%9C%8B%E7%9C%8BVue.use%E5%90%8E%E7%A9%B6%E7%AB%9F%E5%8F%91%E7%94%9F%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>深入Vue3源码看看Vue.use后究竟发生了什么</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3Proxy%E4%B8%8EReflect.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>深入理解Proxy与Reflect</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E6%B5%8F%E8%A7%88%E5%99%A8%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>深入理解浏览器缓存机制</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link is-active has-active" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/article/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E6%B5%8F%E8%A7%88%E5%99%A8%E8%BF%90%E8%A1%8C%E5%8E%9F%E7%90%86.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>深入理解浏览器运行原理</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-2f75884a><section class="VPSidebarItem level-0 collapsible collapsed" data-v-2f75884a data-v-3ae94607><div class="item" role="button" tabindex="0" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><h2 class="text" data-v-3ae94607>学习笔记</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-3ae94607><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-3ae94607><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-3ae94607><!--[--><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/note/JavaScript.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>JavaScript基础</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/note/CSS.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>CSS基础</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/note/JavaScriptEnhanced.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>JavaScript进阶</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/note/Front-end%20Engineering.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>前端工程化</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/note/SSR.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>服务端渲染</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/note/React.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>React基础</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/note/React%20Hooks.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>React Hooks</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/note/Redux.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>Redux</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/note/React%20Router.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>React Router</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-3ae94607 data-v-3ae94607><div class="item" data-v-3ae94607><div class="indicator" data-v-3ae94607></div><a class="VPLink link link" href="/note/MySQL.html" data-v-3ae94607 data-v-8fe481ea><!--[--><p class="text" data-v-3ae94607>MySQL</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-7a6cea33 data-v-1e214902><div class="VPDoc has-sidebar has-aside" data-v-1e214902 data-v-bf62dcc7><!--[--><!--]--><div class="container" data-v-bf62dcc7><div class="aside" data-v-bf62dcc7><div class="aside-curtain" data-v-bf62dcc7></div><div class="aside-container" data-v-bf62dcc7><div class="aside-content" data-v-bf62dcc7><div class="VPDocAside" data-v-bf62dcc7 data-v-d9018125><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" data-v-d9018125 data-v-436eb827><div class="content" data-v-436eb827><div class="outline-marker" data-v-436eb827></div><div class="outline-title" data-v-436eb827>On this page</div><nav aria-labelledby="doc-outline-aria-label" data-v-436eb827><span class="visually-hidden" id="doc-outline-aria-label" data-v-436eb827> Table of Contents for current page </span><ul class="root" data-v-436eb827 data-v-44a4c21e><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-d9018125></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-bf62dcc7><div class="content-container" data-v-bf62dcc7><!--[--><!--]--><!----><main class="main" data-v-bf62dcc7><div style="position:relative;" class="vp-doc _article_%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E6%B5%8F%E8%A7%88%E5%99%A8%E8%BF%90%E8%A1%8C%E5%8E%9F%E7%90%86" data-v-bf62dcc7><div><h1 id="深入理解浏览器运行原理" tabindex="-1">深入理解浏览器运行原理 <a class="header-anchor" href="#深入理解浏览器运行原理" aria-label="Permalink to &quot;深入理解浏览器运行原理&quot;"></a></h1><h2 id="网页解析过程" tabindex="-1">网页解析过程 <a class="header-anchor" href="#网页解析过程" aria-label="Permalink to &quot;网页解析过程&quot;"></a></h2><p>输入域名 =&gt; DNS解析为IP =&gt; 目标服务器返回<code>index.html</code></p><blockquote><p>DNSDomain Name System</p></blockquote><h2 id="html解析过程" tabindex="-1">HTML解析过程 <a class="header-anchor" href="#html解析过程" aria-label="Permalink to &quot;HTML解析过程&quot;"></a></h2><ul><li>浏览器开始解析<code>index.html</code>文件,当遇到<code>&lt;link&gt;</code>则向服务器请求下载<code>.css</code>文件</li><li>遇到<code>&lt;script&gt;</code>标签则向服务器请求下载<code>.js</code>文件</li></ul><img src="https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0a90afa7c2534ae78f3eab9200a0095b~tplv-k3u1fbpfcp-watermark.image?" alt="浏览器解析HTML过程" width="70%"><img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/630cf2fd1d3748d6846fe7f2ab99a01b~tplv-k3u1fbpfcp-watermark.image?" alt="浏览器是和如何工作的" width="70%"><p><a href="https://web.dev/howbrowserswork/" target="_blank" rel="noreferrer">How browsers work</a></p><h2 id="生成css规则" tabindex="-1">生成CSS规则 <a class="header-anchor" href="#生成css规则" aria-label="Permalink to &quot;生成CSS规则&quot;"></a></h2><p>在解析的过程中,如果遇到<code>&lt;link&gt;</code>元素那么会由浏览器负责下载对应的CSS文件</p><ul><li>注意下载CSS文件不会影响到DOM解析</li><li>有单独一个线程对CSS文件进行下载与解析</li></ul><p>浏览器下载完CSS文件后就会对CSS文件进行解析解析出对应的规则树</p><ul><li>我们可以称之为CSSOMCSS Object ModelCSS对象模型</li></ul><h2 id="构建render-tree" tabindex="-1">构建Render Tree <a class="header-anchor" href="#构建render-tree" aria-label="Permalink to &quot;构建Render Tree&quot;"></a></h2><p>有了DOM Tree和CSSOM Tree之后就可以将二者结合构建Render Tree了</p><p>此时如果有某些元素的CSS属性<code>display: none;</code>那么这个元素就不会出现在Render Tree中</p><ul><li>下载和解析CSS文件时不会阻塞DOM Tree的构建过程</li><li>但会阻塞Render Tree的构建过程因为需要对应的CSSOM Tree</li></ul><h2 id="布局和绘制-layout-paint" tabindex="-1">布局和绘制(Layout &amp; Paint) <a class="header-anchor" href="#布局和绘制-layout-paint" aria-label="Permalink to &quot;布局和绘制(Layout &amp; Paint)&quot;"></a></h2><p>第四步是在渲染树Render Tree上运行布局Layout以计算每个节点的几何体</p><ul><li>渲染树会表示显示哪些节点以及其他的样式,但是不表示每个节点的尺寸、位置等信息</li><li>布局是确定呈现树中所有节点的宽度、高度和位置信息</li></ul><p>第五步是将每个节点绘制Paint到屏幕上</p><ul><li>在绘制阶段浏览器布局阶段计算的每个frame转为屏幕上实际的像素点</li><li>包括将元素的可见部分进行绘制,比如文本、颜色、边框、阴影、替换元素</li></ul><h2 id="回流和重绘-reflow" tabindex="-1">回流和重绘(Reflow &amp; ) <a class="header-anchor" href="#回流和重绘-reflow" aria-label="Permalink to &quot;回流和重绘(Reflow &amp; )&quot;"></a></h2><p>回流也可称为重排</p><p>理解回流Reflow</p><ul><li>第一次确定节点的大小和位置称之为布局layout</li><li>之后对节点的大小、位置修改重新计算,称之为回流</li></ul><p>什么情况下会引起回流?</p><ul><li>DOM 结构发生改变(添加新的节点或者移除节点)</li><li>改变了布局修改了width height padding font-size等值</li><li>窗口resize修改了窗口的尺寸等</li><li>调用getComputedStyle方法获取尺寸、位置信息</li></ul><p>理解重绘Repaint</p><ul><li>第一次渲染内容称之为绘制paint</li><li>之后的重新渲染称之为重绘</li></ul><p>什么情况下会引起重绘?</p><ul><li>修改背景色、文字颜色、边框颜色、样式等</li></ul><p><strong>回流一定会引起重绘,所以回流是一件很消耗性能的事情</strong></p><ul><li><p>开发中要尽量避免发生回流</p></li><li><p>修改样式尽量一次性修改完毕</p><ul><li>例如通过cssText一次性设置样式或通过修改class的方式修改样式</li></ul></li><li><p>尽量避免频繁的操作DOM</p><ul><li>可以在一个DocumentFragment或者父元素中将要操作的DOM操作完成再一次性插入到DOM树中</li></ul></li><li><p>尽量避免通过getComputedStyle获取元素尺寸、位置等信息</p></li><li><p>对某些元素使用position的absolute或fixed属性</p><ul><li>并不是不会引起回流,而是开销相对较小,不会对其他元素产生影响</li></ul></li></ul><h2 id="特殊解析-composite合成" tabindex="-1">特殊解析: composite合成 <a class="header-anchor" href="#特殊解析-composite合成" aria-label="Permalink to &quot;特殊解析: composite合成&quot;"></a></h2><p>在绘制的过程中,可以将布局后的元素绘制到多个合成图层中</p><ul><li>这是浏览器的一种优化手段</li><li>将不同流生成的不同Layer进行合并</li></ul><div class="language- line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">标准流 =&gt; LayouTree =&gt; RenderLayer</span></span>
<span class="line"><span style="color:#A6ACCD;">`position:fixed;` =&gt; RenderLayer</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>默认情况标准流中的内容都是被绘制在同一个图层Layer中的</p><p>而一些特殊的属性浏览器会创建一个新的合成层CompositingLayer并且新的图层可以利用GPU来加速绘制</p><ul><li>每个合成层都是单独渲染的</li><li>单独渲染可以避免所有的动画都在同一层中渲染导致性能问题</li><li>在各自的层中渲染完成后,只需要将渲染结果更新回合成层即可</li></ul><p>当元素具有哪些属性时,浏览器会为其创建新的合成层呢?</p><ul><li>3D Transforms</li><li>video canvas iframe</li><li>opacity 动画转换时</li><li>position: fixed</li><li>will-change: 一个实验性的属性,提前告诉浏览器此元素可能发生哪些变化</li><li>animation 或 transition设置了opacity、transform</li></ul><h3 id="案例1-同一层渲染" tabindex="-1">案例1同一层渲染 <a class="header-anchor" href="#案例1-同一层渲染" aria-label="Permalink to &quot;案例1同一层渲染&quot;"></a></h3><div class="language- line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">.box1 {</span></span>
<span class="line"><span style="color:#A6ACCD;">  width: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  height: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  background-color: red;</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span>
<span class="line"><span style="color:#A6ACCD;">.box2 {</span></span>
<span class="line"><span style="color:#A6ACCD;">  width: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  height: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  background-color: blue;</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br></div></div><div class="language- line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">&lt;body&gt;</span></span>
<span class="line"><span style="color:#A6ACCD;">  &lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span></span>
<span class="line"><span style="color:#A6ACCD;">  &lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span></span>
<span class="line"><span style="color:#A6ACCD;">&lt;/body&gt;</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><p>在开发者工具的图层工具中可以看到,两个元素<code>.box1</code><code>.box2</code>都是在一个层Document下渲染的</p><img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/373fb3a4d5284e6c80c3ec519918e6e4~tplv-k3u1fbpfcp-watermark.image?" alt="image-20221122103111654.png" width="70%"><h3 id="案例2-分层渲染" tabindex="-1">案例2分层渲染 <a class="header-anchor" href="#案例2-分层渲染" aria-label="Permalink to &quot;案例2分层渲染&quot;"></a></h3><p>当我们为<code>.box2</code>添加上<code>position: fixed;</code>属性,这时<code>.box2</code>将在由浏览器创建出来的合成层,分层单独渲染</p><div class="language- line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">.box2 {</span></span>
<span class="line"><span style="color:#A6ACCD;">  width: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  height: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  background-color: blue;</span></span>
<span class="line"><span style="color:#A6ACCD;">  position: fixed;</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6116d83ee8c041f586d627e549fdd5bf~tplv-k3u1fbpfcp-watermark.image?" alt="image-20221122103256116.png" width="70%"><h3 id="案例3-transform-3d" tabindex="-1">案例3transform 3D <a class="header-anchor" href="#案例3-transform-3d" aria-label="Permalink to &quot;案例3transform 3D&quot;"></a></h3><p>为元素添加上<code>transform</code>属性时浏览器也会为对应元素创建一个合成层需要注意的是只有3D的变化浏览器才会创建</p><p>如果是<code>translateX</code><code>translateY</code>则不会</p><div class="language- line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">.box2 {</span></span>
<span class="line"><span style="color:#A6ACCD;">  width: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  height: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  background-color: blue;</span></span>
<span class="line"><span style="color:#A6ACCD;">  /* position: fixed; */</span></span>
<span class="line"><span style="color:#A6ACCD;">  transform: translateZ(10px);</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div><img src="https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/befb4826b079439f81c98b03586a36e5~tplv-k3u1fbpfcp-watermark.image?" alt="image-20221122103715428.png" width="70%"><h3 id="案例4-transition-transform" tabindex="-1">案例4transition+transform <a class="header-anchor" href="#案例4-transition-transform" aria-label="Permalink to &quot;案例4transition+transform&quot;"></a></h3><p>当我们为元素添加上动画时,动画的中间执行过程的渲染会在新的图层上进行,但是中间动画渲染完成后,结果会回到原始图层上</p><div class="language- line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">.box2 {</span></span>
<span class="line"><span style="color:#A6ACCD;">  width: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  height: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  background-color: blue;</span></span>
<span class="line"><span style="color:#A6ACCD;">  transition: transform 0.5s ease;</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span>
<span class="line"><span style="color:#A6ACCD;">.box2:hover {</span></span>
<span class="line"><span style="color:#A6ACCD;">  transform: translateY(10px);</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><ul><li>这也是使用<code>transform</code>执行动画性能更高的原因,因为浏览器会为动画的执行过程单独创建一个合成层</li><li>如果是通过修改<code>top</code> <code>left</code>等定位属性实现的动画,是在原始的图层上渲染完成的。“牵一发则动全身”,动画过程中将导致整个渲染树回流与重绘,极大的影响性能</li></ul><h3 id="案例5-transition-opacity" tabindex="-1">案例5transition+opacity <a class="header-anchor" href="#案例5-transition-opacity" aria-label="Permalink to &quot;案例5transition+opacity&quot;"></a></h3><p><code>transform</code>类似,使用<code>transition</code>过渡的<code>opacity</code>动画,浏览器也会为其创建一个合成层</p><div class="language- line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">.box2 {</span></span>
<span class="line"><span style="color:#A6ACCD;">  width: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  height: 100px;</span></span>
<span class="line"><span style="color:#A6ACCD;">  background-color: blue;</span></span>
<span class="line"><span style="color:#A6ACCD;">  opacity: 1;</span></span>
<span class="line"><span style="color:#A6ACCD;">  transition: opacity 0.5s ease;</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span>
<span class="line"><span style="color:#A6ACCD;">.box2:hover {</span></span>
<span class="line"><span style="color:#A6ACCD;">  opacity: 0.2;</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br></div></div><h3 id="总结" tabindex="-1">总结 <a class="header-anchor" href="#总结" aria-label="Permalink to &quot;总结&quot;"></a></h3><p>分层确实可以提高性能但是它是以内存管理为代价的因此不应当作为Web性能优化策略的一部分过度使用</p><h2 id="浏览器对script元素的处理" tabindex="-1">浏览器对script元素的处理 <a class="header-anchor" href="#浏览器对script元素的处理" aria-label="Permalink to &quot;浏览器对script元素的处理&quot;"></a></h2><p>之前我们说到,在解析到<code>link</code>标签时浏览器会异步下载其中的css文件并在DOM树构建完成后将其与CSS Tree合成为RenderTree</p><p>但是当浏览器解析到<code>script</code>标签时,整个解析过程将被阻塞,当前<code>script</code>标签后面的DOM树将停止解析直到当前<code>script</code>代码被下载、解析、执行完毕才会继续解析HTML构建DOM树</p><p>为什么要这样做呢?</p><ul><li>这是因为Javascript的作用之一就是操作DOM并且可以修改DOM</li><li>如果我们等到DOM树构建完成并且渲染出来了再去执行Javascript会造成回流和重绘严重影响页面性能</li><li>所以当浏览器构建DOM树遇到<code>script</code>标签时会优先下载和执行Javascript代码而后再继续构建DOM树</li></ul><p>这也会带来新的问题,比如在现代的页面开发中:</p><ul><li>脚本往往比HTML更“重”浏览器也需要花更多的时间去处理脚本</li><li>会造成页面的解析阻塞,在脚本下载、解析、执行完成之前,用户在界面上什么也看不到</li></ul><p>为了解决这个问题,浏览器的<code>script</code>标签为我们提供了两个属性attribute<code>defer</code><code>async</code></p><h2 id="defer属性" tabindex="-1">defer属性 <a class="header-anchor" href="#defer属性" aria-label="Permalink to &quot;defer属性&quot;"></a></h2><p><code>defer</code> 即推迟,为<code>script</code>标签添加这个属性相当于告诉浏览器不要等待此脚本下载而是继续解析HTML构建DOM Tree</p><ul><li>脚本将由浏览器进行下载但是不会阻塞DOM Tree的构建过程</li><li>如果脚本提前下载好了那么它会等待DOM Tree构建完成<code>DOMContentLoaded</code><strong>事件触发之前</strong>先执行<code>defer</code>中的代码</li></ul><div class="language- line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">&lt;script&gt;</span></span>
<span class="line"><span style="color:#A6ACCD;">  console.log(&#39;script enter&#39;)</span></span>
<span class="line"><span style="color:#A6ACCD;">  window.addEventListener(&#39;DOMContentLoaded&#39;, () =&gt; {</span></span>
<span class="line"><span style="color:#A6ACCD;">    console.log(&#39;DOMContentLoaded enter&#39;)</span></span>
<span class="line"><span style="color:#A6ACCD;"> })</span></span>
<span class="line"><span style="color:#A6ACCD;">&lt;/script&gt;</span></span>
<span class="line"><span style="color:#A6ACCD;">&lt;script src=&quot;./defer.js&quot; defer&gt;&lt;/script&gt;</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div><div class="language- line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">// defer.js</span></span>
<span class="line"><span style="color:#A6ACCD;">console.log(&#39;defer script enter&#39;)</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>上述代码在控制台的输出为:</p><div class="language- line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">script enter</span></span>
<span class="line"><span style="color:#A6ACCD;">defer script enter</span></span>
<span class="line"><span style="color:#A6ACCD;">DOMContentLoaded enter</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><ul><li>多个带<code>defer</code>的脚本也是按照自上至下的顺序执行的</li><li>从某种角度来说,<code>defer</code>可以提高页面的性能,并且推荐放到<code>head</code>元素中</li><li>注意:<code>defer</code>仅适用于外部脚本,对于<code>script</code>标签内编写的默认<code>JS</code>代码会被忽略掉</li></ul><h2 id="async属性" tabindex="-1">async属性 <a class="header-anchor" href="#async属性" aria-label="Permalink to &quot;async属性&quot;"></a></h2><p><code>async</code>属性也可以做到让脚本异步加载而不阻塞DOM树的构建它与<code>defer</code>的区别:</p><ul><li><code>async</code>标记的脚本是<strong>完全独立</strong></li><li><code>async</code>脚本不能保证执行顺序,因为它是独立下载、独立运行,不会等待其他脚本</li><li>使用<code>async</code>标记的脚本不会保证它将在<code>DOMContentLoaded</code>之前或之后被执行</li></ul><p>要使用<code>async</code>属性标记的<code>script</code>操作DOM必须在其中使用<code>DOMContentLoaded</code>监听器的回调函数在该事件触发DOM树构建完毕执行相应的回调函数</p></div></div></main><footer class="VPDocFooter" data-v-bf62dcc7 data-v-6ea060cd><!--[--><!--]--><div class="edit-info" data-v-6ea060cd><div class="edit-link" data-v-6ea060cd><a class="VPLink link edit-link-button" href="https://github.com/ZiuChen/ZiuChen.github.io/edit/main/docs/article/深入理解浏览器运行原理.md" target="_blank" rel="noreferrer" data-v-6ea060cd data-v-8fe481ea><!--[--><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="edit-link-icon" aria-label="edit icon" data-v-6ea060cd><path d="M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"></path><path d="M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"></path></svg> Edit this page on GitHub<!--]--><!----></a></div><div class="last-updated" data-v-6ea060cd><p class="VPLastUpdated" data-v-6ea060cd data-v-d0fbcfc6>Updated Date: <time datetime="2023-07-09T10:46:59.000Z" data-v-d0fbcfc6></time></p></div></div><div class="prev-next" data-v-6ea060cd><div class="pager" data-v-6ea060cd><a class="pager-link prev" href="/article/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E6%B5%8F%E8%A7%88%E5%99%A8%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6.html" data-v-6ea060cd><span class="desc" data-v-6ea060cd>Previous page</span><span class="title" data-v-6ea060cd>深入理解浏览器缓存机制</span></a></div><div class="has-prev pager" data-v-6ea060cd><a class="pager-link next" href="/note/JavaScript.html" data-v-6ea060cd><span class="desc" data-v-6ea060cd>Next page</span><span class="title" data-v-6ea060cd>JavaScript基础</span></a></div></div></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-7a6cea33 data-v-b27e7c74><div class="container" data-v-b27e7c74><p class="message" data-v-b27e7c74>Released under the MIT License.</p><p class="copyright" data-v-b27e7c74>Copyright © 2019-present Ziu Chen</p></div></footer><!--[--><!--]--></div></div>
<script>__VP_HASH_MAP__ = JSON.parse("{\"article_浅析defineproperty与proxy实现的双向绑定.md\":\"5bde30e5\",\"article_从0实现一个年度报告.md\":\"dc9b291c\",\"article_彻底搞懂对象的数据属性描述符、存储属性描述符.md\":\"ec2276ae\",\"article_【用友金融】前端面试题总结.md\":\"fae91db1\",\"article_深入javascript数据类型.md\":\"4b10f1f7\",\"article_一文读懂函数中this指向问题.md\":\"b3f2945d\",\"article_深入vue3源码看看vue.use后究竟发生了什么.md\":\"36170b19\",\"article_一文读懂事件冒泡与事件捕获.md\":\"c30ecd33\",\"index.md\":\"a1562a1f\",\"article_深入理解proxy与reflect.md\":\"f06a745e\",\"article_【快手】深入理解前端面试题.md\":\"195c2962\",\"article_深入理解浏览器缓存机制.md\":\"3c085dac\",\"article_一文读懂伪类与伪元素.md\":\"fce4bd79\",\"article_【2023】青训营 - 前端练习题汇总解析.md\":\"c536ff83\",\"article_【字节跳动】前端面试题总结.md\":\"91687e6e\",\"note_mysql.md\":\"d0d659c8\",\"article_深入理解浏览器运行原理.md\":\"38520844\",\"project_jsrunner_log_index.md\":\"7cc95dd1\",\"project_clipboardmanager_guide_index.md\":\"9a9903ab\",\"note_react hooks.md\":\"9749673f\",\"note_redux.md\":\"8cfae183\",\"project_clipboardmanager_index.md\":\"99587d62\",\"project_clipboardmanager_statement_index.md\":\"a6568912\",\"project_markdown_index.md\":\"48b23b41\",\"works_contribution.md\":\"cea26595\",\"project_jsrunner_index.md\":\"ec3cccb3\",\"project_markdown_shortcut_index.md\":\"55bd8984\",\"project_clipboardmanager_vip_index.md\":\"3f64a014\",\"works_opensource.md\":\"f2ee3422\",\"note_javascript.md\":\"8a91b246\",\"note_front-end engineering.md\":\"68d27851\",\"project_markdown_log_index.md\":\"6bc10dcc\",\"note_react router.md\":\"1e5cdb56\",\"self_index.md\":\"ac581410\",\"project_smartwordbreak_index.md\":\"05159f42\",\"project_smartwordbreak_statement_index.md\":\"adcdb95c\",\"note_ssr.md\":\"462f96e8\",\"note_css.md\":\"fdbc7add\",\"note_javascriptenhanced.md\":\"c2dd823c\",\"project_clipboardmanager_log_index.md\":\"3c2bd5e1\",\"project_smartwordbreak_log_index.md\":\"ae7b97fd\",\"note_react.md\":\"fd4bcb83\"}")
__VP_SITE_DATA__ = JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"ZiuChen\",\"description\":\"Unlimited Progress.\",\"base\":\"/\",\"head\":[],\"appearance\":true,\"themeConfig\":{\"logo\":\"/logo.png\",\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"我的项目\",\"items\":[{\"text\":\"超级剪贴板\",\"link\":\"/project/ClipboardManager/\"},{\"text\":\"超级Markdown\",\"link\":\"/project/Markdown/\"},{\"text\":\"超级JavaScript\",\"link\":\"/project/JSRunner/\"},{\"text\":\"超级分词\",\"link\":\"/project/SmartWordBreak/\"}]},{\"text\":\"开源作品\",\"items\":[{\"text\":\"个人作品\",\"link\":\"/works/opensource\"},{\"text\":\"社区贡献\",\"link\":\"/works/contribution\"}]},{\"text\":\"学习笔记\",\"items\":[{\"text\":\"JavaScript基础\",\"link\":\"/note/JavaScript\"},{\"text\":\"CSS基础\",\"link\":\"/note/CSS\"},{\"text\":\"JavaScript进阶\",\"link\":\"/note/JavaScriptEnhanced\"},{\"text\":\"前端工程化\",\"link\":\"/note/Front-end Engineering\"},{\"text\":\"服务端渲染\",\"link\":\"/note/SSR\"},{\"text\":\"React基础\",\"link\":\"/note/React\"},{\"text\":\"React Hooks\",\"link\":\"/note/React Hooks\"},{\"text\":\"Redux\",\"link\":\"/note/Redux\"},{\"text\":\"React Router\",\"link\":\"/note/React Router\"},{\"text\":\"MySQL\",\"link\":\"/note/MySQL\"}]},{\"text\":\"个人介绍\",\"link\":\"/self/\"}],\"sidebar\":[{\"text\":\"我的项目\",\"items\":[{\"text\":\"超级剪贴板\",\"link\":\"/project/ClipboardManager/\"},{\"text\":\"超级Markdown\",\"link\":\"/project/Markdown/\"},{\"text\":\"超级JavaScript\",\"link\":\"/project/JSRunner/\"},{\"text\":\"超级分词\",\"link\":\"/project/SmartWordBreak/\"}]},{\"text\":\"开源作品\",\"collapsed\":true,\"items\":[{\"text\":\"个人作品\",\"link\":\"/works/opensource\"},{\"text\":\"社区贡献\",\"link\":\"/works/contribution\"}]},{\"text\":\"文章归档\",\"collapsed\":true,\"items\":[{\"text\":\"【2023】青训营 - 前端练习题汇总解析\",\"link\":\"/article/【2023】青训营 - 前端练习题汇总解析\"},{\"text\":\"【字节跳动】前端面试题总结\",\"link\":\"/article/【字节跳动】前端面试题总结\"},{\"text\":\"【快手】深入理解前端面试题\",\"link\":\"/article/【快手】深入理解前端面试题\"},{\"text\":\"【用友金融】前端面试题总结\",\"link\":\"/article/【用友金融】前端面试题总结\"},{\"text\":\"一文读懂事件冒泡与事件捕获\",\"link\":\"/article/一文读懂事件冒泡与事件捕获\"},{\"text\":\"一文读懂伪类与伪元素\",\"link\":\"/article/一文读懂伪类与伪元素\"},{\"text\":\"一文读懂函数中this指向问题\",\"link\":\"/article/一文读懂函数中this指向问题\"},{\"text\":\"从0实现一个年度报告\",\"link\":\"/article/从0实现一个年度报告\"},{\"text\":\"彻底搞懂对象的数据属性描述符、存储属性描述符\",\"link\":\"/article/彻底搞懂对象的数据属性描述符、存储属性描述符\"},{\"text\":\"浅析defineProperty与Proxy实现的双向绑定\",\"link\":\"/article/浅析defineProperty与Proxy实现的双向绑定\"},{\"text\":\"深入JavaScript数据类型\",\"link\":\"/article/深入JavaScript数据类型\"},{\"text\":\"深入Vue3源码看看Vue.use后究竟发生了什么\",\"link\":\"/article/深入Vue3源码看看Vue.use后究竟发生了什么\"},{\"text\":\"深入理解Proxy与Reflect\",\"link\":\"/article/深入理解Proxy与Reflect\"},{\"text\":\"深入理解浏览器缓存机制\",\"link\":\"/article/深入理解浏览器缓存机制\"},{\"text\":\"深入理解浏览器运行原理\",\"link\":\"/article/深入理解浏览器运行原理\"}]},{\"text\":\"学习笔记\",\"collapsed\":true,\"items\":[{\"text\":\"JavaScript基础\",\"link\":\"/note/JavaScript\"},{\"text\":\"CSS基础\",\"link\":\"/note/CSS\"},{\"text\":\"JavaScript进阶\",\"link\":\"/note/JavaScriptEnhanced\"},{\"text\":\"前端工程化\",\"link\":\"/note/Front-end Engineering\"},{\"text\":\"服务端渲染\",\"link\":\"/note/SSR\"},{\"text\":\"React基础\",\"link\":\"/note/React\"},{\"text\":\"React Hooks\",\"link\":\"/note/React Hooks\"},{\"text\":\"Redux\",\"link\":\"/note/Redux\"},{\"text\":\"React Router\",\"link\":\"/note/React Router\"},{\"text\":\"MySQL\",\"link\":\"/note/MySQL\"}]}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/ZiuChen\"},{\"icon\":{\"svg\":\"<svg width=\\\"36\\\" height=\\\"28\\\" viewBox=\\\"0 0 36 28\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M17.5875 6.77268L21.8232 3.40505L17.5875 0.00748237L17.5837 0L13.3555 3.39757L17.5837 6.76894L17.5875 6.77268ZM17.5863 17.3955H17.59L28.5161 8.77432L25.5526 6.39453L17.59 12.6808H17.5863L17.5825 12.6845L9.61993 6.40201L6.66016 8.78181L17.5825 17.3992L17.5863 17.3955ZM17.5828 23.2891L17.5865 23.2854L32.2133 11.7456L35.1768 14.1254L28.5238 19.3752L17.5865 28L0.284376 14.3574L0 14.1291L2.95977 11.7531L17.5828 23.2891Z\\\" fill=\\\"#1E80FF\\\"/></svg>\"},\"link\":\"https://juejin.cn/user/1887205216238477\"}],\"editLink\":{\"pattern\":\"https://github.com/ZiuChen/ZiuChen.github.io/edit/main/docs/:path\",\"text\":\"Edit this page on GitHub\"},\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2019-present Ziu Chen\"},\"lastUpdatedText\":\"Updated Date\",\"search\":{\"provider\":\"algolia\",\"options\":{\"appId\":\"LFZ2CPWWUG\",\"apiKey\":\"b4fd296ea5e467b3ac4a582160ff3122\",\"indexName\":\"ziuchenio\"}}},\"locales\":{},\"scrollOffset\":90,\"cleanUrls\":false}")</script>
</body>
</html>