如何提高前端应用的性能?

如何提高前端应用的性能?

1. 代码优化

压缩和合并资源

javascript 复制代码
// 使用webpack等构建工具进行资源压缩
module.exports = {
  optimization: {
    minimize: true
  },
  plugins: [
    new TerserPlugin() // 代码压缩
  ]
}

按需加载

javascript 复制代码
// React的懒加载组件
const LazyComponent = React.lazy(() => import('./LazyComponent'));

减少DOM操作

javascript 复制代码
// 使用文档片段减少重绘
const fragment = document.createDocumentFragment();
items.forEach(item => {
  const li = document.createElement('li');
  li.textContent = item;
  fragment.appendChild(li);
});
list.appendChild(fragment);

2. 资源优化

图片优化

  • 使用WebP格式替代JPEG/PNG
  • 实现懒加载
html 复制代码
<img loading="lazy" src="image.webp" alt="示例">

字体优化

css 复制代码
@font-face {
  font-display: swap; /* 避免FOIT问题 */
}

CDN加速

html 复制代码
<script src="https://cdn.example.com/library.js"></script>

3. 渲染优化

减少重排重绘

javascript 复制代码
// 使用transform代替top/left
element.style.transform = 'translateX(100px)';

使用虚拟列表

javascript 复制代码
// React虚拟列表示例
import { FixedSizeList as List } from 'react-window';
<List height={150} itemCount={1000} itemSize={35}>
  {Row}
</List>

使用will-change

css 复制代码
.animate-element {
  will-change: transform;
}

4. 缓存策略

Service Worker

javascript 复制代码
// 注册Service Worker
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js');
}

HTTP缓存头

ini 复制代码
Cache-Control: max-age=31536000

5. 网络优化

预加载关键资源

html 复制代码
<link rel="preload" href="critical.css" as="style">

使用HTTP/2

nginx 复制代码
# Nginx配置HTTP/2
listen 443 ssl http2;

6. 监控与分析

性能指标

javascript 复制代码
// 测量关键性能指标
const { loadEventEnd, navigationStart } = performance.timing;
const pageLoadTime = loadEventEnd - navigationStart;

Lighthouse审计

bash 复制代码
npx lighthouse https://example.com

7. 框架优化

React优化

javascript 复制代码
// 使用React.memo避免不必要渲染
const MemoComponent = React.memo(MyComponent);

Vue优化

javascript 复制代码
// 使用v-once处理静态内容
<div v-once>{{ staticContent }}</div>

8. 移动端优化

触摸事件优化

javascript 复制代码
// 使用passive事件监听器
element.addEventListener('touchstart', handler, { passive: true });

减少动画复杂度

css 复制代码
/* 优先使用transform和opacity */
.animate {
  transform: scale(1.2);
  opacity: 0.8;
}

9. 安全优化

CSP策略

html 复制代码
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">

避免XSS

javascript 复制代码
// 使用textContent而不是innerHTML
element.textContent = userInput;

10. 持续优化

A/B测试

javascript 复制代码
// 通过特性开关控制新功能
if (features.newOptimization) {
  // 新优化逻辑
}

性能预算

json 复制代码
// package.json中添加性能预算
"performance": {
  "budgets": {
    "resources": "200kb"
  }
}
相关推荐
Lsx_4 分钟前
微信支付接入全流程:JSAPI支付、小程序支付与H5支付
前端·javascript·全栈
OpenTiny社区21 分钟前
React 正式登场!GenUI SDK v1.4.0 三框架渲染、出码与 Agent 生态重磅升级~
前端·ai编程
试图让你心动31 分钟前
【无标题】
前端·javascript·vue.js
Hilaku33 分钟前
为什么每个前端都应该拥有一个自己的独立博客?
前端·javascript·程序员
燕落南枝37 分钟前
CSS 后代选择器与子代选择器:从入门到实战
前端·css
Amos_Web40 分钟前
Rspack 源码解析(二十八):HtmlRspackPlugin 如何把模板变成带资源标签的最终产物
前端
马可家的菠萝43 分钟前
个人知识库怎么建?从一个正在学的技术主题开始
前端·笔记·知识管理·个人知识库
几何心凉43 分钟前
端到端具身交互智能正式上线:让 AI 通过屏幕和机器人,真正走进现实世界
前端·人工智能·实时互动·机器人·交互
木圭的AI时代指南1 小时前
实测 MiniMax M3.1 Flash:同一道 Three.js 大题,两个 agent 差出 4.6 倍
开发语言·javascript·ecmascript
西红柿炖牛腩3541 小时前
3D 模型压缩脚本又报错又配环境?换个不用维护的方案
javascript·3d·性能优化