【发布时间】:2022-11-11 09:07:15
【问题描述】:
我有一个 NuxtJS 站点,只有一个页面 /pages/matrix/index.vue,但有很多指向该页面的动态路由,每个路由使用相同的数据集。在为 Netlify 上的部署生成静态构建时,dist 文件夹当前达到 ~1.2 GB,包括
-
dist/matrix中的 3125 个.html文件(占用约 39% 的空间) -
payload.js中的 3125 个文件夹用于路由的子文件夹中的dist/_nuxt/static/[random]/matrix/文件(占用约 61% 的空间)
这 61% 是 220kB payload.js 的 3125 个副本,其中完全相同的一组data: [{}],而只有路线改变:
__NUXT_JSONP__("/matrix/place2/time3,time14,time29", (function(a, b, ...) {
return {
data: [{ /* data does not change */ }],
fetch: {},
mutations: void 0
}
}("nor", "does", "this")));
我想知道是否有办法通过某种方式提取数据部分来减少这种冗余?将 ~665 MB 减少到仅 220kB 听起来很诱人。
更多背景:
路由是/matrix、/matrix/place1 或/matrix/place8/time1,time7,time18。生成时,我从无头 CMS 中提取所有数据,并通过 payload option 将其提供给我的页面组件。首先,我使用File System Routing 并像这样导入pages/matrix/index.vue:
// pages/matrix/_places/index.vue
<script>
import Index from '../index'
export default Index
</script>
感觉不对但有效。我将这种方法归咎于这些有效负载文件的“重复”(坦率地说,没有完全理解静态生成的机制)。我现在用这个nuxt.config.js 设置切换到extendRoutes:
router: {
extendRoutes (routes, resolve) {
routes.push(
{
name: 'matrix-place-times',
path: '/matrix/:place/:times',
component: resolve(__dirname, 'pages/matrix/index.vue')
},
{
name: 'matrix-place',
path: '/matrix/:place',
component: resolve(__dirname, 'pages/matrix/index.vue')
}
)
}
}
分布在路由子文件夹中的有效负载文件的数量保持不变。
对此有何建议?使用 Nuxt v2.15.7。
【问题讨论】:
-
这里有什么问题?我猜你的项目已经 brotli'd/gzip'd 所以它不会从中受益更多。否则,如果您有很多页面,1.2GB 看起来还可以。这里有什么烦人的部分?也许去SSR?
-
我不会称之为问题,因为事情确实有效。确实,每个 220 kB 的 payload.js 在通过网络 gzip 压缩时只有 17 kB。可能对我的项目相当具体(数千条路线使用完全相同的数据集),但生成和上传相同的数据感觉很奇怪。目前我没有 SSR 的计划,坚持使用 Netlify。
标签: javascript vue.js nuxt.js vue-router