按需載入js和css
- 2019 年 11 月 24 日
- 筆記
部落格上有一個用mediaelement-and-player.js弄的播放器,插件默認的是每個頁面都載入一次mediaelement-and-player.min.js和mediaelementplayer.min.css,兩個文件都十分的龐大,加起來接近100k,雖然gzip之後只剩下20多k但是也是十分地不爽,所以我便尋思著有沒有什麼辦法能有播放器的時候就載入它,沒有播放器的時候就不載入。
首先往後端的方向去想,由於不知道typecho的js是怎麼管理的,似乎在插件的激活方法中就開始往模板輸出js和css了,我要的是在分析文章的過程中決定要不要輸出那個js,所以要從後端來著手去搞的話難度很大。可能還會影響到整個程式的性能。
於是我往前端去思考,我們都知道html網頁都是由dom組成的,假如我們判斷到可以載入播放器的時候再讓它document.write()出那個程式碼同也就能實現這個功能,而且對後端沒什麼影響。
基本思路:header部分聲明一個默認為false的變數,當網頁中有播放器時候把它賦值為true,底部根據這個變數的值來決定是否輸出播放器的js和css。
實現的方法其實很簡單,首先我們可以在頁面頂部header部分聲明一個默認為false的變數:
<script>var loadplayer=false;</script>
然後在插入播放器的部分把這個變數設置為true,以便後面的判斷:
<script>loadplayer=true;</script>
在頁面底部判斷並輸出程式碼:
<script> if(loadplayer){ document.write('<link rel="stylesheet" type="text/css" href="http://blog.izgq.net/usr/plugins/Html5AudioPlayer/assets/mediaelementplayer.min.css">'); document.write('<script type="text/javascript" src="http://blog.izgq.net/usr/plugins/Html5AudioPlayer/assets/mediaelement-and-player.min.js"></script>'); document.write('<script>$("audio").mediaelementplayer();</script>'); } </script>
用php輸出程式碼的時候要注意轉義的問題。
這樣那些用不上的js就不會載入啦,網頁載入速度也會快不少。
不知道css放在頁面底部會不會有什麼副作用,目前還沒遇到什麼問題,望大神指點迷津。
不過我覺得這種方式應該是最愚蠢的╮(╯▽╰)╭