网站性能优化指南

当用户抱怨网站打开慢,或者发现网站性能评分不理想时,这篇性能优化指南可以帮你找到解决方案。让我们通过系统化的方法,全面提升网站性能。
一、Web性能指标体系
1.1 核心Web指标(Core Web Vitals)
首次内容绘制(FCP)应控制在1.8秒以内:
javascript
// 监控FCP性能new PerformanceObserver((entries) => {
for (const entry of entries.getEntries()) {
console.log(`FCP: ${entry.startTime}`);
// 发送到性能监控系统
sendToAnalytics('FCP', entry.startTime);
}}).observe({entryTypes: ['paint']});最大内容绘制(LCP)建议在2.5秒内完成:
javascript
new PerformanceObserver((entries) => {
for (const entry of entries.getEntries()) {
console.log(`LCP: ${entry.startTime}`);
sendToAnalytics('LCP', entry.startTime);
}}).observe({entryTypes: ['largest-contentful-paint']});首次输入延迟(FID)应保持在100ms以下:
javascript
new PerformanceObserver((entries) => {
for (const entry of entries.getEntries()) {
console.log(`FID: ${entry.processingStart - entry.startTime}`);
sendToAnalytics('FID', entry.processingStart - entry.startTime);
}}).observe({entryTypes: ['first-input']});1.2 RAIL性能模型
Response(响应):
用户输入响应时间<100ms
动画帧率保持60fps
滚动和动画的流畅度
Animation(动画):
javascript
// 优化动画性能function optimizeAnimation() {
// 使用requestAnimationFrame
requestAnimationFrame(() => {
// 执行动画
element.style.transform = `translateX(${position}px)`;
// 继续下一帧
if (isAnimating) {
optimizeAnimation();
}
});}Idle(空闲):
javascript
// 利用空闲时间预加载资源requestIdleCallback(() => {
prefetchNextPageResources();}, { timeout: 2000 });Load(加载):
首页内容<1秒完成加载
延迟加载非关键资源
实现渐进式加载
二、性能优化实践
2.1 服务器优化
Nginx配置优化:
nginx
# 启用Gzip压缩gzip on;gzip_types text/plain text/css application/json application/javascript;gzip_min_length 1000;gzip_comp_level 6;# 启用缓存location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";}# 启用HTTP/2listen 443 ssl http2;PHP-FPM优化:
ini ; 调整进程数pm = dynamicpm.max_children = 50pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 35; 启用OPcacheopcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000
2.2 数据库优化
索引优化:
sql -- 为常用查询字段创建索引CREATE INDEX idx_user_name ON users(username);CREATE INDEX idx_created_at ON posts(created_at);-- 使用组合索引优化多条件查询CREATE INDEX idx_user_status_created ON users(status, created_at);
查询优化:
sql -- 优化LIKE查询SELECT * FROM posts WHERE title LIKE 'prefix%'; -- 可以使用索引-- 避免使用SELECT *SELECT id, title, content FROM posts WHERE user_id = 1;-- 使用EXPLAIN分析查询EXPLAIN SELECT * FROM users WHERE username = 'test' AND created_at > '2024-01-01';
2.3 前端性能优化
资源加载优化:
html
<!-- 关键CSS内联 --><style> /* 首屏关键样式 */ .header { ... } .banner { ... }</style><!-- 非关键CSS异步加载 --><link rel="preload" href="style.css" as="style" onload="this.rel='stylesheet'">延迟加载实现:
javascript
// 图片懒加载const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.src = entry.target.dataset.src;
observer.unobserve(entry.target);
}
});});document.querySelectorAll('img[data-src]').forEach(img => observer.observe(img));三、监控与告警
3.1 性能监控实现
javascript
// 性能数据采集function collectPerformanceData() {
const timing = performance.getEntriesByType('navigation')[0];
return {
TTFB: timing.responseStart - timing.requestStart,
domReady: timing.domContentLoadedEventEnd,
pageLoad: timing.loadEventEnd,
resources: performance.getEntriesByType('resource')
};}// 发送性能数据function sendPerformanceData(data) {
navigator.sendBeacon('/collect', JSON.stringify(data));}3.2 告警阈值设置
建议的告警阈值:
TTFB > 500ms
页面加载 > 3秒
资源加载错误率 > 1%
CPU使用率 > 80%
四、实践建议
定期进行性能评估和优化,建议每月至少一次全面检查。
合理设置监控告警,避免误报和漏报。
记录优化效果,建立性能优化基准数据。
可以使用性能检测工具进行定期检测。
如果您在优化过程中遇到问题,欢迎在评论区交流讨论。

豫公网安备41160202000677