ホームページ  >  記事  >  ウェブフロントエンド  >  vue サーバー側レンダリング ページ キャッシュとコンポーネント キャッシュの概要 (コード)

vue サーバー側レンダリング ページ キャッシュとコンポーネント キャッシュの概要 (コード)

不言
不言オリジナル
2018-09-15 15:38:482201ブラウズ

この記事では、vue のサーバー側レンダリング ページ キャッシュとコンポーネント キャッシュに関する概要 (コード) を紹介します。必要な方は参考にしていただければ幸いです。

Vue キャッシュはページ キャッシュ、コンポーネント キャッシュ、インターフェイス キャッシュに分かれています。ここでは主にページ キャッシュとコンポーネント キャッシュについて説明します。サーバーで、キャッシュを構築するために js で

const LRU = require('lru-cache')
const microCache = LRU({
  max: 100, // 最大缓存的数目
  maxAge: 1000 // 重要提示:条目在 1 秒后过期。
})

const isCacheable = req => {
  //判断是否需要页面缓存
  if (req.url && req.url === '/') {
    return req.url
  } else {
   return false
  }
}
app.get('*', (req, res) => {
const cacheable = isCacheable(req)
  if (cacheable) {
    const hit = microCache.get(req.url)
     if (hit) {
      return res.end(hit)
  }
 }
const errorHandler = err => {
  if (err && err.code === 404) {
    // 未找到页面
    res.status(404).sendfile('public/404.html');
  } else {
    // 页面渲染错误
    res.status(500).end('500 - Internal Server Error')
    console.error(`error during render : ${req.url}`)
    console.error(err)
  }
}
const context = {
  title: 'vue',
  keywords: 'vue-ssr服务端脚手架',
  description: 'vue-ssr-template, vue-server-renderer',
  version: v,
  url: req.url,
  cookies: req.cookies
}
renderer.renderToString(context, (err, html) => {
  if (err) {
    return errorHandler(err)
  }
  res.end(html)
  microCache.set(req.url, html) // 设置当前缓存页面的内容
})
})

を設定します。

server.js で次のように設定します:

function createRenderer(bundle, template) {
  return require('vue-server-renderer').createBundleRenderer(bundle, {
    template,
    cache: LRU({
      max: 1000,
      maxAge: 1000 * 60 * 5 // 组建缓存时间
    })
  })
}
let renderer
if (isProd) {
  // 生产环境使用本地打包文件来渲染
  const bundle = require('./output/vue-ssr-bundle.json')
  const template = fs.readFileSync(resolve('./output/index.html'), 'utf-8')
  renderer = createRenderer(bundle, template)
} else {
  // 开发环境使用webpack热更新服务
  require('./build/dev-server')(app, (bundle, template) => {
    renderer = createRenderer(bundle, template)
  })
}

キャッシュされるコンポーネント

export default {
  name: 'Home',
  title() {
    return {
      title: 'vue-ssr',
      keywords: 'vue-ssr服务端脚手架, home',
      description: 'vue-ssr-template, vue-server-renderer, home'
    }
  },
  created() {
  },
  computed: {},
  asyncData({ store }) {},
  methods: {},
  serverCacheKey: props => props.id
}

serverCacheKey 返されるキー レンダリング結果の詳細を表すのに十分な情報が含まれている必要があります。レンダリング結果が props.item.id によってのみ決定される場合、上記は適切な実装です。ただし、同じものを持っている場合は、 アイテム ID は時間の経過とともに変化する場合や、レンダリング結果が他の依存関係に依存する場合には変化する可能性があります。 prop を使用するには、serverCacheKey の実装を変更して、他の変数を考慮する必要があります。 serverCacheKey が定数を返す場合、コンポーネントは常にキャッシュされるため、純粋に静的なコンポーネントに適しています。

以上がvue サーバー側レンダリング ページ キャッシュとコンポーネント キャッシュの概要 (コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。