每天一个前端小知识 Day 8 - 网络通信与前端性能优化

发布于:2025-06-22 ⋅ 阅读:(22) ⋅ 点赞:(0)

网络通信与前端性能优化


1. 前端常用网络通信方式对比

方式 场景说明 特点
XMLHttpRequest 老式 AJAX 通信 回调繁琐,兼容性好
fetch API 现代标准,逐步取代 XHR Promise 基础,更简洁
axios 基于 xhr 的封装库 拦截器、默认配置、适配性强
WebSocket 实时通信,如聊天室、推送 长连接,双向通信
SSE 服务端单向推送(Server-Sent) 比 WebSocket 简单,单向

2. fetch API 核心特性

fetch('/api/data')
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err));

特点:

  • 默认不带 Cookie(需设置 credentials: 'include');
  • 响应状态码错误不会触发 catch(要手动判断 res.ok);
  • 不支持请求/响应拦截(需封装);

3. 网络请求优化策略

技术 说明
请求合并 GraphQL、批量接口
懒加载 / 预加载 图片懒加载(loading="lazy")、prefetch 标签
CDN 加速 静态资源分发,地理就近请求
本地缓存 localStorage / sessionStorage / indexedDB
强缓存 / 协商缓存 HTTP 头部配置:Cache-ControlETag
请求去重与节流 对并发相同请求进行防抖、去重

4. 性能优化核心指标(Web Vitals)

指标 说明
FCP (First Contentful Paint) 首次内容绘制时间
LCP (Largest Contentful Paint) 最大内容绘制时间(首屏加载关键)
TTI (Time to Interactive) 用户可交互的时间点
CLS (Cumulative Layout Shift) 页面布局稳定性
TBT (Total Blocking Time) 阻塞主线程时间

📌 Chrome DevTools / Lighthouse 可直接检测这些指标


5. 首屏加载优化策略(面试重点)

✅ 减少首屏资源体积
  • Tree Shaking / SplitChunks
  • 图片压缩(webp / AVIF)
  • CDN 加载第三方库(如 Vue/React)
✅ 减少请求数
  • 合并 CSS/JS 文件
  • 使用 SVG Sprite 代替多张图标
  • Base64 小图内联
✅ 异步加载不影响首屏资源
  • 动态 import 非首屏组件
  • 使用 async / defer 加载脚本
  • 路由懒加载 + Skeleton 骨架屏

6. 浏览器缓存机制

类型 说明
强缓存 状态码 200,读取本地缓存(Cache-Control: max-age
协商缓存 状态码 304,请求服务器判断是否变更(ETag
Cookie 小数据,自动携带,适合登录态
localStorage 大容量(5MB),持久保存
sessionStorage 生命周期短,刷新页面清除
indexedDB 结构化数据缓存,适合离线应用

7. 面试高频问题精讲

📌 Q1:浏览器如何实现缓存优化?

答:

  • 利用 HTTP 的 Cache-Control / ETag 实现静态资源缓存;
  • 对于版本化资源,可设置长时间强缓存(max-age=31536000);
  • 使用内容哈希(如 main.abc123.js)实现更新检测;
  • 脚本/样式外链并合理使用 async / defer

📌 Q2:首屏加载太慢怎么办?
  • 优化图片和资源大小;
  • 使用 SSR 或 CSR + Skeleton 加速渲染;
  • 优化依赖树,减少初始打包;
  • 使用 link rel="preload" 预加载关键资源;
  • 开启 gzip / brotli 传输压缩。

📌 Q3:fetch 和 axios 的区别?
特性 fetch axios
基础实现 原生 API 封装于 XMLHttpRequest
默认行为 不自动处理状态码 错误自动抛出异常
拦截器 支持请求与响应拦截
请求取消 AbortController CancelToken (v1) / AbortSignal (v2)

📌 Q4:你如何理解懒加载和预加载?
  • 懒加载(Lazy Load):按需加载,延迟加载不在视口的资源;
  • 预加载(Preload / Prefetch):提前加载未来可能需要的资源;
  • 配合 IntersectionObserver 实现图片/组件懒加载更高效。

8. 实战建议总结

  • 请求层建议封装(axios + 拦截器 + 类型定义);
  • 使用 useSWR / react-query 等状态缓存方案提升体验;
  • 开发中应随时分析 network、资源 waterfall;
  • 性能优化是过程,不是一次性的「打鸡血式」修复;
  • 「按需加载 + 缓存 + CDN + 压缩」是黄金组合;

✅ 总结

网络优化与性能调优,是高阶前端不可回避的责任。不仅影响用户体验,也关乎产品核心数据指标(如转化率、留存率)。理解浏览器通信机制、缓存策略、性能评估工具,让你在面试与实战中脱颖而出。


题外话

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到