亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

實現圖片預加載的三大方法及優缺點分析

2019-11-20 13:54:48
字體:
來源:轉載
供稿:網友

預加載圖片是提高用戶體驗的一個很好方法。圖片預先加載到瀏覽器中,訪問者便可順利地在你的網站上沖浪,并享受到極快的加載速度。這對圖片畫廊及圖片占據很大比例的網站來說十分有利,它保證了圖片快速、無縫地發布,也可幫助用戶在瀏覽你網站內容時獲得更好的用戶體驗。本文將分享三個不同的預加載技術,來增強網站的性能與可用性。

方法一:用CSS和JavaScript實現預加載

實現預加載圖片有很多方法,包括使用CSS、JavaScript及兩者的各種組合。這些技術可根據不同設計場景設計出相應的解決方案,十分高效。
單純使用CSS,可容易、高效地預加載圖片,代碼如下:

復制代碼 代碼如下:

#preload-01 { background: url(http://domain.tld/image-01.png) no-repeat -9999px -9999px; }   
#preload-02 { background: url(http://domain.tld/image-02.png) no-repeat -9999px -9999px; }   
#preload-03 { background: url(http://domain.tld/image-03.png) no-repeat -9999px -9999px; } 

將這三個ID選擇器應用到(X)HTML元素中,我們便可通過CSS的background屬性將圖片預加載到屏幕外的背景上。只要這些圖片的路徑保持不變,當它們在Web頁面的其他地方被調用時,瀏覽器就會在渲染過程中使用預加載(緩存)的圖片。簡單、高效,不需要任何JavaScript。
該方法雖然高效,但仍有改進余地。使用該法加載的圖片會同頁面的其他內容一起加載,增加了頁面的整體加載時間。為了解決這個問題,我們增加了一些JavaScript代碼,來推遲預加載的時間,直到頁面加載完畢。代碼如下:

復制代碼 代碼如下:

// better image preloading @ <A href="> function preloader() {   
    if (document.getElementById) {   
        document.getElementById("preload-01").style.background = "url(
http://domain.tld/image-01.png) no-repeat -9999px -9999px";   
        document.getElementById("preload-02").style.background = "url(http://domain.tld/image-02.png) no-repeat -9999px -9999px";   
        document.getElementById("preload-03").style.background = "url(http://domain.tld/image-03.png) no-repeat -9999px -9999px";   
    }   
}   
function addLoadEvent(func) {   
    var oldonload = window.onload;   
    if (typeof window.onload != 'function') {   
        window.onload = func;   
    } else {   
        window.onload = function() {   
            if (oldonload) {   
                oldonload();   
            }   
            func();   
        }   
    }   
}   
addLoadEvent(preloader); 

在該腳本的第一部分,我們獲取使用類選擇器的元素,并為其設置了background屬性,以預加載不同的圖片。
該腳本的第二部分,我們使用addLoadEvent()函數來延遲preloader()函數的加載時間,直到頁面加載完畢。
如果JavaScript無法在用戶的瀏覽器中正常運行,會發生什么?很簡單,圖片不會被預加載,當頁面調用圖片時,正常顯示即可。

方法二:僅使用JavaScript實現預加載

上述方法有時確實很高效,但我們逐漸發現它在實際實現過程中會耗費太多時間。相反,我更喜歡使用純JavaScript來實現圖片的預加載。下面將提供兩種這樣的預加載方法,它們可以很漂亮地工作于所有現代瀏覽器之上。

JavaScript代碼段1
只需簡單編輯、加載所需要圖片的路徑與名稱即可,很容易實現:

復制代碼 代碼如下:

