05 前端安全和性能优化
大约 5 分钟
1. 前端安全
简单梳理一下前端的安全防范。常见的 web 前端攻击方式有哪些?主要是俩种:
XSS 跨站请求攻击 攻击者通过向受信任的网站注入恶意脚本,使其在用户浏览器中执行。这种攻击方式通常利用网站对用户输入的不充分验证或过滤,攻击者可以通过注入恶意脚本来窃取用户的信息、劫持会话、修改网页内容等。XSS 攻击可以分为三种类型:存储型 XSS、反射型 XSS 和 DOM 型 XSS。
为了防止 XSS 攻击,网站开发人员应该实施合适的输入验证和过滤机制,确保用户输入的数据被正确处理和显示,以防止恶意脚本的注入。另外,使用安全的编码实践(如转义特殊字符)也是重要的,如变“
<script>”为<script>,从而直接显示而不会作为脚本执行。XSRF 跨站请求伪造 攻击者利用用户已经登录认证的状态下,通过诱使用户访问特定网页或点击恶意链接,来执行非预期的操作。攻击者通常构造一个恶意请求,该请求会利用受害者的身份认证信息,向目标网站发送请求,以执行一些恶意操作。这些操作可能包括更改用户设置、发起资金转账、删除数据等。
为了防止 XSRF 攻击,网站开发人员可以采取一些防范措施,如使用随机生成的 CSRF 令牌来验证每个请求的合法性、限制敏感操作的访问权限、使用 HTTP 头部中的 Referer 字段等。此外,用户也可以采取一些措施,如定期清除浏览器的缓存和 cookie,不点击可疑的链接,以减少受到 XSRF 攻击的风险。
2. 性能优化
性能优化一句话总结:是让「看到页面」这件事情尽量早、尽量轻、尽量流程。
可以分为六个方面:
- 网络加载优化;
- 渲染层优化;
- JavaScript 执行优化;
- 图片与资源优化;
- 构建层优化(webpack/vite)
- 用户体验提升优化(非性能指标,但影响观感)
一、网络加载优化(资源到达浏览器前)
| 技术点 | 说明 |
|---|---|
| CDN | 加速静态资源分发 |
| HTTP/2 / HTTP/3 | 多路复用、头部压缩 |
| Gzip / Brotli 压缩 | 减小资源体积,默认推荐开启 |
| 缓存策略 | 强缓存(Cache-Control, Expires) 协商缓存(ETag, Last-Modified) |
| 懒加载(LazyLoad) | 图片、资源按需加载 |
| Preload / Prefetch / Preconnect | 提前加载关键资源、DNS 预解析 |
| 代码拆分 / 按需加载 | 不打大包,按路由/组件拆 |
| Tree Shaking | 移除未用的代码(ESM 前提) |
| 异步加载第三方脚本 | async / defer 避免阻塞渲染 |
| 资源合并 | 图标合并(icon font / sprite),请求数更少 |
二、渲染层优化(资源到了后,尽快变成页面)
| 技术点 | 说明 |
|---|---|
| SSR / SSG | 首屏提前生成,减少白屏时间 |
| Skeleton 骨架屏 | 内容加载前展示结构框架 |
| Critical CSS | 首屏 CSS 内联,避免 FOUC |
| 预加载字体 / 资源 | font-display: swap,避免字体闪 |
| Virtual List 虚拟滚动 | 长列表优化渲染数量 |
| 组件懒加载 | React.lazy / Vue defineAsyncComponent |
| DOM diff 优化 | 减少重渲染(React memo,Vue v-once) |
| keep-alive(Vue) | 缓存切页组件,状态保留 |
| requestIdleCallback | 主线程空闲时执行任务 |
| GPU 合成优化 | transform, will-change 触发硬件加速 |
| 合并 DOM 操作 | 减少 Layout / Reflow 次数 |
三、JavaScript 执行优化(JS 别拖累页面)
| 技术点 | 说明 |
|---|---|
| 减少大对象、大循环 | 会阻塞主线程、影响渲染帧率 |
| 拆组件 / 拆任务 | 大组件分片加载,大任务分帧执行 |
| 防抖 / 节流 | 事件优化,减少重复触发 |
| React: memo, useMemo, useCallback | 控制子组件渲染更新 |
| Web Worker | 把计算移出主线程 |
| 异步 import() | 动态导入非关键模块 |
| 错误监控 / 捕获 | 避免错误阻断渲染流程 |
四、图片与媒体优化
| 技术点 | 说明 |
|---|---|
| WebP / AVIF 格式 | 更小更清晰,浏览器支持广泛 |
| srcset + sizes | 按设备分辨率加载合适图 |
| 懒加载 | loading="lazy" / IntersectionObserver |
| 雪碧图 / iconfont / SVG | 减少图标请求数 |
| 图片压缩 | tinypng, imagemin, Webpack 插件压图 |
| 视频优化 | poster, preload, autoplay 控制加载方式 |
五、构建层优化(Webpack / Vite)
| 技术点 | 说明 |
|---|---|
| 按需加载 | UI 库如 antd, element-plus 配合插件只引入用到的组件 |
| babel-plugin-transform-remove-console | 删除开发时的 log |
| splitChunks | 公共模块提取、缓存更稳 |
| 缓存配置 | Webpack/Vite 的构建缓存提升二次构建速度 |
| 构建结果分析工具 | 如 webpack-bundle-analyzer,识别大包来源 |
| 生产环境压缩 | terser / esbuild 优化输出 |
| CDN 外链引入大库 | React/Vue/jquery 改为 CDN 不打包进来 |
六、用户体验提升优化(非指标但直接影响体感)
| 技术点 | 说明 |
|---|---|
| 加载进度条 / loading 效果 | 提高感知响应速度 |
| 交互延迟反馈 | 按钮点击立刻有反馈动画 |
| 骨架屏 / 占位图 | 比 loading 更稳定视觉 |
| 首屏静态展示、异步加载动态内容 | 保证页面第一时间“有东西”看 |
| 客户端缓存数据 | 保留上次状态,避免重复请求 |
| 路由切换动画 / 页面过渡 | 提升“丝滑感” |
常用优化工具推荐
| 工具 | 用途 |
|---|---|
Chrome DevTools Performance | 看帧率、重排、渲染瓶颈 |
| Lighthouse | 性能评分报告 |
| WebPageTest / PageSpeed Insights | 网络请求、压缩建议 |
| webpack-bundle-analyzer | 分析打包构成 |
| SourceMap Explorer | 找出大文件来源 |
| Sentry / Fundebug | 性能监控 + 错误日志 |
Loading...
