写代码不光是让它能跑起来,还得跑得快。就像做饭,熟了是一回事,味道好不好又是另一回事。很多人写的程序功能没问题,但一到高并发或者数据量上来,页面卡得像老式录像机。这时候,就得回头看看代码里有没有“拖油瓶”。
减少重复计算
有些函数被反复调用,每次都要重新算一遍同样的结果。比如一个获取用户权限的函数,如果这个用户没改权限,其实完全可以把结果缓存下来。下次直接读,省下不少时间。
const permissionCache = {};
function getUserPermission(userId) {
if (permissionCache[userId]) {
return permissionCache[userId];
}
const permission = fetchFromServer(userId); // 模拟耗时操作
permissionCache[userId] = permission;
return permission;
}
别小看这一层缓存,上线后数据库压力立马降下来。
避免不必要的 DOM 操作
前端同学最容易犯的错就是频繁操作 DOM。比如循环里每轮都往页面加个 div,浏览器得来回重绘、回流,卡得不行。正确的做法是先拼好结构,再一次性插入。
let html = '';
for (let i = 0; i < 1000; i++) {
html += '<div>Item ' + i + '</div>';
}
document.getElementById('list').innerHTML = html;
要是非得用 appendChild,至少先把元素都加到文档片段里,最后再上树。
懒加载和节流策略
图片多的页面,全一股脑加载,用户等得心烦。用懒加载,滑到哪加载哪,体验立马提升。还有事件监听,比如窗口滚动、输入框搜索,别一动就发请求。加个节流,控制频率,服务器也轻松。
function throttle(func, delay) {
let inThrottle;
return function() {
if (!inThrottle) {
func.apply(this, arguments);
inThrottle = true;
setTimeout(() => inThrottle = false, delay);
}
};
}
善用索引,别让数据库干苦力
后端查数据,WHERE 条件字段没索引?那基本等于让数据库翻完整本电话簿找一个人。特别是用户登录、订单查询这种高频接口,主键、外键、状态字段该建索引就建。但也不能滥用,写得多的表,索引太多反而拖慢插入速度。
压缩资源,减小体积
JS、CSS 文件上线前不压缩?那用户下载的可能是三倍大的代码。现代打包工具都能自动做这件事。还有图片,WebP 格式比 JPEG 小一半,清晰度不差,该换就换。网络学堂这类站点,用户可能用手机流量访问,省一点是一点。
异步处理耗时任务
用户上传个文件,你非得等转码完才返回?那他只能盯着加载动画发呆。不如立刻回复“已接收”,然后后台慢慢处理,处理完了发个通知。用户体验好了,服务器也不会因为堆积请求而崩掉。