当前位置: 首页 > news >正文

Next.js 加载页面及流式渲染(Streaming)

Next.js 加载页面及流式渲染(Streaming)

在现代的 Web 应用开发中,用户体验是至关重要的。快速响应的页面加载和流畅的用户界面可以显著提升用户的满意度。而加载页面(Loading Page)和流式渲染(Streaming)在这其中起到了关键作用。

一、加载页面的作用

1.1 提升用户体验

加载页面在用户等待数据加载或页面渲染完成时提供了视觉反馈,避免了用户面对空白屏幕的不安和困惑。一个设计良好的加载页面可以让用户感受到应用正在积极工作,从而减少他们的焦虑感。

1.2 避免页面布局变化

在数据加载完成之前显示加载页面,可以避免页面布局在数据加载后突然变化,防止因内容突然出现而导致的页面跳动。这对于保持一致的用户体验至关重要。

1.3 提供品牌曝光机会

加载页面还可以作为品牌曝光的机会。设计一个与品牌形象一致的加载动画或标志,可以在提升用户体验的同时加强品牌记忆。

二、Next.js 加载页面的实现

在 Next.js 中,实现加载页面主要有以下几种方法:

2.1 利用全局 CSS

可以通过全局 CSS 文件在 _app.js 文件中定义加载页面的样式。例如:

// pages/_app.js

import '../styles/globals.css';
import { useState, useEffect } from 'react';function MyApp({ Component, pageProps }) {const [loading, setLoading] = useState(true);useEffect(() => {const handleRouteChange = (url) => {setLoading(true);};const handleRouteComplete = (url) => {setLoading(false);};Router.events.on('routeChangeStart', handleRouteChange);Router.events.on('routeChangeComplete', handleRouteComplete);Router.events.on('routeChangeError', handleRouteComplete);return () => {Router.events.off('routeChangeStart', handleRouteChange);Router.events.off('routeChangeComplete', handleRouteComplete);Router.events.off('routeChangeError', handleRouteComplete);};}, []);return (<>{loading ? <Loading /> : <Component {...pageProps} />}</>);
}function Loading() {return (<div className="loading"><div className="spinner"></div></div>);
}export default MyApp;

2.2 使用 Next.js 内置的动态加载

Next.js 提供了动态加载组件的功能,可以在加载组件时显示加载指示器:

import dynamic from 'next/dynamic';const DynamicComponentWithLoading = dynamic(() => import('../components/YourComponent'), {loading: () => <p>Loading...</p>,
});export default function Page() {return <DynamicComponentWithLoading />;
}

三、流式渲染(Streaming)

3.1 什么是流式渲染

流式渲染是一种渐进式的页面渲染技术,可以在服务器端逐步发送页面内容到客户端,而不是等待整个页面准备好后再发送。这样可以显著减少首次内容绘制(First Contentful Paint,FCP)时间,提升用户感知性能。

3.2 Next.js 的流式渲染支持

Next.js 12 引入了对 React 18 流式渲染的支持,通过 next/server 模块可以轻松实现流式渲染。例如:

import { renderToReadableStream } from 'react-dom/server';
import { NextResponse } from 'next/server';export async function middleware(req) {const stream = await renderToReadableStream(<YourComponent />);return new NextResponse(stream);
}

3.3 流式渲染的优势

更快的首屏渲染:由于流式渲染可以在数据加载的同时发送已经准备好的部分内容,用户可以更快地看到页面的部分内容,而不是等待整个页面加载完毕。
更好的用户体验:用户可以逐步看到页面的内容,减少等待的焦虑感和不确定感。
资源优化:通过流式渲染可以优化服务器资源的使用,提升整体应用的性能。

相关文章:

  • 小公司要求真高
  • 247 H指数
  • DolphinScheduler 3.x 执行insert into SQL任务显示成功,但查不到数据
  • 网络仿真方法综述
  • 优质短视频素材下载网站有哪些?分享优质短视频素材下载资源
  • Git:从配置到合并冲突
  • 无人机遥感在农林信息提取中的实现方法与GIS融合应用
  • 基于实验的电动汽车动力电池SOC
  • 双非本科一年20w,已是人中龙凤了
  • 【问题解决】adb remount 失败或刷机无法连接设备(KaiOS)
  • 苹果WWDC 2024 带来的 AI 风暴:从生产力工具到个人助理,AI 将如何融入我们的生活?
  • Web前端开发个人技能全面剖析:四维度深度理解,五能力实战展现,六要素构建优势,七步骤持续精进
  • 云计算服务
  • MySQL迁移达梦数据库避坑
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • python3.6+scrapy+mysql 爬虫实战
  • 08.Android之View事件问题
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • AHK 中 = 和 == 等比较运算符的用法
  • Angular Elements 及其运作原理
  • classpath对获取配置文件的影响
  • Idea+maven+scala构建包并在spark on yarn 运行
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • python_bomb----数据类型总结
  • sessionStorage和localStorage
  • Spring核心 Bean的高级装配
  • 阿里云应用高可用服务公测发布
  • 和 || 运算
  • 理解在java “”i=i++;”所发生的事情
  • 一天一个设计模式之JS实现——适配器模式
  • 以太坊客户端Geth命令参数详解
  • 栈实现走出迷宫(C++)
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 函数计算新功能-----支持C#函数
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #在 README.md 中生成项目目录结构
  • (2.2w字)前端单元测试之Jest详解篇
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net接口调试与案例
  • .net开发时的诡异问题,button的onclick事件无效