性能优化进阶指南(一):加载时间优化

前言

作为前端开发人员,优化网页加载速度是一个很大的挑战。尽管我们可以依靠新技术和软件来解决一些问题,但在我看来,大多数工具和技术都只是工具,最终的解决方案来自于经验和知识。本篇文章将为你详细介绍如何通过优化加载时间来提高网站性能。

了解网页加载过程

在进行加载时间优化之前,我们需要了解网页是如何被加载的。下面是一些与网页加载有关的关键词:

  • DNS 解析:浏览器需要解析 URL 中的域名,并查找对应的 IP 地址。
  • HTTP 请求:浏览器会向服务器发送多个 HTTP 请求,以下载页面中的所有资源,如 HTML、CSS、Javascript、图片等。
  • 服务器响应:服务器返回 HTTP 响应,以及包含请求的资源的数据。
  • DOM 构建:浏览器解析 HTML 并构建文档对象模型(DOM)。
  • CSSOM 构建:浏览器解析 CSS,并构建 CSS 对象模型(CSSOM)。这基本上是浏览器要渲染页面所需的样式表。
  • 渲染:浏览器将 DOM 和 CSSOM 进行组合,并将它们转换成渲染树。
  • 页面完成加载:页面被完全加载并呈现给用户。

优化网页加载速度

你可以使用以下技术和方式来优化网页加载速度。

1. 减少 HTTP 请求

每个 HTTP 请求都会对页面加载时间产生负面影响。如果一个页面有大量的资源需要加载,那么这会使网页加载速度更慢。因此,通过以下方式减少 HTTP 请求可以加速页面加载时间:

使用 CSS 雪碧图

CSS 雪碧图是一种将多张图片合并成一张的方式,通过背景图片定位或者图片的定位、宽高属性来显示图像的某一部分。这可以向用户提供一个单一的 HTTP 请求以代替多个请求,减少 HTTP 请求的数量从而加快网页加载速度。

CSS 雪碧图实现:

-- --- --
----- -
    -------- -------------
    ----------------- ----------------
-
-- -------- --
------------ -
    -------------------- - --
    ------ -----
    ------- -----
-
-- -------- --
---------- -
    -------------------- ----- --
    ------ -----
    ------- -----
-

将 CSS 和 JavaScript 文件进行压缩和合并

压缩代码非常有用,因为大小较小的一个文件可以更快地下载,减少了用户需要等待的时间。如果您有多个 CSS 和 JavaScript 文件,那么将它们合并为单个文件也是非常有效的方式。

2. 优化图像

图片是网页中典型的大型资源之一。图像可以非常大,从而导致网页加载速度缓慢。为了优化图像,并缩短网页的加载时间,可以:

压缩图片

压缩可以减小图片的大小,从而减少下载时间,加速页面加载速度。您可以使用可用的免费工具,如 tinypng.com,以及其他图像压缩工具对您的图像进行压缩。

指定图像尺寸

将图片缩放为适合页面的大小可以减少下载时间。

使用 JPEG 格式

不同的格式适合不同类型的图片。例如,JPEG 格式适用于照片,因为这种格式不会在减少“美学”方面出现质量损失。

3. 减少重定向

重定向会延长页面加载时间,因为它需要最多两个 HTTP 请求-一次重定向和一次初始请求。为了优化并减少重定向,可以:

删除重定向链接

如果您要求通过重定向链接到另一个网站的链接,那么用户会经历“跳转”页面,这对用户体验来说不是很好。

直接连接到首选的网站

如果有多个可用的网站地址,请确保直接连接到首选的网站。

4. 使用浏览器缓存

浏览器缓存是一种可以减少页面加载时间的方式。这是因为第一次浏览页面时,文件会被下载,保存在客户端浏览器的缓存中。通过缓存,浏览器在下次加载页面时不需要重复下载相同的文件。

5. 使用 CDN

