日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

詳解VUE單頁應用骨架屏方案

什么是骨架屏?
簡單的說 , 骨架屏就是在頁面未渲染完成的時候 , 先用一些簡單的圖形大致勾勒出頁面的基本輪廓 , 給用戶造成頁面正在加載的錯覺 , 待頁面渲染完成之后再用頁面替換掉骨架屏 , 從而減少頁面白屏的時間 , 給用戶帶來更好的體驗 。

詳解VUE單頁應用骨架屏方案


分析VUE渲染過程
使用vue-cli3.0創(chuàng)建項目: vue create project
詳解VUE單頁應用骨架屏方案


詳解VUE單頁應用骨架屏方案


詳解VUE單頁應用骨架屏方案


詳解VUE單頁應用骨架屏方案


詳解VUE單頁應用骨架屏方案


詳解VUE單頁應用骨架屏方案


詳解VUE單頁應用骨架屏方案


詳解VUE單頁應用骨架屏方案


在生成的項目文件夾下的public文件夾下的index.html文件代碼如下:
詳解VUE單頁應用骨架屏方案


可以看到 , DOM里面有一個div#app , 當js被執(zhí)行完成之后 , 此div#app會被整個替換掉 , 因此 , 如何在Vue頁面實現(xiàn)骨架屏 , 已經(jīng)有了一個很清晰的思路——在div#app內(nèi)直接插入骨架屏相關內(nèi)容即可 。
實現(xiàn)方案
手動在div#app里面寫入骨架屏內(nèi)容是不科學的 , 因此需要一個擴展性強且自動化的易維護方案 。既然是在Vue項目里 , 所以所謂的骨架屏也是一個.vue文件 , 它能夠在構建時由工具自動注入到div#app里面 。首先 , 我們在/src目錄下新建一個Skeleton.vue文件 , 其內(nèi)容如下:
【詳解VUE單頁應用骨架屏方案】
詳解VUE單頁應用骨架屏方案


接下來 , 在/src目錄再新建一個skeleton.entry.js入口文件:
詳解VUE單頁應用骨架屏方案


在完成了骨架屏的準備之后 , 我們需要一個關鍵插件vue-server-renderer 。該插件本用于服務端渲染 , 但是在這里 , 我們主要利用它能夠把.vue文件處理成html和css字符串的功能 , 來完成骨架屏的注入 。
骨架屏注入
首先在public文件夾下新建一個template.html文件 , 并且其代碼和index.html文件代碼相同 , 但是需要在div#app中添加 占位符:
詳解VUE單頁應用骨架屏方案


然后 , 我們還需要在根目錄新建一個webpack.skeleton.conf.js文件 , 以專門用來進行骨架屏的構建 。
詳解VUE單頁應用骨架屏方案


可以看到 , 該配置文件和普通的配置文件基本完全一致 , 主要的區(qū)別在于其target: 'node' , 配置了externals , 以及在plugins里面加入了VueSSRServerPlugin 。在VueSSRServerPlugin中 , 指定了其輸出的json文件名 。然后通過運行下列指令 , 在/dist目錄下生成一個skeleton.json文件: webpack --config ./webpack.skeleton.conf.js 接下來 , 在根目錄下新建一個skeleton.js , 該文件即將被用于往index.html內(nèi)插入骨架屏:
詳解VUE單頁應用骨架屏方案


接下來 , 只要運行 node skeleton.js , 就可以完成骨架屏的注入 。為了在 npm run serve 的時候自動完成骨架屏的注入 , 避免運行多次命令 , 需要在 package.json 中增加一條命令 "preserve": "webpack --config ./webpack.skeleton.conf.js && node skeleton.js" ,放在 "serve" 命令之前 。

推薦閱讀