发布网友 发布时间:2022-04-24 13:06
共3个回答
懂视网 时间:2022-04-22 18:52
本篇文章给大家带来的内容是关于vue服务端渲染缓存应用的示例代码 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。vue缓存分为页面缓存、组建缓存、接口缓存,这里我主要说到了页面缓存和接口缓存
页面缓存:
在server.js中设置
const LRU = require('lru-cache')
const microCache = LRU({ max: 100, // 最大缓存的数目 maxAge: 1000 // 重要提示:条目在 1 秒后过期。 }) const isCacheable = req => { //判断是否需要页面缓存<br> if (req.url && req.url === '/') {<br> return req.url<br> } else {<br><em id="__mceDel"><em id="__mceDel"> return false<br></em></em><em id="__mceDel"><em id="__mceDel"><em id="__mceDel"><em id="__mceDel"><em id="__mceDel"> }<br></em></em></em></em></em><em id="__mceDel">}</em>
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) }) })
<em id="__mceDel"> </em>
组建缓存:
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 返回的 key 应该包含足够的信息,来表示渲染结果的具体情况。如果渲染结果仅由 props.item.id 决定,则上述是一个很好的实现。但是,如果具有相同 id 的 item 可能会随时间而变化,或者如果渲染结果依赖于其他 prop,则需要修改 serverCacheKey 的实现,以考虑其他变量。如果 serverCacheKey返回常量将导致组件始终被缓存,这对纯静态组件是有好处的。
热心网友 时间:2022-04-22 16:00
我遇到的问题是因为命名冲突,这个项目大范围使用了bootstrap的模态组件,我直接用的modal-content类作为el,所以再次有模态组件调用的时候就会出现冲突。热心网友 时间:2022-04-22 17:18
详细说一下问题,我最近写的时候遇到一个坑就是不能在组件还没ready的时候做页面跳转。不然跳转的页面也渲染失败。