内容分发网络(CDN)是一种可以加速网页加载的工具。使用 CDN 可以将网站的静态资源分布在多个地理位置,并利用离用户所在地最近的资源提供服务,这可以加快网页的速度。

6. 延迟加载

延迟加载可以将资源下载、解析和呈现延迟到浏览器需要它们的那个时间点。这意味着网页可以在较短的时间内加载,即使它们包含许多资源,例如图像和视频等。

以下是 JavaScript 实现的延迟加载代码:

-- -------
------------- - ---------- -
  --- -------------- - --------------------------------------
  --- ------------------------

  -------- ---------- -
    --------------------------- -
      --------------------------------------
    -    

    ----------------------- - --------------------- -
      --- --------- - -------------------
      ------------------------------------ -
          ---------------- - ------------------- - ----------- -
            ------- - ----------------
            -----------------------------
          -
      ---
      ------------------------ -- -- - 
        -------------------------------------- ----------
        ------------------------------------ ----------
        ----------------------------------------------- ----------
      -
    -- ----
  -

  ----------------------------------- ----------
  --------------------------------- ----------
  -------------------------------------------- ----------
-

7. 减小文件大小

文件大小很大也会减缓网页加载速度。尽量使用小文件、压缩文件、删除不必要的东西等以减小文件大小。虽然这可以是一项耗时的工作,但减小文件大小对网页的速度产生的影响很大。

总结

本篇文章介绍了加速网页加载的多种方式。虽然总有一些不同的情况,但大多数优化有其依据科学的方法和技术。通过减少 HTTP 请求、优化图像、减少重定向、使用浏览器缓存、使用 CDN、延迟加载和减小文件大小等方式,可以加速页面加载速度。

我希望你已经学到了一些很有用的东西,能够在你的下一个项目中为你的页面加载速度做出贡献。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65a9bbd8add4f0e0ff31f900


