解决 SPA 应用中空白页面闪动的问题

问题描述

随着前端技术的不断发展,越来越多的应用采用单页面应用(SPA)架构,通过前端路由来实现页面间的无刷新跳转。然而,由于这种跳转方式是异步加载页面内容的,用户在页面跳转过程中会看到空白页面的闪动,这会给用户带来不好的体验。

原因分析

空白页面闪动的原因是由于在路由异步加载页面内容时,加载完成前页面处于空白状态,这种跳转方式无法避免。但可以通过一些技术手段来减少空白页面的时间。

通常情况下,页面中需要加载的静态资源,包括样式、脚本和图片等,在第一次加载完成后会被浏览器缓存起来,再次访问时就可以直接从缓存中获取,而不需要重新发起请求。那么,如何让SPA页面在加载完成后尽可能减少空白时间呢?

解决方案

1. 预加载

预加载是一种提前加载页面所需资源的方法,可以减少页面加载时间。通常情况下,SPA应用中会采用第三方库如PreloadJSloadjs等来实现预加载。

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

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

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

2. 骨架屏

骨架屏是一种展示加载中状态的页面效果,通常情况下,骨架屏通过页面占位元素来模拟页面结构,展示出“页面正在加载”的状态,让用户感觉页面正在加载中而不是刷白的闪动。

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

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

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

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

3. SSR(服务器端渲染)

SSR是一种将前端页面的渲染工作放在服务器端完成的技术手段,采用这种方式可以在页面请求时直接返回渲染好的页面,避免了前端构建和路由渲染带来的页面空白时间。

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

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

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

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

总结

通过预加载、骨架屏和SSR等方式,我们可以有效地减少SPA应用中空白页面的闪动问题,达到更好的用户体验。这也提醒我们,在开发SPA应用时需要考虑前端性能优化和体验设计,尽可能减少用户的等待时间和空白页面的显示。

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


