<link rel="stylesheet" href="style1.css">
<link rel="stylesheet" href="style2.css">
<script src="script1.js">script>
<script src="script2.js">script>
<link rel="stylesheet" href="combined.css">
<script src="combined.js">script>
<script src="https://cdn.example.com/jquery.min.js">script>
<link rel="stylesheet" href="https://cdn.example.com/styles.css">
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
Cache-Control
和 ETag
)缓存静态资源。Cache-Control: max-age=31536000
DocumentFragment
)批量操作 DOM。DocumentFragment
const fragment = document.createDocumentFragment();
for (let i = 0; i < 100; i++) {
const div = document.createElement('div');
div.textContent = `Item ${i}`;
fragment.appendChild(div);
}
document.body.appendChild(fragment);
document.getElementById('parent').addEventListener('click', function(event) {
if (event.target.tagName === 'BUTTON') {
console.log('Button clicked:', event.target.textContent);
}
});
// main.js
const worker = new Worker('worker.js');
worker.postMessage('Start');
worker.onmessage = function(event) {
console.log('Message from worker:', event.data);
};
// worker.js
self.onmessage = function(event) {
const result = heavyCalculation();
self.postMessage(result);
};
scroll
、resize
)会导致性能问题。function debounce(func, delay) {
let timer;
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => func.apply(this, args), delay);
};
}
window.addEventListener('resize', debounce(() => {
console.log('Window resized');
}, 300));
requestAnimationFrame
setTimeout
或 setInterval
进行动画会导致卡顿。requestAnimationFrame
实现平滑动画。requestAnimationFrame
function animate() {
// 动画逻辑
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
offsetWidth
)会强制浏览器重新计算布局,导致性能问题。// 错误示例
for (let i = 0; i < elements.length; i++) {
elements[i].style.width = elements[i].offsetWidth + 10 + 'px';
}
// 正确示例
const widths = [];
for (let i = 0; i < elements.length; i++) {
widths.push(elements[i].offsetWidth);
}
for (let i = 0; i < elements.length; i++) {
elements[i].style.width = widths[i] + 10 + 'px';
}
<img data-src="image.jpg" alt="Lazy load image" class="lazyload">
<script>
document.addEventListener('DOMContentLoaded', function() {
const images = document.querySelectorAll('.lazyload');
images.forEach(img => {
img.src = img.dataset.src;
});
});
script>
async
或 defer
属性异步加载脚本。<script src="script.js" async>script>
<script src="script.js" defer>script>
通过以上优化措施,可以显著提升页面性能:
requestAnimationFrame
、避免强制同步布局。结合代码示例,可以更直观地理解每种优化方法的具体实现和应用场景。在实际开发中,应根据具体需求选择合适的优化策略,并通过性能分析工具(如 Lighthouse、Chrome DevTools)持续监控和优化页面性能。