猜你喜欢

  • Docker 容器、镜像和仓库的概念

    在前端开发中,我们经常需要用到不同的环境来测试我们的应用程序。这就需要我们在不同的环境中配置和安装各种软件和库来满足我们的开发需求。但是在实际操作过程中,常常会出现环境配置不一致、版本不统一等问题,这...

    9 个月前
  • [ES11] ECMA 新标准正式发布,JDK16 也来了

    前言:ECMA(European Computer Manufacturers Association)是一个非营利组织,致力于制定国际标准,包括计算机系统和互联网技术。

    9 个月前
  • Promise 的缺陷及如何支持 Promise 链中的取消操作

    什么是 Promise Promise 是一种常见的编程技术,用于管理异步操作。 通过对 Promise 对象的操作,可以指定在异步操作完成时执行的代码, 而不必等待操作完成。

    9 个月前
  • 在 Custom Elements 中使用 RxJS 来处理异步数据

    在现代的 Web 开发中,组件化已经成为了一种趋势。随着 Web Components 的发展,Custom Elements 成为了实现 Web Components 的标准。

    9 个月前
  • 解决 Flexbox 布局中的 Flex 元素不占满父容器问题

    Flexbox 布局是现代Web开发中非常常用,也是实现响应式和可适应的网页布局的强大工具。但是,经常会出现一些问题,例如在Flex布局中Flex元素不占满父容器。

    9 个月前
  • Kubernetes Serverless 深入解读:Knative 与 Serverless 应用

    引言 Kubernetes 是一款由 Google 推出的轻量级容器编排系统,被广泛应用于云原生应用的开发和部署中。随着 Serverless 技术的兴起,Kubernetes Serverless ...

    9 个月前
  • Kubernetes 集群部署踩坑指南

    在前端开发中,Kubernetes 集群已经成为了部署应用的首选,其强大的扩展性和高可用性,让我们不必担心应用如何适应日益增长的用户量。 然而,在实践过程中,Kubernetes 集群部署经常会出现一...

    9 个月前
  • 解决 CSS Grid 在 Firefox 下的兼容性问题

    在当今的 web 开发中,CSS Grid 已经成为了前端布局的标配。然而,我们在实际开发中也会遇到一些 CSS Grid 在 Firefox 下的兼容性问题,例如 grid-template-row...

    9 个月前
  • Fastify 中如何使用 MongoDB 及 Mongoose 操作数据库

    引言 Fastify 是目前比较火热的 Node.js 框架之一,因为其设计简洁,速度极快而被广泛应用。在 Fastify 项目中,使用 MongoDB 数据库是非常常见的一种情况,而 Mongoos...

    9 个月前
  • MongoDB 集合命名规则及使用说明

    前言 MongoDB 是一个开源的 NoSQL 数据库,对于前端来说,对其的了解和使用已经成为必备技能之一。而在 MongoDB 中,集合(Collection)是存储数据的容器,因此对集合的命名规则...

    9 个月前
  • SASS 中如何实现 API 的应用

    随着互联网技术的快速发展,RESTful API 已成为前端开发中最常用的数据交互方式之一。在开发中,我们常常需要根据 API 返回的数据来渲染我们的页面。SASS 作为一种 CSS 预处理器,可以很...

    9 个月前
  • 在 Angular 单页面应用程序(SPA)中,如何使用路由实现滚动位置恢复

    介绍 使用单页面应用程序(SPA)构建应用程序,即使用Angular时,路由非常重要。在SPA中,所有导航都由路由处理,当我们导航到下一个页面时,用户通常希望滚动位置恢复到上一个页面离开时的位置。

    9 个月前
  • TypeScript 中的装饰器模式与依赖注入

    随着前端应用的复杂度不断提高,我们需要越来越多的工具和技术来帮助我们编写和维护高质量的代码。其中,TypeScript 是一种非常流行的语言,它通过引入静态类型和其他一些特性,帮助我们编写更加可靠和健...

    9 个月前
  • ES6 中的 spread 语法:数组和对象的扩展使用方法

    ES6 中的 Spread 语法:数组和对象的扩展使用方法 ES6 中的 Spread 语法,是一种展开操作符(又称三个点运算符),它可以方便地将数组和对象展开成一个逗号分隔的序列。

    9 个月前
  • Jest snapshot 测试实践总结

    Jest snapshot 测试实践总结 作为前端开发人员,我们经常需要进行单元测试。在 React 应用中,Jest 是一个被广泛使用的测试框架。Jest 提供了一种称为 "snapshot" 的测...

    9 个月前
  • Deno 中如何实现 WebSocket 长连接?

    WebSocket 是一种支持双向通信的网络协议,它可以在客户端和服务器之间建立持久性的连接,并实现实时双向通信。在前端开发中,通常使用 WebSocket 实现推送通知、实时数据更新等功能。

    9 个月前
  • Sequelize 中的校验方法

    Sequelize 是一种针对 Node.js 的 ORM 工具,可用于管理数据表格和执行各种 CRUD 操作。除此之外,Sequelize 还有一些很有用的功能,比如它提供了内置的校验方法,可以让我...

    9 个月前
  • RxJS 算子 merge 和 concat 的区别及用法

    前言 在前端开发中,我们经常会遇到需要从多个数据源中获取数据并进行处理、渲染的情况。这时候,RxJS 提供的 merge 和 concat 算子就可以发挥非常大的作用。

    9 个月前
  • 使用 Socket.io 实现弹幕功能的教程

    弹幕(Danmaku)是一种流行的互动型视频评论形式,类似于实时评论,弹幕经常用于视频直播和在线观看。本文将介绍使用 Socket.io 实现弹幕功能的方法。 Socket.io 的基本介绍 Sock...

    9 个月前
  • 初学者必备的 LESS 编译技巧

    LESS 是一种 CSS 预处理器,可以帮助前端开发者在编写 CSS 时提高效率,减少代码冗余。它引入了变量、函数、嵌套规则等概念,使得开发者能够更轻松地管理和组织 CSS。

    9 个月前

相关推荐

    暂无文章