如何在没有大量加载时间的情况下使用由云功能提供的 Nuxt.js?

How to use Nuxt.js served by cloud functions without huge loading times?

我喜欢使用 vue.js,但是对于一些即将进行的项目,我将需要使用 Nuxt 以便为 SEO 获得更好的排名。我没有太多设置 Nuxt 的经验,但能够找到很多关于如何提供快速应用程序 运行 nuxt 的好教程。我通常将我的项目与 firebase 集成用于 auth 和 db 以及云功能,所以我也会使用云功能来为这些 nuxt 网络应用程序提供服务..

但是...设置所有内容并不难...另一端的加载时间很糟糕,我觉得这会使任何用例几乎无法使用。当互联网连接良好时,常规网站/应用程序(几乎)立即加载,但我的 test-nuxt-websites 在显示页面之前始终显示白屏 5-10 秒。

我认为这与云功能的冷启动有关,但是您将如何实现 nuxt?我不明白替代方案是什么,是吗?无法想象公司会喜欢这么长的加载时间(google 两者都不喜欢)

我用 Nuxt 设置的快速演示项目:https://yke.plus/

我的函数代码:

const functions = require('firebase-functions')
const { Nuxt } = require('nuxt')
const express = require('express')

const app = express()

const config = {
  dev: false
}

const nuxt = new Nuxt(config)

let isReady = false
const readyPromise = nuxt
  .ready()
  .then(() => {
    isReady = true
  })
  .catch(() => {
    process.exit(1)
  })

async function handleRequest (req, res) {
  if (!isReady) {
    await readyPromise
  }
  res.set('Cache-Control', 'public, max-age=1, s-maxage=1')
  await nuxt.render(req, res)
}

app.get('*', handleRequest)
app.use(handleRequest)
exports.nuxtssr = functions.https.onRequest(app)

可能晚了,但尝试将您的缓存控制更改为更高的值,例如:

res.set('Cache-Control', 'public, max-age=15778476, s-maxage=15778476')

也可以为firebase.json中的静态资源配置缓存控制:

"headers": [
      ...
      {
        "source": "**/*.@(jpg|jpeg|gif|png|css|js|ico|svg)",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "public, max-age=31536000, s-maxage=31536000"
          }
        ]
      },
      ...
]

https://firebase.google.com/docs/hosting/full-config?hl=pt-br#headers