Open sanlangguo opened 3 years ago
避免直接插入DOM。在documentFragment上操作,然后再插入document中 避免循环读取offsetWidth等属性。循环外存取 避免复杂动画。利用绝对定位将其脱离文档流 避免CSS选择符层级太多。尽量平级类名,参考 scss 中的&的用法 为频繁重绘或者回流的节点设置图层: iframe、video 等节点自动变为图层 通过 3d 动画出发:transform: translate3d(0, 0, 0) 提前通知浏览器:will-change 属性
Service Workers 是一种在 Web 浏览器中运行的脚本,它可以独立于网页进行后台运行,并且能够拦截网络请求、缓存资源以及在离线状态下提供离线功能。
注册:首先,开发人员需要在网页的 JavaScript 代码中注册 Service Worker。注册过程通常在网页加载时进行,通过调用 navigator.serviceWorker.register() 方法来完成。
安装:一旦 Service Worker 被注册,浏览器将下载并缓存 Service Worker 的脚本文件。在此过程中,Service Worker 进入安装状态。在安装状态中,开发人员可以将需要缓存的静态资源添加到缓存中,以便在后续的离线访问中使用。
激活:安装完成后,Service Worker 进入激活状态。在激活状态中,开发人员可以进行清理过期缓存或者执行其他相关操作。此时,Service Worker 将拦截通过它的请求,并根据开发人员定义的逻辑来处理这些请求。
拦截请求:一旦 Service Worker 进入激活状态,它将拦截并处理通过它的网络请求。开发人员可以通过监听 fetch 事件来拦截和处理请求。在拦截到请求后,开发人员可以选择从缓存中读取响应,或者将请求转发到网络中,并将响应缓存起来。
更新:当 Service Worker 的脚本文件发生变化时,浏览器将下载新的脚本文件,并触发 Service Worker 的更新流程。在更新流程中,开发人员可以处理旧的缓存并进行更新。更新完成后,Service Worker 进入激活状态。
通过 Service Workers,网页可以具有离线访问功能,以及更高级的缓存和资源管理能力。开发人员可以利用 Service Workers 来提供更好的用户体验,并提供离线状态下的核心功能。
preload 优先加载当前资源 refetch 空闲时预加载资源
Prefetching/Preloading modules
DNS-prefetch (DNS 预获取) 是尝试在请求资源之前解析域名。这可能是后面要加载的文件,也可能是用户尝试打开的链接目标。
当浏览器从(第三方)服务器请求资源时,必须先将该跨域域名解析为 IP地址,然后浏览器才能发出请求。此过程称为 DNS解析。DNS 缓存可以帮助减少此延迟,而 DNS解析可以导致请求增加明显的延迟。对于打开了与许多第三方的连接的网站,此延迟可能会大大降低加载性能。
dns-prefetch 可帮助开发人员掩盖 DNS解析延迟。 HTML 元素 通过 dns-prefetch的 rel 属性 (en-US)值提供此功能。然后在 href属性中指要跨域的域名:
句法
<link rel="dns-prefetch" href="https://fonts.googleapis.com/">
Note: 如果页面需要建立与许多第三方域的连接,则将它们预先连接会适得其反。 preconnect 提示最好仅用于最关键的连接。对于其他的,只需使用 即可节省第一步的时间-DNS查找。
参看 MDN dns-prefetch
性能优化
性能优化-响应
影响回流的操作-渲染优化与浏览器为友
JS-代码优化-对象优可以做那些
CSS 优化
渐进式图片的解决方案
使用响应式图片
使用 font-display
Babel 优化配置
noParse (https://webpack.js.org/configuration/module/#modulenoparse)
DllPlugin (https://webpack.js.org/plugins/dll-plugin/#dllplugin)
代码拆分做什么
webpack 代码拆分的方法
Minification
持久化缓存方案
检测与分析
React 按需加载
Gzip
Keep Alive
HTTP 缓存
Service Workers 原理
Service Workers 是一种在 Web 浏览器中运行的脚本,它可以独立于网页进行后台运行,并且能够拦截网络请求、缓存资源以及在离线状态下提供离线功能。
Service Workers 的工作原理如下:
注册:首先,开发人员需要在网页的 JavaScript 代码中注册 Service Worker。注册过程通常在网页加载时进行,通过调用 navigator.serviceWorker.register() 方法来完成。
安装:一旦 Service Worker 被注册,浏览器将下载并缓存 Service Worker 的脚本文件。在此过程中,Service Worker 进入安装状态。在安装状态中,开发人员可以将需要缓存的静态资源添加到缓存中,以便在后续的离线访问中使用。
激活:安装完成后,Service Worker 进入激活状态。在激活状态中,开发人员可以进行清理过期缓存或者执行其他相关操作。此时,Service Worker 将拦截通过它的请求,并根据开发人员定义的逻辑来处理这些请求。
拦截请求:一旦 Service Worker 进入激活状态,它将拦截并处理通过它的网络请求。开发人员可以通过监听 fetch 事件来拦截和处理请求。在拦截到请求后,开发人员可以选择从缓存中读取响应,或者将请求转发到网络中,并将响应缓存起来。
更新:当 Service Worker 的脚本文件发生变化时,浏览器将下载新的脚本文件,并触发 Service Worker 的更新流程。在更新流程中,开发人员可以处理旧的缓存并进行更新。更新完成后,Service Worker 进入激活状态。
通过 Service Workers,网页可以具有离线访问功能,以及更高级的缓存和资源管理能力。开发人员可以利用 Service Workers 来提供更好的用户体验,并提供离线状态下的核心功能。
Service Workers 注意
HTTP2 优势
搭建 HTTP2 服务 (场景)
SSR 的好处
是否使用 SSR
从PNG 到 IconFont
从IconFont 到 SVG
Flexbox 的优势
资源优先级
Prefetching/Preloading modules
预渲染的作用
dns-prefetch
DNS-prefetch (DNS 预获取) 是尝试在请求资源之前解析域名。这可能是后面要加载的文件,也可能是用户尝试打开的链接目标。
为什么要使用 dns-prefetch?
当浏览器从(第三方)服务器请求资源时,必须先将该跨域域名解析为 IP地址,然后浏览器才能发出请求。此过程称为 DNS解析。DNS 缓存可以帮助减少此延迟,而 DNS解析可以导致请求增加明显的延迟。对于打开了与许多第三方的连接的网站,此延迟可能会大大降低加载性能。
dns-prefetch 可帮助开发人员掩盖 DNS解析延迟。 HTML 元素 通过 dns-prefetch的 rel 属性 (en-US)值提供此功能。然后在 href属性中指要跨域的域名:
句法
Note: 如果页面需要建立与许多第三方域的连接,则将它们预先连接会适得其反。 preconnect 提示最好仅用于最关键的连接。对于其他的,只需使用 即可节省第一步的时间-DNS查找。
参看 MDN dns-prefetch
使用 React-Snap
windowing 的作用
使用 react-window
使用骨架组建减少布局移动(Layout Shift)
浏览器输入URL 发生了什么
首屏优化