Hexo-lazyload-image圖片懶加載

原文轉(zhuǎn)自: https://troyyang.com/2017/08/06/hexo-lazyload-image/

動(dòng)機(jī)

最近在看Google Chrome新出的一個(gè)API是無(wú)意間想到了對(duì)圖片的懶加載忽媒,后來(lái)想想自己的網(wǎng)站還不支持呢,索性花了些時(shí)間讓網(wǎng)站給支持上了汤纸,并發(fā)現(xiàn)Hexo上還沒(méi)有一個(gè)支持懶加載的插件,又倒騰著寫(xiě)了個(gè)hexo的插件,并發(fā)布到NPM上供大家使用,名字就叫hexo-lazyload-image,從這幾天下載數(shù)來(lái)看看來(lái)大家還是很有這個(gè)需求 :)渤愁。

圖片懶加載

圖片懶加載是提升網(wǎng)站性能和用戶(hù)體驗(yàn)的一個(gè)非常很好方式,并且?guī)缀跛械拇笮途W(wǎng)站都使用到了深夯,比如微博抖格,僅把用戶(hù)可見(jiàn)的部分顯示圖片,其余的都暫時(shí)不加載塌西,做法就是:讓所有圖片元素src指向一個(gè)小的站位圖片比如loading他挎,并新增一個(gè)屬性(如data-original)存放真實(shí)圖片地址。每當(dāng)頁(yè)面加載(或者滾動(dòng)條滾動(dòng))捡需,使用JS腳本將可視區(qū)域內(nèi)的圖片src替換回真實(shí)地址,并做請(qǐng)求重新加載筹淫。

Hexo-lazy-image 實(shí)現(xiàn)原理

因?yàn)槲恼露际鞘褂胢arkdown來(lái)編寫(xiě)的站辉,所以不可能要求我們?cè)趍arkdown里將所有圖片路徑都指向站位圖片,并附加另一個(gè)屬性损姜,所以饰剥,這個(gè)工作必須留給hexo的generate部分來(lái)做。

最終可分為兩步:

  1. 在hexo after_post_render事件或者after_render:html事件里將生產(chǎn)出來(lái)的文章html代碼中所有img元素都加上 data-original 屬性摧阅,并把src值付給他汰蓉, 然后在將src值致為loading圖片
  2. 注入simple-lazyload腳本在每個(gè)頁(yè)面最后面,當(dāng)頁(yè)面加載過(guò)后負(fù)責(zé)判定當(dāng)前需要重新加載的圖片棒卷。

這里重點(diǎn)提提正則表達(dá)式顾孽,在對(duì)第一步替換的時(shí)候,只是使用了簡(jiǎn)單的正則表達(dá)式去匹配查找所有的img節(jié)點(diǎn)比规,后來(lái)發(fā)現(xiàn)不僅如此若厚,正則表達(dá)式結(jié)合string.replace更是如此強(qiáng)大,直接將我原來(lái)30行的代碼減為3行蜒什,從此熱愛(ài)上了正則表達(dá)式测秸。

return htmlContent.replace(/<img(\s*?)src="(.*?)"(.*?)>/gi, function (str, p1, p2) {
        return str.replace(p2, loadingImage + '" data-original="' + p2);
    });

關(guān)于simple-lazyload,這個(gè)是懶加載替換腳本的核心,原來(lái)使用jquery-lazyload插件霎冯,后來(lái)覺(jué)得沒(méi)必要铃拇,最終還是自己寫(xiě)了個(gè)簡(jiǎn)單版。

Hexo-lazy-image 使用

安裝步驟:

npm install hexo-lazyload-image --save

然后修改 _config.yml 文件

lazyload:
  enable: true 
  onlypost: false
  loadingImg: # eg. ./images/loading.png 

既然要分享出來(lái)沈撞,那就得提供更多靈活的API來(lái)滿(mǎn)足不同的需求锚贱,所以又加上了以下功能:

  1. 自定義占位圖片。(不指定使用默認(rèn)值)
  2. 只針對(duì)文章內(nèi)容或者全網(wǎng)站圖片使用圖片懶加載

關(guān)于npm 發(fā)布包那點(diǎn)事

發(fā)布NPM包的時(shí)候有幾個(gè)注意事項(xiàng)关串,這里列一下

  • 每次publish必須在readme中更新版本號(hào)(npm patch會(huì)自動(dòng)為你生成最新版本號(hào)方便你使用)
  • 要更新npm中的readme頁(yè)面拧廊,需要再次調(diào)用npm patch命令,不然盡管你已經(jīng)更新了readme文件晋修,npm包頁(yè)面還是保持原來(lái)的頁(yè)面
  • 在packages.json中最好把git地址加上吧碾,因?yàn)閚pm會(huì)自動(dòng)解析packages.json文件,會(huì)映射到包頁(yè)面相應(yīng)的位置
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末墓卦,一起剝皮案震驚了整個(gè)濱河市倦春,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌落剪,老刑警劉巖睁本,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異忠怖,居然都是意外死亡呢堰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)凡泣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)枉疼,“玉大人,你說(shuō)我怎么就攤上這事鞋拟÷钗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵贺纲,是天一觀的道長(zhǎng)航闺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)猴誊,這世上最難降的妖魔是什么潦刃? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮稠肘,結(jié)果婚禮上福铅,老公的妹妹穿的比我還像新娘。我一直安慰自己项阴,他們只是感情好滑黔,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布笆包。 她就那樣靜靜地躺著,像睡著了一般略荡。 火紅的嫁衣襯著肌膚如雪庵佣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天汛兜,我揣著相機(jī)與錄音巴粪,去河邊找鬼。 笑死粥谬,一個(gè)胖子當(dāng)著我的面吹牛肛根,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漏策,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼派哲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了掺喻?” 一聲冷哼從身側(cè)響起芭届,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎感耙,沒(méi)想到半個(gè)月后褂乍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡即硼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年逃片,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谦絮。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡题诵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出层皱,到底是詐尸還是另有隱情,我是刑警寧澤赠潦,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布叫胖,位于F島的核電站,受9級(jí)特大地震影響她奥,放射性物質(zhì)發(fā)生泄漏瓮增。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一哩俭、第九天 我趴在偏房一處隱蔽的房頂上張望绷跑。 院中可真熱鬧,春花似錦凡资、人聲如沸砸捏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)垦藏。三九已至梆暖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掂骏,已是汗流浹背轰驳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弟灼,地道東北人级解。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像田绑,于是被迫代替她去往敵國(guó)和親勤哗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容