jQuery 性能优化手册 推荐

前言

本手册汇总 jQuery 的性能优化技巧,旨在帮助开发者提高前端性能,减小页面对浏览器的负担,提高用户体验。本文将按照优化流程的时间顺序,从 HTML 结构优化、CSS 选择器优化、JavaScript 优化、Ajax 优化以及其他方面分别进行讲解。

一、HTML 结构优化

  1. 减少 DOM 操作

尽量减少对 DOM 的操作次数,因为这会涉及到渲染时间和重绘等时间,对性能会产生较大的影响。建议以下几点:

1.1 将 DOM 缓存起来,在必要时修改缓存的数据,然后再一次性的修改 DOM。例如,在表格中添加多行数据时,可以将这些数据拼接为一个字符串,最后一次性的添加到表格中。

代码示例1:添加多行数据的方法。

// 不推荐的写法:重复修改DOM结构
function addRows(data) {
  for (let i = 0; i < data.length; i++) {
    const tr = document.createElement('tr');
    const td1 = document.createElement('td');
    const td2 = document.createElement('td');
    td1.innerText = data[i].name;
    td2.innerText = data[i].age;
    tr.appendChild(td1);
    tr.appendChild(td2);
    document.getElementById('table').appendChild(tr);
  }
}

// 推荐的写法:先缓存DOM结构,再一次性添加到页面上
function addRows(data) {
  let rows = '';
  for (let i = 0; i < data.length; i++) {
    rows += '<tr><td>' + data[i].name + '</td><td>' + data[i].age + '</td></tr>';
  }
  $('#table').append(rows);
}

1.2 尽量使用 class 替代 ID,因为使用 ID 在页面中会导致大量的无用 CSS 计算。同时,请尽量避免在 class 中使用通配符和嵌套选择器,因为这会增加 CSS 解析器的负担。

  1. 避免使用 table 布局

table 布局和 div 布局相比,性能要低很多,尤其是在加载大量数据时。尽量使用 div 布局或 flex 布局。需要注意的是,div 布局可能会导致标签嵌套过度,因此请尽量避免这种情况的发生。

