svelte - 应该如何使用 load()

标签 svelte sveltekit

我试图了解 SvelteKit 如何在不同的场景中呈现我的网络应用程序,我对 load() 有点困惑。

我创建了一个带有加载函数的页面,该函数调用外部 API 并将响应用作组件的 prop。在 .svelte-kit/output/prerendered/pages/mypage.html 中,我可以看到它在构建步骤中获取了数据,并使用响应预渲染了我的 html。

然后,当我在我的网络应用程序中导航到该页面时,网络选项卡告诉我它在呈现它之前调用了外部 API。那么,预渲染的意义何在?

SvelteKit 文档说:

A component that defines a page or a layout can export a load function that runs before the component is created. This function runs both during server-side rendering and in the client, and allows you to fetch and manipulate data before the page is rendered, thus preventing loading spinners.

我不明白这个。如果我每次导航到页面时都调用 API,我该如何防止加载微调器?什么时候应该使用预呈现的 html?

在客户端和服务器中呈现的整个概念对我来说没有意义。在我看来,如果数据是静态的,我想在服务器上预呈现,但如果它发生变化,那么我想在每次访问该页面时调用 API(可能使用缓存)。但我为什么要两者都做?

最佳答案

But why would I want to do both?

因为服务器端渲染在第一次加载时往往更快。

当用户直接访问站点时,服务器端呈现的版本在某些条件下会更快地显示内容,例如如果呈现页面更复杂,则在慢速网络或动力不足的硬件上。

完全预渲染的版本甚至更快,因为甚至服务器都不必执行任何渲染或等待请求。

在直接访问预渲染路由时首次加载时,您将获得预渲染页面,其中包含在构建期间请求的数据。但是 load 被设计为同时在客户端和服务器上运行,因此无论页面是否预呈现,它都会运行。

这意味着您可以在直接加载页面时快速获取陈旧数据,而在客户端导航到页面时获取速度较慢但新鲜的数据。

我认为对于真正的静态页面,您想要使用的不是页面load,而是GET endpoint。或服务器加载函数(在 +page.server.ts/js 中),它只会在服务器上运行,因此对于预渲染页面,它只会在构建期间运行一次。

关于svelte - 应该如何使用 load(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73234052/

相关文章:

fetch - 如果从 Svelte 前端顺序调用 FastAPI 端点,连接将被拒绝

css - Sveltekit:使用 $page.path 设置事件链接的样式

url - 如何在预加载功能之外访问 sapper 中的 url 参数?

sveltekit - 在 SvelteKit 中匹配小写和大写路由?

javascript - SvelteKit:如何使用内联的 JS 和 CSS 将构建输出为单个 HTML 文件?

svelte - 如何在更改页面/路由时保持 SvelteKit 中的可读存储不被取消订阅

svelte - 创建具有可重用路线的 SvelteKit 库

svelte - 我如何将我的事件处理程序作为 $$restProps 传递给子组件

sveltekit - 在 SvelteKit 中全局导入图像 url

mysql - 用 Svelte 连接数据库