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

网络通信与前端性能优化


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

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

2. fetch API 核心特性

js 复制代码
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 + 压缩」是黄金组合;

✅ 总结

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

相关推荐
SUPER52661 小时前
FastApi项目启动失败 got an unexpected keyword argument ‘loop_factory‘
java·服务器·前端
sanx181 小时前
专业电竞体育数据与系统解决方案
前端·数据库·apache·数据库开发·时序数据库
你的人类朋友4 小时前
【Node】认识一下Node.js 中的 VM 模块
前端·后端·node.js
Cosolar4 小时前
FunASR 前端语音识别代码解析
前端·面试·github
@大迁世界6 小时前
Vue 设计模式 实战指南
前端·javascript·vue.js·设计模式·ecmascript
芭拉拉小魔仙7 小时前
Vue项目中如何实现表格选中数据的 Excel 导出
前端·vue.js·excel
jump_jump7 小时前
妙用 localeCompare 获取汉字拼音首字母
前端·javascript·浏览器
U.2 SSD7 小时前
Echarts单轴坐标系散点图
前端·javascript·echarts
德育处主任Pro7 小时前
前端玩转大模型,DeepSeek-R1 蒸馏 Llama 模型的 Bedrock 部署
前端·llama
Jedi Hongbin8 小时前
Three.js NodeMaterial 节点材质系统文档
前端·javascript·three.js·nodematerial