代码示例2:使用 div 布局实现等高格子的方法。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>等高格子布局示例</title>
    <style>
      .container {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
      }
      .item {
        width: 30%;
        margin-bottom: 20px;
        background-color: #ddd;
      }
      .item > div {
        padding: 10px;
        border: 1px solid #666;
      }

      /* 下面为兼容性写法 */
      .container::after {
        content: '';
        flex: auto;
      }
      .item::after {
        content: '';
        height: 0;
        visibility: hidden;
        display: block;
        clear: both;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="item">
        <div>这是一段文本</div>
        <div>这是一段文本</div>
      </div>
      <div class="item">
        <div>这是一段文本</div>
      </div>
      <div class="item">
        <div>这是一段文本</div>
        <div>这是一段文本</div>
        <div>这是一段文本</div>
        <div>这是一段文本</div>
      </div>
      <div class="item">
        <div>这是一段文本</div>
        <div>这是一段文本</div>
      </div>
      <div class="item">
        <div>这是一段文本</div>
      </div>
      <div class="item">
        <div>这是一段文本</div>
        <div>这是一段文本</div>
      </div>
    </div>
  </body>
</html>

二、CSS 选择器优化

  1. 尽量使用 class 选择器

使用 ID 选择器会导致 CSS 的查找效率降低,因此应尽量使用 class 选择器。同时,请尽量少用通配符和后代选择器,因为这会增加选择器的复杂度,降低查找效率。

代码示例3:使用类选择器配置菜单样式。

.menu {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  height: 60px;
  background-color: #fff;
  border-bottom: 1px solid #eee;
}
.menu > div {
  margin-left: 20px;
  margin-right: 20px;
}
  1. 减少样式规则

尽量避免在 CSS 中使用不必要的样式规则,因为这会增加解析的时间。特别是在一个页面中包含着大量的元素时,这会对性能造成很大的影响。

代码示例4:避免不必要的样式规则。

/* 不推荐 */
div {
  color: #000;
}
/* 推荐 */
.message {
  color: #000;
}

三、JavaScript 优化

  1. 合理使用变量和缓存

在使用 JavaScript 时,应该避免频繁地执行重复代码。请尽量使用变量来保存数据,避免重复计算,同时也要注意 DOM 缓存的使用。

代码示例5:优化DOM操作。

// 不推荐
for (let i = 0; i < list.length; i++) {
  const el = document.createElement('div');
  el.innerText = list[i];
  document.body.appendChild(el);
}
// 推荐
let container = document.body;
let fragment = document.createDocumentFragment();
for (let i = 0; i < list.length; i++) {
  const el = document.createElement('div');
  el.innerText = list[i];
  fragment.appendChild(el);
}
container.appendChild(fragment);
  1. setTimeout 和 setInterval

在 JavaScript 中,setTimeout 和 setInterval 可以帮助开发者编写延时执行的代码。但是,使用时需要注意以下几点:

  • setTimeout 和 setInterval 引用的函数将在全局作用域中执行,这意味着它们不能访问父函数的局部变量。
  • 尽量避免使用 setInterval,因为这会导致代码陷入死循环,并且可能会使浏览器变得非常缓慢。
  • 每次调用 setTimeout 和 setInterval 都会引入一定的“延迟”时间,因此应该尽量使用 requestAnimationFrame。

代码示例6:使用 requestAnimationFrame 代替 setTimeout。

function animate() {
  requestAnimationFrame(animate);
  // ...
}
animate();

四、Ajax 优化

  1. 减少 HTTP 请求

在大多数网站上,HTTP 请求是加载时间最长的步骤之一,因此需要尽量减少 HTTP 请求次数。

  1. 合理使用缓存

前端缓存可以避免重复的 HTTP 请求,提高加载速度,同时减轻服务端的压力。因此,应该尽量使用浏览器自带的缓存机制,同时也可以使用 localstorage 等手动缓存方案。

代码示例7:使用 localstorage 缓存表单数据。

function saveData() {
  const form = document.getElementById('form');
  const data = new FormData(form);
  localStorage.setItem('data', JSON.stringify(Object.fromEntries(data.entries())));
}
function loadData() {
  const data = localStorage.getItem('data');
  if (data) {
    const form = document.getElementById('form');
    const entries = Object.entries(JSON.parse(localStorage.getItem('data')));
    for (let i = 0; i < entries.length; i++) {
      const name = entries[i][0];
      const value = entries[i][1];
      const input = form.querySelector(`[name="${name}"]`);
      if (input) {
        input.value = value;
      }
    }
  }
}

五、其他优化

  1. 优化图片

在网页中,图片占据了很大的空间,因此图片优化可以极大地提高页面加载速度。以下是几个常见的图片优化技术:

  • 图片压缩,使用尽量小的文件大小来展示图片。
  • 懒加载,延迟图片的加载时间。
  • CSS 图片精灵,将多张图片合并成一张,减少 HTTP 请求。

代码示例8:使用懒加载优化图片。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>图片懒加载示例</title>
    <style>
      .placeholder {
        width: 500px;
        height: 300px;
        background-color: #eee;
      }
      .image {
        display: none;
        width: 500px;
        height: 300px;
        background-size: cover;
      }
    </style>
  </head>
  <body>
    <div class="placeholder"></div>
    <img class="image" data-src="/path/to/image.jpg">
    <div class="placeholder"></div>
    <img class="image" data-src="/path/to/image.jpg">
    <div class="placeholder"></div>

    <script>
      const images = document.querySelectorAll('.image');
      const len = images.length;
      let count = 0;

      function loadImage() {
        const image = images[count];
        const src = image.getAttribute('data-src');
        const img = new Image();
        img.onload = () => { image.style.backgroundImage = `url(${src})`; };
        img.src = src;
        count++;
        if (count < len) {
          setTimeout(loadImage, 1000);
        }
      }

      if (len > 0) {
        loadImage();
      }
    </script>
  </body>
</html>
  1. 代码压缩

在部署代码之前,请将 JavaScript 和 CSS 进行压缩,这可以极大地减小文件大小。

总结

本手册汇集了各种优化技巧,包括 HTML 结构优化、CSS 选择器优化、JavaScript 优化、Ajax 优化、图片优化等。在实际项目中,我们应该结合具体的情况进行优化,遵循“事件驱动、异步处理、最小化 HTTP 请求、避免重绘和回流”等原则,从而最大化地提高页面性能,提高用户体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery 性能优化手册 推荐 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jQuery UI 幻灯片效果

    以下是关于 jQuery UI 幻灯片效果的详细攻略: jQuery UI 幻灯片效果 jQuery UI 提供了一个名为 slide 的方法,用于实现幻灯片效果。该方法可以使元素在水平垂直方向上滑动,可以设置滑动的方向距离和持续时间。 语法 $( ".selector" ).effect(slide", { direction…

    jquery 2023年5月11日
    00
  • jQuery UI sortable widget延迟选项

    以下是关于 jQuery UI Sortable Widget delay 选项的详细攻略: jQuery UI Sortable Widget delay 选项 delay 选项用于设置拖拽前的延时间,以毫秒为单位。默认值为 0,表示没有延迟。 语法 $( ".selector" ).sortable({ delay: 500 // 延…

    jquery 2023年5月11日
    00
  • jQWidgets jqxKanban模板Content属性

    jQWidgets jqxKanban 模板 Content 属性攻略 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件和工具,可用于创建现代化 Web 应用程序。jqxKanban 是看板组件,用于可视化管理任务和流程。攻略将详细介绍 jqxKanban 模板的 Content 属性该属性用于定义看板卡片的内容。 C…

    jquery 2023年5月10日
    00
  • jQuery实现只允许输入数字和小数点的方法

    要实现只允许输入数字和小数点的功能,可以使用jQuery的事件绑定和事件监听特性来实现。 首先,在html中添加一个输入框,在其上添加一个id属性作为选择器,如下所示: <input type="text" id="input-text" value=""> 然后,在jQuery中注册事…

    jquery 2023年5月28日
    00
  • jQWidgets jqxScrollView refresh()方法

    以下是关于 jQWidgets jqxScrollView 组件中 refresh() 方法的详细攻略。 jQWidgets jqxScrollView refresh() 方法 jQWidgets jqxScrollView 组件的 refresh() 方法用于刷新滚动视图。 语法 $(‘#scrollView’).jqxScrollView(‘refre…

    jquery 2023年5月12日
    00
  • jQWidgets jqxGrid ensurerowvisible()方法

    以下是关于“jQWidgets jqxGrid ensurerowvisible()方法”的完整攻略,包含两个示例说明: 简介 jqx 控件的 ensurerowvisible() 方法于确保指定行可见。当需要滚动表格以使指定行可见时,可以该方法。该方法可以用于控制表格交互效果。 完整攻略 下面是 jqxGrid 控件 ensurerowvisible() …

    jquery 2023年5月10日
    00
  • jQWidgets jqxNotification位置属性

    以下是关于 jQWidgets jqxNotification 组件中位置属性的详细攻略。 jQWidgets jqxNotification 位置属性 jQWidgets jqxNotification 组件的位置属性用于设置通知框的显示位置。 语法 $(‘#notification’).jqxNotification({ position: ‘top-r…

    jquery 2023年5月12日
    00
  • 用jQuery实现的模拟下拉框代码

    使用jQuery实现模拟下拉框可以让我们在页面中自定义样式和动画效果,提升用户体验。下面是实现模拟下拉框的完整攻略: 1. 简介 模拟下拉框是一个常用的前端UI组件,它通过自定义样式和JS脚本实现下拉选择框的效果。在不同的场景中,我们可能通过模拟下拉框来实现国家和地区的选择、日期选择、颜色选择等功能。 下面是一个简单的模拟下拉框示例,可以直接查看效果或者查看…

    jquery 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部