1. 首页 > IT综合教程 > 正文

it教程FG148-前端性能优化

内容大纲

前端性能优化概述

前端性能优化是提高用户体验的关键因素,它涉及多个方面,包括网络传输、渲染速度、JavaScript执行效率等。良好的前端性能可以减少页面加载时间,提高用户交互响应速度,降低服务器负载,学习交流加群风哥微信: itpux-com。

性能指标

  • First Contentful Paint (FCP):首次内容绘制时间
  • Largest Contentful Paint (LCP):最大内容绘制时间
  • First Input Delay (FID):首次输入延迟
  • Cumulative Layout Shift (CLS):累积布局偏移
  • Time to Interactive (TTI):可交互时间

网络优化

资源压缩

压缩HTML、CSS和JavaScript文件可以减少文件大小,提高传输速度。

使用Gzip压缩

# 检查服务器是否启用了Gzip压缩
curl -H “Accept-Encoding: gzip” -I https://fgedu.net.cn

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8

浏览器缓存

合理设置缓存策略可以减少重复请求,提高页面加载速度。

设置缓存头

// Nginx配置示例
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 30d;
add_header Cache-Control “public, max-age=2592000”;
}

CDN使用

使用内容分发网络(CDN)可以将静态资源分发到全球各地的服务器,减少用户访问延迟。

渲染优化

减少DOM节点

过多的DOM节点会增加浏览器的渲染负担,风哥风哥提示:应尽量减少不必要的DOM元素。

避免重排和重绘

  • 使用CSS transform代替top/left等属性
  • 批量修改DOM
  • 使用文档片段(DocumentFragment)
  • 避免在布局期间查询DOM

JavaScript优化

代码分割

将代码分割成多个小块,按需加载,可以减少初始加载时间。

使用动态导入

// 动态导入模块
const module = await import(‘./module.js’);
module.doSomething();

防抖和节流

对于频繁触发的事件,如滚动、 resize 等,使用防抖和节流可以减少函数执行次数。

防抖示例

function debounce(func, wait) {
let timeout;
return function() {
const context = this;
const args = arguments;
clearTimeout(timeout);
timeout = setTimeout(() => {
func.apply(context, args);
}, wait);
};
}

// 使用防抖
const debouncedSearch = debounce(searchFunction, 300);
input.addEventListener(‘input’, debouncedSearch);

节流示例

function throttle(func, limit) {
let inThrottle;
return function() {
const context = this;
const args = arguments;
if (!inThrottle) {
func.apply(context, args);
inThrottle = true;
setTimeout(() => inThrottle = false, limit);
}
};
}

// 使用节流
const throttledScroll = throttle(scrollFunction, 100);
window.addEventListener(‘scroll’, throttledScroll);

CSS优化

CSS选择器优化

  • 使用更具体的选择器
  • 避免使用通配符选择器
  • 避免使用后代选择器

减少CSS文件大小

  • 删除未使用的CSS
  • 合并CSS文件
  • 使用CSS压缩工具

图片优化

选择合适的图片格式

  • JPEG:适合照片等复杂图像
  • PNG:适合需要透明度的图像
  • WebP:现代格式,压缩率更高
  • SVG:适合图标和矢量图形

图片懒加载

// 图片懒加载实现
const lazyImages = document.querySelectorAll(‘img[data-src]’);

if (‘IntersectionObserver’ in window) {
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const image = entry.target;
image.src = image.dataset.src;
imageObserver.unobserve(image);
}
});
});

lazyImages.forEach(image => {
imageObserver.observe(image);
});
}

打包优化

使用Webpack优化

  • 代码分割
  • Tree Shaking
  • 按需加载
  • 缓存优化

Webpack配置示例

module.exports = {
mode: ‘production’,
optimization: {
splitChunks: {
chunks: ‘all’,
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: ‘vendors’,
chunks: ‘all’,
},
},
},
},
output: {
filename: ‘[name].[contenthash].js’,
},
};

性能监控

使用Performance API

// 监控页面加载性能
const performanceData = {
navigation: performance.getEntriesByType(‘navigation’)[0],
resources: performance.getEntriesByType(‘resource’),
};

console.log(‘页面加载时间:’, performanceData.navigation.loadEventEnd – performanceData.navigation.start);

使用Lighthouse

# 安装Lighthouse
npm install -g lighthouse

# 运行性能测试
lighthouse https://fgedu.net.cn –output=html –output-path=report.html

✅ 生成报告: report.html

最佳实践

  • 减少HTTP请求数量
  • 使用HTTP/2或HTTP/3
  • 启用服务器端渲染(SSR)或静态站点生成(SSG)
  • 使用预加载(preload)和预连接(preconnect)
  • 优化关键渲染路径
  • 使用Service Worker实现离线缓存
  • 定期进行性能测试和优化
生产环境风哥建议:

  • 使用CDN分发静态资源
  • 启用Gzip或Brotli压缩
  • 设置合理的缓存策略
  • 优化图片资源
  • 使用代码分割和按需加载
  • 监控并优化关键性能指标

更多学习教程www.fgedu.net.cn

学习交流加群风哥QQ113257174

更多学习教程公众号风哥教程itpux_com

author:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息