内容大纲
前端性能优化概述
前端性能优化是提高用户体验的关键因素,它涉及多个方面,包括网络传输、渲染速度、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压缩
curl -H “Accept-Encoding: gzip” -I https://fgedu.net.cn
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
浏览器缓存
合理设置缓存策略可以减少重复请求,提高页面加载速度。
设置缓存头
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 等,使用防抖和节流可以减少函数执行次数。
防抖示例
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);
节流示例
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配置示例
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
npm install -g lighthouse
# 运行性能测试
lighthouse https://fgedu.net.cn –output=html –output-path=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