<div class="hidden">   
    <script type="text/javascript">   
        <!--//--><![CDATA[//><!--             var images = new Array()   
            function preload() {   
                for (i = 0; i < preload.arguments.length; i++) {   
                    images[i] = new Image()   
                    images[i].src = preload.arguments[i]   
                }   
            }   
            preload(   
                "                "                "            )   
        //--><!]]>     </script>   
</div> 

該方法尤其適用預加載大量的圖片。我的畫廊網站使用該技術,預加載圖片數量達50多張。將該腳本應用到登錄頁面,只要用戶輸入登錄帳號,大部分畫廊圖片將被預加載。

JavaScript代碼段2
該方法與上面的方法類似,也可以預加載任意數量的圖片。將下面的腳本添加入任何Web頁中,根據程序指令進行編輯即可。

復制代碼 代碼如下:

<div class="hidden">
    <script type="text/javascript">
        <!--//--><![CDATA[//><!--             if (document.images) {
                img1 = new Image();
                img2 = new Image();
                img3 = new Image();
                img1.src = "                img2.src = "                img3.src = "            }
        //--><!]]>     </script>
</div>

正如所看見,每加載一個圖片都需要創建一個變量,如“img1 = new Image();”,及圖片源地址聲明,如“img3.src =
"../path/to/image-003.gif";”。參考該模式,你可根據需要加載任意多的圖片。
我們又對該方法進行了改進。將該腳本封裝入一個函數中,并使用 addLoadEvent(),延遲預加載時間,直到頁面加載完畢。

復制代碼 代碼如下:

方法三:使用Ajax實現預加載

上面所給出的方法似乎不夠酷,那現在來看一個使用Ajax實現圖片預加載的方法。該方法利用DOM,不僅僅預加載圖片,還會預加載CSS、JavaScript等相關的東西。使用Ajax,比直接使用JavaScript,優越之處在于JavaScript和CSS的加載不會影響到當前頁面。該方法簡潔、高效。

復制代碼 代碼如下:

window.onload = function() {   
    setTimeout(function() {   
        // XHR to request a JS and a CSS         var xhr = new XMLHttpRequest();   
        xhr.open('GET', 'http://domain.tld/preload.js');   
        xhr.send('');   
        xhr = new XMLHttpRequest();   
        xhr.open('GET', 'http://domain.tld/preload.css');   
        xhr.send('');   
        // preload image         new Image().src = "    }, 1000);   
}; 

上面代碼預加載了“preload.js”、“preload.css”和“preload.png”。1000毫秒的超時是為了防止腳本掛起,而導致正常頁面出現功能問題。
下面,我們看看如何用JavaScript來實現該加載過程:

復制代碼 代碼如下:

window.onload = function() {   
    
    setTimeout(function() {   
    
        // reference to <head>          
        var head = document.getElementsByTagName('head')[0];   
    
        // a new CSS           
        var css = document.createElement('link');   
        css.type = "text/css";   
        css.rel  = "stylesheet";   
        css.href = "    
        // a new JS           
        var js  = document.createElement("script");   
        js.type = "text/javascript";   
        js.src  = "
    
        // preload JS and CSS         head.appendChild(css);   
        head.appendChild(js);   
    
        // preload image           
        new Image().src = "
    
    }, 1000);   
    
}; 

這里,我們通過DOM創建三個元素來實現三個文件的預加載。正如上面提到的那樣,使用Ajax,加載文件不會應用到加載頁面上。從這點上看,Ajax方法優越于JavaScript。

好了,本文就先介紹到這里,三種實現圖片預加載技術的方法大家都已經了解了吧,具體哪個更高效,我想小伙伴們也都看出來了,那就應用到自己的項目中吧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品乱码久久久久久金桔影视| 亚洲大胆人体视频| 欧美日韩在线视频一区二区| 欧美国产日韩一区二区在线观看| 日韩精品极品在线观看播放免费视频| 欧美一区二区三区免费视| 国产mv久久久| 国产精品丝袜一区二区三区| 日产日韩在线亚洲欧美| 亚洲一区二区三区在线视频| 日韩视频中文字幕| 亚洲人成网站999久久久综合| 亚洲自拍小视频| 亚洲美女中文字幕| 色悠悠久久88| 国产欧美日韩精品专区| 欧美壮男野外gaytube| 中文字幕日韩av电影| 亚洲美女精品成人在线视频| 在线观看欧美www| 国产精品三级美女白浆呻吟| 国产精品69精品一区二区三区| 欧美日韩国产一中文字不卡| 欧美成人黑人xx视频免费观看| 欧美亚洲另类制服自拍| 26uuu亚洲伊人春色| 亚洲激情免费观看| 久久精品中文字幕一区| 日韩精品一区二区三区第95| 91精品国产乱码久久久久久蜜臀| 全球成人中文在线| 欧美精品情趣视频| 国产精品久久久久久久一区探花| 欧洲成人免费视频| 欧美麻豆久久久久久中文| 欧美在线一级视频| 欧美国产精品日韩| 69影院欧美专区视频| 91理论片午午论夜理片久久| 亚洲成人网av| 日韩成人av在线| 欧美日韩精品国产| 国产精品美女主播在线观看纯欲| 丝袜美腿精品国产二区| 久久国产精品偷| 欧美亚洲在线播放| 国产色婷婷国产综合在线理论片a| 欧美性理论片在线观看片免费| 国产欧美精品一区二区三区介绍| 成人做爽爽免费视频| 欧美精品精品精品精品免费| 91精品综合久久久久久五月天| 日韩中文字幕在线| 91成人福利在线| 精品网站999www| 国产精品一区二区三| 亚洲国产精品久久| 国产成人福利视频| 亚洲国产精品va在看黑人| 欧美在线视频观看免费网站| 日韩大胆人体377p| 欧美成人午夜免费视在线看片| 亚洲在线免费观看| 国产精品大陆在线观看| 亚洲天堂男人天堂| 国产日韩欧美成人| 国产精品久久久久久亚洲影视| 日韩在线视频线视频免费网站| 92看片淫黄大片欧美看国产片| 97香蕉超级碰碰久久免费软件| 久久精品影视伊人网| 亚洲综合小说区| 国产精品久久久999| 欧美成人午夜影院| 成人动漫网站在线观看| 91美女片黄在线观| 中文字幕亚洲一区在线观看| 国产日本欧美视频| 一区二区三区 在线观看视| 亚洲色图日韩av| 日韩精品在线观| 久久久精品美女| 欧美午夜性色大片在线观看| 最近中文字幕mv在线一区二区三区四区| 成人在线视频网站| 国产香蕉97碰碰久久人人| 欧美中文字幕在线播放| 欧美插天视频在线播放| 久久久噜噜噜久久中文字免| 国产成人一区二区| 日韩国产精品视频| 日本精品视频在线播放| 国产不卡精品视男人的天堂| 一区二区三区精品99久久| 久久亚洲电影天堂| 欧美国产日韩一区二区| 国产一区二区三区在线视频| 国产mv免费观看入口亚洲| 欧美裸体男粗大视频在线观看| 另类专区欧美制服同性| 国产网站欧美日韩免费精品在线观看| 91精品视频在线播放| 国产精品亚洲美女av网站| y97精品国产97久久久久久| 亚洲欧美中文字幕在线一区| 中文字幕av日韩| 97av在线播放| 午夜欧美大片免费观看| 一区二区三区亚洲| 国产成人精品亚洲精品| 精品成人在线视频| 国产综合久久久久| 国产美女精品免费电影| 成人性教育视频在线观看| 亚洲电影免费观看高清完整版在线观看| 欧美一区二区影院| 久热爱精品视频线路一| 午夜精品理论片| 国产亚洲欧美日韩精品| 最近日韩中文字幕中文| 亚洲成av人片在线观看香蕉| 久久亚洲综合国产精品99麻豆精品福利| 久久久久久国产| 国产有码在线一区二区视频| 日本精品视频在线| 欧美大片免费观看在线观看网站推荐| 欧美亚洲午夜视频在线观看| 国产视频精品一区二区三区| 欧美大片免费观看在线观看网站推荐| 色噜噜狠狠狠综合曰曰曰| 57pao成人永久免费视频| 国产一区二区三区欧美| 国产精品青青在线观看爽香蕉| 亚洲伊人一本大道中文字幕| 中文欧美在线视频| 国产欧美久久一区二区| 青青精品视频播放| 成人免费视频在线观看超级碰| 97婷婷涩涩精品一区| 热99在线视频| 欧美黑人xxxⅹ高潮交| 久久男人av资源网站| www.精品av.com| 亚洲天堂av高清| 成人免费观看49www在线观看| 在线电影中文日韩| 欧美在线性视频| 亚洲欧洲第一视频| 欧美专区福利在线| 色偷偷91综合久久噜噜| 亚洲精品乱码久久久久久按摩观| 欧美在线一级va免费观看| 这里只有精品视频在线| 亚洲国产福利在线| 成人国产精品免费视频| 91日韩在线播放| 98精品国产自产在线观看| 在线亚洲国产精品网| 亚洲电影天堂av| 亚洲一区美女视频在线观看免费| 久久久久久久一区二区三区| 一区二区三区 在线观看视| 久久久久久国产精品三级玉女聊斋| 欧美在线视频一区|