05 前端安全和性能优化

Huy大约 5 分钟anonymousnote

1. 前端安全

简单梳理一下前端的安全防范。常见的 web 前端攻击方式有哪些?主要是俩种:

  • XSS 跨站请求攻击 攻击者通过向受信任的网站注入恶意脚本,使其在用户浏览器中执行。这种攻击方式通常利用网站对用户输入的不充分验证或过滤,攻击者可以通过注入恶意脚本来窃取用户的信息、劫持会话、修改网页内容等。XSS 攻击可以分为三种类型:存储型 XSS、反射型 XSS 和 DOM 型 XSS。

    为了防止 XSS 攻击,网站开发人员应该实施合适的输入验证和过滤机制,确保用户输入的数据被正确处理和显示,以防止恶意脚本的注入。另外,使用安全的编码实践(如转义特殊字符)也是重要的,如变“<script>”为 &lt;script&gt,从而直接显示而不会作为脚本执行。

  • XSRF 跨站请求伪造 攻击者利用用户已经登录认证的状态下,通过诱使用户访问特定网页或点击恶意链接,来执行非预期的操作。攻击者通常构造一个恶意请求,该请求会利用受害者的身份认证信息,向目标网站发送请求,以执行一些恶意操作。这些操作可能包括更改用户设置、发起资金转账、删除数据等。

    为了防止 XSRF 攻击,网站开发人员可以采取一些防范措施,如使用随机生成的 CSRF 令牌来验证每个请求的合法性、限制敏感操作的访问权限、使用 HTTP 头部中的 Referer 字段等。此外,用户也可以采取一些措施,如定期清除浏览器的缓存和 cookie,不点击可疑的链接,以减少受到 XSRF 攻击的风险。

2. 性能优化

性能优化一句话总结:是让「看到页面」这件事情尽量早、尽量轻、尽量流程。

可以分为六个方面:

  1. 网络加载优化;
  2. 渲染层优化;
  3. JavaScript 执行优化;
  4. 图片与资源优化;
  5. 构建层优化(webpack/vite)
  6. 用户体验提升优化(非性能指标,但影响观感)

一、网络加载优化(资源到达浏览器前)

技术点说明
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...