猜你喜欢

  • 解决 Headless CMS 中数据交换的需求及实现方法

    随着互联网的发展,越来越多的网站和应用程序需要将内容与数据动态化展示,而 Headless CMS 的出现使得这一需求得到了更好的解决。但在使用 Headless CMS 时,如何与前端进行数据交互成...

    1 年前
  • Redux 深入浅出:如何处理复杂数据流

    在现代的 Web 应用程序中,复杂的数据流是很常见的。Redux 是一个流行的状态管理库,它能够帮助我们有效地处理这些复杂的数据流。在本文中,我们将深入了解 Redux,讨论其核心概念、基本工作流程和...

    1 年前
  • 服务器出现故障怎么办?架构优化 Serverless 为你解忧

    在当前越来越注重用户体验的时代,对于前端开发人员来说,网站的性能和稳定性更加重要。但是服务器总是不可避免的会出现故障,直接导致网站的不可用,给用户和运维人员带来很多麻烦和压力。

    1 年前
  • Socket.io 中如何解决连接阈值过低导致服务器宕机的问题?

    在大规模的实时应用中,如何处理大量的连接请求是一个非常重要的问题。较小的连接阈值可能会导致服务器崩溃,而较高的连接阈值则会影响系统的响应速度和可靠性。为了解决这个问题,Socket.io 提供了一些方...

    1 年前
  • Enzyme 如何遍历 React 组件树?

    Enzyme 如何遍历 React 组件树? 在 React 开发过程中,我们经常需要对组件进行测试。而 Enzyme 是 React 测试工具库中的一员,它提供了强大的 API,可以帮助我们方便地遍...

    1 年前
  • 如何在 Next.js 中使用 Webpack?

    前言 在使用 Next.js 进行开发的过程中,我们经常需要使用 Webpack 来进行一些自定义配置。然而,如何在 Next.js 中正确地使用 Webpack 并没有那么简单。

    1 年前
  • Sequelize 中的 include 如何实现多表连接查询

    在 Sequelize 中,include 是用于实现多表连接查询的非常重要的功能。通过 include,我们可以轻松地完成多表查询,包含一对一、一对多、多对多的关系。

    1 年前
  • MongoDB 副本集配置及使用详解

    前言 MongoDB 是一个非常流行的 NoSQL 数据库,它具有高性能、高可用性等优点。其中副本集是 MongoDB 高可用性的重要实现方式,本文将对 MongoDB 副本集相关配置及使用进行详细介...

    1 年前
  • 探究 ES10 中新增的 String Matching 特性

    在 ES10 中,新增了一些 String Matching 特性,包括 String.prototype.matchAll(),String.prototype.replaceAll()和Strin...

    1 年前
  • Angular2 中 RxJS 的使用详解

    RxJS 是 Reactive Extensions for JavaScript 的简称,它是一种用于处理异步数据流的库,它的提出来源于微软的 .NET 平台。Angular2采用RxJS作为其核心...

    1 年前
  • Vue.js 的 Watch 属性和计算属性的区别

    在 Vue.js 中,有两个非常重要的属性:watch 和 computed (计算属性)。在开发过程中,了解它们的区别和用途可以让我们更好地使用 Vue.js。在本文中,我们将深入探讨 watch ...

    1 年前
  • Vue.js 中利用 SSE 完成页面实时更新的方法

    在构建现代 Web 应用程序的过程中,实时更新是非常重要的。这在需要追踪数据或更新其他用户的互动时尤为重要。在 Vue.js 中,我们可以利用浏览器的 SSE(Server-Sent Event)来实...

    1 年前
  • 如何在 Fastify 中使用 Redis 作为缓存

    1. 什么是 Fastify? Fastify 是一个高效、低开销的 Web 框架,专为构建RESTful API和微服务设计。它使用 Node.js 平台提供的最新 ES6/ES7 功能,并极大地减...

    1 年前
  • Mongoose:如何实现外键关联

    在前端开发中,数据库操作是不可避免的一环。而 Mongoose 作为 Node.js 平台上的 MongoDB 驱动程序,可以帮助我们更轻松地处理数据库操作。在 MongoDB 数据库中,实现外键关联...

    1 年前
  • TypeScript 中使用泛型函数的指南

    随着 TypeScript 在前端领域越来越受到欢迎,使用泛型函数编写可扩展且更安全的代码已经成为了越来越多的开发人员的选择。然而,对于初学者来说,理解泛型函数的语法和应用可能存在困难。

    1 年前
  • 前端开发中的 Proxy 技术应用

    在前端开发过程中,我们经常会遇到各种各样的问题,如处理 JavaScript 对象、操作 CSS 样式表、版本控制管理 Git 等等。而在 ES2016 中引入的 Proxy 技术,可以帮助我们轻松地...

    1 年前
  • GraphQL 中如何处理数据格式不一致的问题?

    引入 GraphQL 是一个由 Facebook 开发的用于构建 API 的查询语言和运行时环境,以及一种满足你数据查询的需求的方式,是一种用于 API 的查询语言,是一种用于 API 的查询语言,可...

    1 年前
  • Koa 项目中如何使用 Koa-validate 插件进行表单验证

    在开发 web 应用程序时,表单验证是必不可少的一环。Koa-validate 是一个简单易用的表单验证库,它可以帮助我们快速地进行表单验证,并且提供了很多验证规则,如必填、长度限制、正则表达式、数字...

    1 年前
  • RxJS 应用之实现自动补全搜索

    在前端开发中,我们经常需要实现搜索功能,而自动补全搜索是基础的搜索功能之一。RxJS 是一种强大的响应式编程库,可以帮助我们更方便地实现自动补全搜索功能。本文将介绍如何使用 RxJS 实现自动补全搜索...

    1 年前
  • 在 Tailwind CSS 中如何处理 IE11 中的 Flexbox 布局问题

    背景 在现代前端开发中,Flexbox 布局是一个很常用的布局方式。它让我们能够快速、方便地实现各种布局效果。而在一些老旧的浏览器中,如 IE11,可能会出现 Flexbox 布局的兼容性问题。

    1 年前

相关推荐

    暂无文章