Gueleton 是如何工作的
Gueleton 的想法出于我在处理骨架屏的大小、位置和间距时手足无措,并在 ,目前以实验性插件的形式发布。
其核心优势在于高度自动化:只需传入数据,即可自动生成占位骨架,无需任何额外配置。依托于 预存数据 机制,Gueleton 能够为 需要远程数据才能渲染的内容 渲染骨架屏。
当然,Gueleton 也存在一些局限性:
- 难以生成完全精确的骨架,尤其针对复杂组件。
- 对项目代码有一定侵入性。你需要让
Gueleton组件包裹每一个需要生成骨架的内容。
如果你对此感兴趣,欢迎继续阅读,了解其实现原理。
-
首先,需要预先设置
data-key和data,用于标识和存储数据源。<template><Gueletondata-key="tweet-cards":data="cards":loading="loading"v-slot="{ data: cards }"><TwitterCard v-for="card in cards" /></Gueleton></template> -
Gueleton 通过开发服务器注册的中间件路由接口(
/__gueleton/**),接收data-key和data,并将其保存在本地文件(.gueleton/index.json)中。文件夹.gueleton
- index.json
文件夹src/
- …
- …
- package.json
- README.md
index.json {"tweet-cards": "...","[data-key]": "..."} -
核心流程
-
开发模式下:
-
首次加载页面时,Gueleton 会将
data-key及裁剪后的data通过/__gueleton/**接口存入.gueleton/index.json。下文将裁剪后的
data称为 预存数据。 -
在后续页面加载时,Gueleton 将
data-key作为查询参数通过/__gueleton/**接口从.gueleton/index.json读取对应 预存数据, 并用其渲染默认插槽内容,随后再根据 DOM 元素生成骨架屏。<template><Gueletondata-key="tweet-cards":data="cards":loading="loading"v-slot="{ data: cards }"><TwitterCard v-for="card in cards" /></Gueleton></template>
-
-
生产构建时:
- 构建时,Gueleton 会将
.gueleton/index.json中的所有 预存数据 内联到构建产物中。 - 在生产环境中,Gueleton 会使用内联的 预存数据 来渲染默认插槽内容,然后再根据 DOM 元素生成骨架屏。
- 构建时,Gueleton 会将
-