骨架屏的作用主要是在網路請求較慢時,提供基礎佔位,當資料載入完成,恢復資料展示。這樣給使用者一種很自然的過渡,不會造成頁面長時間白屏或者閃爍等情況。 常見的骨架屏實現方案有ssr
服務端渲染和prerender
兩種解決方案。這裡主要通過**為大家展示如何一步步做出這樣乙個骨架屏:
本元件庫骨架屏的實現也是基於預渲染去實現的,有關於預渲染更詳細的介紹請參考這篇文章:處理 vue 單頁面 meta seo的另一種思路 下面我們主要介紹其實現步驟,首先我們也是需要配置webpack-plugin,不過已經有實現好的prerender-spa-plugin可用
var path = require('path')然後寫好我們的骨架屏檔案var prerenderspaplugin = require('prerender-spa-plugin')
module.exports =
main.skeleton.vue
當初次進入頁面的時候我們需要顯示骨架屏,資料載入完,我們需要移除骨架屏:
下面我用我靈魂畫師的筆法,畫出了大致的過程:
首先建立我們的skeleton.entry.js
import vue from 'vue';當然這裡的import skeleton from './skeleton.vue';
export default new vue(,
template: ''
});
skeleton.vue
使我們事先寫好的骨架屏元件,看起來可能是這樣:
然後我們需要的是能把skeleton.entry.js
編譯成服務端渲染可用的bundle
檔案,所以我們需要有個編譯骨架屏的webpack.ssr.conf.js
檔案:
const path = require('path');接下來最終的步驟,就是編寫我們的webpackplugin,我們期望我們的webpackplugin可以幫我們把入口檔案編譯成bundle,然後再通過const merge = require('webpack-merge');
const basewebpackconfig = require('./webpack.base.conf');
const nodeexternals = require('webpack-node-externals');
function resolve(dir)
module.exports = merge(basewebpackconfig, ,
output: object.assign({}, basewebpackconfig.output, ),
externals: nodeexternals(),
plugins:
});
vue-server-renderer
來render bundle,最終產出響應的html片段和css片段,這裡貼出核心**:
// webpack start to work最後一步,我們對產出的html片段, css片段進行組裝,產出最終的html,所以我們需要監聽webpack 的編譯掛載之前的事件:var servercompiler = webpack(serverwebpackconfig);
var mfs = new mfs();
// output to mfs
servercompiler.outputfilesystem = mfs;
servercompiler.watch({}, function (err, stats)
stats = stats.tojson();
stats.errors.foreach(function (err) );
stats.warnings.foreach(function (err) );
var bundle = mfs.readfilesync(outputpath, 'utf-8');
var skeletoncss = mfs.readfilesync(outputcsspath, 'utf-8');
// create renderer with bundle
var renderer = createbundlerenderer(bundle);
// use vue ssr to render skeleton
renderer.rendertostring({}, function (err, skeletonhtml)
else );
}});
});
compiler.plugin('compilation', function (compilation) );});});
Vue頁面骨架屏
小公尺 vue專案中的入口index.html只有簡單的內容 當js執行完之後,會用vue渲染成的dom將div root完全替換掉。我們在div root中加入模擬骨架屏,在chrome開發者工具調整網速 這裡是骨架屏 由此可知,將骨架屏內容直接插入div root中即可實現骨架屏。我們需要骨架屏...
Vue專案骨架屏注入實踐
由此引申出一系列的優化方法,骨架屏也因此被提出。fcp優化 在 google 提出的以使用者為中心的四個頁面效能衡量指標中,fp fcp可能是開發者們最熟悉的了 為了優化首屏渲染時間這個指標,減少白屏時間,前端仔們想了很多辦法 加速或減少http請求損耗 使用cdn載入公用庫,使用強快取和協商快取,...
vue 單頁面過載(重新整理)
首先先說一下標題,此處的重新 重新整理 並不是瀏覽器reload,只是當前頁面元件重新create。如下 router.js const router newrouter 需要在views redirectpage資料夾下新建index.vue,內容如下 export default this ro...