SvelteKit 并在服务器端渲染中缓存组件输出

Posted

技术标签:

【中文标题】SvelteKit 并在服务器端渲染中缓存组件输出【英文标题】:SvelteKit and caching the component output in server-side rendering 【发布时间】:2021-11-30 03:03:43 【问题描述】:

我有一个 SvelteKit 登录页面组件,用于计算和显示统计信息。因为从数据库中处理数字是一项繁重的工作,而且这些信息只更新大约一个小时左右,所以我想缓存结果,以便为所有访问者快速提供登录页面。在路由load()期间使用fetch()从后端加载统计信息。

我正在为页面使用 SvelteKit 服务器端渲染,并带有 Node.js 适配器。我可以让 SvelteKit 连接到 SQL、Redis 或其他东西来存储缓存结果。我相信即使是基于文件系统的缓存也适用于我的情况。

Svelte 和 SvelteKit 是否支持在我的用例中有意义的任何类型的服务器端渲染缓存选项?例如。该组件不会渲染组件,而是缓存load() 输入甚至生成的html。是否有在 Svelte 世界中广为人知并与 Svelte 很好集成的库或缓存解决方案?

【问题讨论】:

【参考方案1】:

据我所知,不存在任何内置功能。

这篇文章可能对理解 s-s-r 有所帮助:s-s-r explained in SvelteKit

这里还有一个您可以使用的模板。一个简单的缓存是https://www.npmjs.com/package/timed-cache

  export async function load( page, fetch, session, stuff ) 

  if (isDataInCache && isDataNotExpired) 
    return 
      props: 
        data: getDataFromCache()
      
    ; 

   else 
    const url = `/your-url`;
    const res = await fetch(url);

    if (res.ok) 
      const data = await res.json();

      writeDataToCache(data);

      return 
        props: 
          data
        
      ;
    

    return 
      status: res.status,
      error: new Error(`Could not load $url`)
    ;

  

【讨论】:

以上是关于SvelteKit 并在服务器端渲染中缓存组件输出的主要内容,如果未能解决你的问题,请参考以下文章

vue服务端渲染添加缓存的方法

vue服务端渲染添加缓存的方法

PouchDB 和 SvelteKit

vue服务端渲染页面缓存和组件缓存的实例详解

如何将服务器端渲染中的数据从节点传递给reactjs组件

超过页面加载时间阈值时的 SvelteKit 加载指示器