缓存读取、批量处理及API设计阶段优化,前端性能优化重要手段

GET /api/settings
Cache-Control: max-age=3600, must-revalidate

你期望前端页面加载速度快吗,你期望前端页面体验好吗?做好性能优化这件事非常重要,接下来会跟你详细说一说前端页面性能优化的相关事项。

users.forEach(userId => {
  fetch(`/api/user/${userId}`);
});

fetch(`/api/users?ids=${users.join(',')}`);

API设计适配

GET /api/products?page=1
GET /api/products?page=2

进行API设计的时候,要全面考量业务场景与需求,如此才可以给前端提供更恰当的接口。就拿分页接口来讲,它能够将数据划分成批次传递给前端,从而减轻一次性加载的压力。举例来说,新闻APP的新闻列表页,在使用分页接口后,每次仅加载一部分新闻。全量数据接口在有需求的时候,能够提供完整数据,便于前端开展全局操作。

GET /api/products?pageStart=1&pageSize=20 // 获取第一页数据
GET /api/products?pageStart=21&pageSize=20 // 获取第二页数据

GET /api/products?getAll=true // 获取所有数据,前端进行分页处理

异步与按需加载

异步加载是优化前端性能的有效办法,按需加载也是优化前端性能的有效办法,它们能减少页面初始化时的资源加载压力,进而提升用户体验,在单页面应用和移动应用中,这两种策略很有效,比如电商 APP 的商品详情页,图片采用异步加载,用户滚动到哪儿,图片就加载到哪儿,避免了一开始就加载大量资源。


<script async src="script.js"></script>

// Vue.js 中异步组件加载示例
import('./MyAsyncComponent.vue').then(MyAsyncComponent => {
  this.components['async-component'] = MyAsyncComponent.default;
});

DOM操作优化


<img v-lazy="imageUrl" alt=".lazy loaded image" />
// 或者使用Intersection Observer API
<img src="placeholder.png" data-src="real-image.jpg" class="lazyload" />

优化对DOM的操作,这对于提升前端网页性能而言很关键,要是频繁开展DOM操作,就会致使浏览器进行重绘以及重排,从而影响页面的渲染效率,其核心思路是减少不必要的DOM访问,需要尽量集中并推迟修改,比如说,要是要修改多个DOM元素的样式,不要逐个去修改,而是先在JavaScript里把需要修改的样式整理妥当,接着再一次性进行修改。

// Vue Router 中异步加载路由组件
const routes = [
  {
    path: '/user/:id',

服务器性能优化

component: () => import('@/views/UserProfile.vue'), // 动态导入组件 }, ];

CSS动画与布局

CSS动画十分关键,布局优化也相当重要。借助CSS3的transform和opacity属性来制作动画,浏览器会开启GPU加速,这种加速比普通的CSS属性改变更具效率。能够运用浏览器开发者工具监测动画性能,查看是否存在过度渲染等问题。制作一个简单的按钮平移动画,运用transform,可使动画既流畅,又快速。

let listItems = ['item1', 'item2', 'item3'];
let fragment = document.createDocumentFragment();
for (let item of listItems) {
  let li = document.createElement('li');
  li.textContent = item;
  fragment.appendChild(li);
}
document.getElementById('list').appendChild(fragment);

预加载与预渲染

预加载是一项常用的技术,它可以提升用户感知性能,还能够加快整体的加载速度。预渲染也是一项常用技术,也能够起到类似的作用。预渲染通常在构建的时候,生成特定路由下的静态HTML文件。对于单页应用,有一些工具能够在服务器端渲染初始视图。在这个过程中,我们需要对数据进行格式转换,将其从一种格式变为另一种格式,这样后续的分析工作和处理工作才能顺利进行。

代码执行优化

.example {
  will-change: transform; /* 提前告知浏览器此元素可能发生变化 */
  transition: transform 0.3s ease-out;
}
/* 示例动画 */
.example:hover {
  transform: translateX(100px);
}

代码执行优化有个主要目的,这个目的是让JavaScript代码运行得更高效,它可以减少不必要的计算,还能避免阻塞UI线程,具体方法包括避免长任务、使用节流和防抖等,比如搜索框输入联想功能,运用防抖可避免频繁请求数据。另外,在JavaScript里,降低算法的时间复杂度是很关键的,降低算法的空间复杂度也是很关键的,要能够采用更高效的算法去处理数据。

function animate() {
  // 更新元素状态
  element.style.transform = `translateX(${newPosition}px)`;
  // 请求下一帧动画
  requestAnimationFrame(animate);
}
animate();


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注