Appearance
Web 端经验总结
记录 Web 端开发中常见的问题和解决方案
兼容性问题
CSS 兼容
- Flex 布局:IE11 对 Flex 支持不完整,需要加
-ms-前缀或使用autoprefixer - CSS 变量:IE 不支持 CSS 自定义属性(
--var),如需兼容使用预处理器变量 position: sticky:Safari 需加-webkit-sticky,部分安卓浏览器不支持
JS 兼容
- 可选链操作符(
?.):低版本浏览器不支持,确保 Babel 正确配置 Promise.allSettled:需要 polyfill 或 Babel 插件支持globalThis:低版本浏览器需要 polyfill
性能优化经验
首屏加载优化
- 路由懒加载:使用动态
import()实现按需加载 - 资源预加载:
<link rel="preload">预加载关键资源 - 图片优化:使用 WebP 格式、懒加载、合适的尺寸
- 代码分割:利用 Webpack/Vite 的代码分割功能,减少单个 bundle 体积
- CDN 加速:将静态资源部署到 CDN
运行时优化
- 防抖和节流:频繁触发的事件(scroll、resize、input)使用防抖/节流
- 虚拟列表:大数据量列表使用虚拟滚动(如
vue-virtual-scroller) - Web Worker:耗时计算任务放到 Web Worker 执行,避免阻塞主线程
常见问题解决方案
跨域问题
- 开发环境:在 Vite/Webpack 中配置 proxy 代理
- 生产环境:Nginx 反向代理或后端配置 CORS
js
// vite.config.js
export default {
server: {
proxy: {
"/api": {
target: "http://backend-server.com",
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ""),
},
},
},
};Token 过期处理
- 请求拦截器中统一添加 Token
- 响应拦截器中检测 401 状态码
- Token 过期后自动跳转登录页或刷新 Token
大文件上传
- 分片上传:将文件切割为固定大小的块,逐个上传
- 断点续传:记录已上传的分片,中断后从断点继续
- 进度展示:利用
onUploadProgress展示上传进度
部署注意事项
- 路由 history 模式:Nginx 需配置
try_files $uri $uri/ /index.html - 缓存策略:HTML 文件不缓存,静态资源设置长期缓存(带 hash 文件名)
- HTTPS:生产环境必须使用 HTTPS
- Gzip 压缩:Nginx 开启 gzip 压缩,减少传输体积
