上次寫了一篇webpack的學習心得,webpack能作到提高前端的性能,其模塊打包最終生成一個或少許的文件可以減小對服務端的請求。除此以外,本次的圖片懶加載(固然不只限於圖片,還能夠有視頻,flash等)也是一種優化前端性能的方式。使用懶加載能夠想要看圖片時才加載圖片,而不是一次性加載全部的圖片,從而在必定程度從減小服務端的請求。javascript
通俗介紹:懶加載怎麼個懶法,就是你不想看就不給你看,我也懶得加載出來,懶得去請求。通俗的說就是你不要就不給你,怎麼地。舉個栗子,好比在進入某個頁面的時候,它會有許多的圖片,有些圖片可能在下面,當咱們點進頁面但沒有滑動下去或沒看完整個頁面,那麼下面的圖片就會"沒用",加載了也白加載,並且還下降了網頁的加載速度。所以用懶加載能當滾動到可視區域時才加載當前的圖片。html
原理:圖片的加載是由src的值引發,當對src賦值時瀏覽器就會請求圖片資源,基於這個,能夠利用html5屬性data-XXX來保存圖片的路徑,當咱們須要加載圖片的時候纔將data-xxx的值賦予src,醬就能實現圖片的按需加載,也就是懶加載了。前端
優勢:提升前端性能,圖片在須要的時候才加載,減輕服務的負擔,提升頁面的加載速度,可以減小帶寬。html5
echo.js演示jquery
1.引入:在HTML中引入jQuery和jQuery-lazyload,如:webpack
<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script> <script type="text/javascript" src="js/jquery.lazyload.min.js"></script>
2.圖片中不使用src屬性,由於使用src屬性後就會默認發送請求請求圖片,使用data-original代替如:web
<img class="lazy" data-original="images/p1.jpg" style="margin-top:500px" height="300">
3.添加jQuery代碼:瀏覽器
<script type="text/javascript"> $(function() { $("img.lazy").lazyload(); }) </script>
1.threshold :設置Threshold參數來實現滾到距離其xx px時就加載。如:前端性能
$(function() { $("img.lazy").lazyload({ threshold :100 }); })
2.placeholder :爲某一圖片路徑.此圖片用來佔據將要加載的圖片的位置,待圖片加載時,佔位圖則會隱藏,好比放一些等待加載的圖片來優化用戶體驗效果。
$(function() { $("img.lazy").lazyload({ placeholder: "images/loading.gif" }); })
3.event :觸發定義的事件時,圖片纔開始加載(此處click表明點擊圖片纔開始加載,還有mouseover,sporty,foobar(…))
$(function(){ $("img.lazy").lazyload({ event : "click" }); })
4.effects :圖片顯示時的效果,默認是show。
$(function(){ $("img.lazy").lazyload({ effects:"fadeIn" }); })
5.container :值爲某容器.lazyload默認在拉動瀏覽器滾動條時生效,這個參數可讓你在拉動某DIV的滾動條時依次加載其中的圖片
$(function(){ $("img.lazy").lazyload({ container: $("#container") }); })
6.failure_limit :通常用於當頁面中圖片不連續時使用,滾動頁面的時候, Lazy Load 會循環爲加載的圖片. 在循環中檢測圖片是否在可視區域內,插件默認狀況下在找到第一張不在可見區域的圖片時中止循環。如:
$(function(){ $("img.lazy").lazyload({ failure_limit : 20 }); })
這裏設爲20表示插件找到 20 個不在可見區域的圖片時才中止搜索。
7.skip_invisible :爲了提高性能,插件默認忽略隱藏的圖片;若是想要加載隱藏圖片.設置skip_invisible爲false;
$(function(){ $("img.lazy").lazyload({ skip_invisible : false }); })
<script type="text/javascript" src="js/echo.min.js"></script>
<img class="lazy" data-echo="images/p1.jpg" style="margin-top:500px" height="300">
echo.init({ //離可視區域多少像素的圖片能夠被加載 offset: 500, //圖片延時多少毫秒加載 throttle: 1000 });