动静态渲染 3个月前

编程语言
173
动静态渲染

上一章中,你为仪表板概览页面获取了数据。然而,我们简要讨论了当前设置的两个限制:

  1. 数据请求正在无意中创建瀑布式加载。
  2. 仪表板是静态的,因此任何数据更新都不会在你的应用程序中反映出来。

在本章中...

我们将介绍以下主题:

  • 什么是静态渲染以及它如何改善你的应用程序的性能。
  • 什么是动态渲染以及何时使用它。
  • 使仪表板动态化的不同方法。
  • 模拟缓慢的数据获取,看看会发生什么。

什么是静态渲染?

在静态渲染中,数据获取和渲染在服务器上于构建时(部署时)或重新验证数据(revalidating data)时发生。

每当用户访问你的应用程序时,都会提供缓存的结果。静态渲染有几个优点:

  • 更快的网站访问 - 预渲染的内容可以被缓存并在全球范围内分发。这确保了世界各地的用户能够更快、更可靠地访问你的网站内容。
  • 减少服务器负载 - 由于内容已缓存,服务器不需要为每个用户请求动态生成内容。
  • 搜索引擎优化(SEO) - 预渲染的内容更易于搜索引擎抓取,因为页面加载时内容已可用。这可能会提高搜索引擎排名。

静态渲染适用于无数据用户共享数据的 UI,例如静态博客文章或产品页面。对于具有定期更新的个性化数据的仪表板,静态渲染可能不太合适。

与静态渲染相对的是动态渲染。

该做个小测验了!

为什么静态渲染可能不适合仪表板应用程序?

  • A. 因为它会使网站变慢
  • B. 因为服务器负载会增加
  • C. 因为应用程序不会反映最新的数据更改
  • D. 因为你需要一个内容分发网络

检查答案

什么是动态渲染?

在动态渲染中,内容在每次用户请求时(用户访问页面时)在服务器上进行渲染。动态渲染有几个优点:

  • 实时数据 - 动态渲染允许你的应用程序显示实时或经常更新的数据。对于数据频繁变化的应用程序,这是理想的选择。
  • 用户个性化 - 更容易提供个性化内容,例如仪表板或用户资料,并根据用户交互更新数据。
  • 请求时信息 - 动态渲染允许你访问只能在请求时知道的信息,例如 Cookies 或 URL 搜索参数。

该做个小测验了!

哪些信息只能在请求时才能知道?

  • A. 数据库架构
  • B. URL 路径
  • C. Cookies 和 URL 搜索参数

检查答案

模拟缓慢的数据获取

我们正在构建的仪表板应用程序是动态的。

然而,上章中提到的一个问题依然存在。如果某个数据请求比其他所有请求都慢,该怎么办?

让我们模拟一个缓慢的数据获取。在你的 data.ts 文件中,取消注释 fetchRevenue() 内的 console.logsetTimeout

// /app/lib/data.ts
export async function fetchRevenue() {
    try {
        // 为了演示目的,我们人为延迟了响应时间。
        // 不要在生产环境中这样做 :)
        console.log('正在获取收入数据...');
        await new Promise((resolve) => setTimeout(resolve, 3000));
        const data = await sql<Revenue>`SELECT * FROM revenue`;
        console.log('数据获取在 3 秒后完成。');
        return data.rows;
    } catch (error) {
        console.error('数据库错误:', error);
        throw new Error('获取收入数据失败。');
    }
}

现在,在新标签页中打开 http://localhost:3000/dashboard/,并注意页面加载时间变长。在你的终端中,你还应该看到以下消息:

正在获取收入数据... 数据获取在 3 秒后完成。

这里,你添加了一个人为的 3 秒延迟来模拟缓慢的数据获取。结果是,整个页面在数据获取时会阻止向访问者展示 UI。这带来了开发者常常需要解决的一个常见挑战:

使用动态渲染时,应用程序的速度取决于最慢的数据获取速度。

image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2223432
累计阅读

热门教程文档

React
18小节
Javascript
24小节
Golang
23小节
Objective-C
29小节
PHP
52小节