骨架屏是在页面数据尚未加载完成前先给用户展示出页面的大致结构,直到请求数据返回后再显示真正的页面内容;随着单页应用( SPA )的越来越流行,单页应用的用户体验也越来越得到前端开发者的关注;为了优化用户体验,在数据到达用户之前,往往会在页面上加上 loading 的效果,而现在,越来越多的场景倾向于使用页面的骨架替代单一的 loading 效果;
为什么需要自动生成骨架屏?
常见的方案:
a. 前两者的前提都是需要开发者自己编写骨架屏代码
b. 饿了么的做的比较强大了,还有 UI 界面专门调整骨架屏
我们的方案是:用纯 DOM 的方式结合 Puppeteer 自动生成网页骨架屏
const createSkeletonHTML = require('DrawPageStructure/evalDOM')
createSkeletonHTML({
// ...
background: 'red',
animation: 'opacity 1s linear infinite;'
}).then(skeletonHTML => {
console.log(skeletonHTML)
}).catch(e => {
console.error(e)
})
直接在浏览器端运行,在控制台打印当前页面骨架屏节点,复制添加到应用页面,但是该方式不够自动化,我们该让骨架屏自动生成并添加到应用页面
Puppeteer 是谷歌官方出品的一个可以控制 headless Chrome 的 Node 库。可以通过 Puppeteer 的提供的 api 直接控制 Chrome 模拟大部分用户操作来进行 UI Test 或者作为爬虫访问页面来收集数据。
Puppeteer 提供运行环境和导出方式
const evalDOM = require('../evalDOM');
await page.goto(url, {waitUntil: 'networkidle0'});
const skeletonHTML = await page.evaluate.call(page, evalDOM, ...args);
小结
还有很多细节优化中,欢迎感兴趣的小伙伴一起加入!
详细代码和使用方式请移步: https://github.com/famanoder/DrawPageStructure
欢迎 star !,欢迎提 PR !