赞
踩
前端性能优化方向
都可以考虑用空间换时间
让加载更快
将重复的代码提炼为公共组件、公共样式、全局变量和函数等。
将网页和数据一起加载,一起渲染,如早先的 JSP ASP PHP,现在的 vue React SSR
非 SSR(前后端分离) : 先加载网页,再加载数据,再渲染数据
让渲染更快
<head>
<meta charset="UTF-8">
<title>网页标题</title>
<!-- 引入外部 CSS 文件 -->
<link rel="stylesheet" href="styles.css">
<!-- 内联 CSS 样式 -->
<style>
body {
background-color: #f1f1f1;
font-family: Arial, sans-serif;
}
h1 {
color: blue;
}
</style>
</head>
<body>
<!-- 此处省略了其他HTML内容 -->
<!-- 将JavaScript代码放置在body标签的最后部分 -->
<script src="your_js_file.js"></script>
</body>
window.addEventListener("load", function () {
// 页面的全部资源加载完才会执行,包括图片视频等
});
document.addEventListener("DOMContentLoaded", function () {
// DOM 渲染完即可执行,此时图片、视频可能还没有加载完
});
监听页面的滚动,当资源(如图片/视频)即将进入视口(用户可见的网页区域)时,再加载资源。
具体实现方法可参考
含义:节省流量,即减少高频事件内操作的执行频率。
目标:让高频事件内的操作,按预期的频率触发
功效:降低了高频事件内操作的频率,避免了性能的浪费,有效降低页面卡顿的风险。
场景:
原理:见下图
代码 : 需能手写
// 节流
function throttle(fn, delay = 100) {
let timer = null
return function () {
if (timer) {
return
}
timer = setTimeout(() => {
fn.apply(this, arguments)
timer = null
}, delay)
}
}
使用
const div1 = document.getElementById('div1')
div1.addEventListener('drag', throttle(function (e) {
console.log(e.offsetX, e.offsetY)
}))
含义:防止抖动,即防止高频事件内的操作重复触发
目标:让高频事件内的操作等待高频事件结束时触发一次
功效:降低了高频事件内操作的频率,避免了性能的浪费,有效降低页面卡顿的风险。
场景:
原理:见下图
代码 : 需能手写
// 防抖
function debounce(fn, delay = 500) {
// timer 是闭包中的
let timer = null
return function () {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
fn.apply(this, arguments)
timer = null
}, delay)
}
}
使用
const input1 = document.getElementById('input1')
input1.addEventListener('keyup', debounce(function (e) {
console.log(input1.value)
}, 600))
选择性能更优的页面渲染方案
需实时更新的动画,使用 RAF
简单的静态或者中等复杂度的动画,用 CSS
若使用的 setTimeout 实现的动画,建议改用 CSS 或 RAF 进行优化!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。