" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Data URL和圖片,及Data URI的利弊

系統(tǒng) 2676 0

Data URL 給了我們一種很巧妙的將圖片“嵌入”到HTML中的方法。跟傳統(tǒng)的用 img 標(biāo)記將服務(wù)器上的圖片引用到頁(yè)面中的方式不一樣,在Data URL協(xié)議中,圖片被轉(zhuǎn)換成 base64 編碼的字符串形式,并存儲(chǔ)在URL中,冠以mime-type。本文中,我將介紹如何巧妙的使用Data URL優(yōu)化網(wǎng)站加載速度和執(zhí)行效率。


?
1. Data URL基本原理

圖片在網(wǎng)頁(yè)中的使用方法通常是下面這種利用 img 標(biāo)記的形式:

        <img src="images/myimage.gif ">
      
?

這種方式中, img 標(biāo)記的 src 屬性指定了一個(gè)遠(yuǎn)程服務(wù)器上的資源。當(dāng)網(wǎng)頁(yè)加載到瀏覽器中 時(shí),瀏覽器會(huì)針對(duì)每個(gè)外部資源都向服務(wù)器發(fā)送一次拉取資源請(qǐng)求,占用網(wǎng)絡(luò)資源。大多數(shù)的瀏覽器都有一個(gè)并發(fā)請(qǐng)求數(shù)不能超過(guò)4個(gè)的限制。這意味著,如果一個(gè) 網(wǎng)頁(yè)里嵌入了過(guò)多的外部資源,這些請(qǐng)求會(huì)導(dǎo)致整個(gè)頁(yè)面的加載延遲。而使用Data URL技術(shù),圖片數(shù)據(jù)以base64字符串格式嵌入到了頁(yè)面中,與HTML成為一體,它的形式如下:

        <img src="data:image/gif;base64,R0lGODlhMwAxAIAAAAAAAP///
yH5BAAAAAAALAAAAAAzADEAAAK8jI+pBr0PowytzotTtbm/DTqQ6C3hGX
ElcraA9jIr66ozVpM3nseUvYP1UEHF0FUUHkNJxhLZfEJNvol06tzwrgd
LbXsFZYmSMPnHLB+zNJFbq15+SOf50+6rG7lKOjwV1ibGdhHYRVYVJ9Wn
k2HWtLdIWMSH9lfyODZoZTb4xdnpxQSEF9oyOWIqp6gaI9pI1Qo7BijbF
ZkoaAtEeiiLeKn72xM7vMZofJy8zJys2UxsCT3kO229LH1tXAAAOw==">
      

?

從上面的base64字符串中你看不出任何跟圖片相關(guān)的東西,但下面,我們將傳統(tǒng)的 img 寫(xiě)法和現(xiàn)在的Data URL用法左右對(duì)比顯示,你就能看出它們是完全一樣的效果。但實(shí)際上它們是不一樣的,它們一個(gè)是引用了外部資源,一個(gè)是使用了Data URL。

幾乎所有的現(xiàn)代瀏覽器都支持Data URL格式,包括火狐瀏覽器,谷歌瀏覽器,Safari瀏覽器,opera瀏覽器。IE8也支持,但有部分限制,IE9完全支持。

?
2. 為什么Data URL是個(gè)好東西

Data URL能用在很多場(chǎng)合,跟傳統(tǒng)的外部資源引用方式相比,它有如下獨(dú)到的用處:

  • 當(dāng)訪問(wèn)外部資源很麻煩或受限時(shí)
  • 當(dāng)圖片是在服務(wù)器端用程序動(dòng)態(tài)生成,每個(gè)訪問(wèn)用戶顯示的都不同時(shí)。
  • 當(dāng)圖片的體積太小,占用一個(gè)HTTP會(huì)話不是很值得時(shí)。

Data URL也有一些不適用的場(chǎng)合

  • Base64編碼的數(shù)據(jù)體積通常是原數(shù)據(jù)的體積4/3,也就是Data URL形式的圖片會(huì)比二進(jìn)制格式的圖片體積大1/3。
  • Data URL形式的圖片不會(huì)被瀏覽器緩存,這意味著每次訪問(wèn)這樣頁(yè)面時(shí)都被下載一次。這是一個(gè)使用效率方面的問(wèn)題——尤其當(dāng)這個(gè)圖片被整個(gè)網(wǎng)站大量使用的時(shí)候。

然而,Data URL這些不利的地方完全可以避免或轉(zhuǎn)化。本文的重點(diǎn)就是要討論這個(gè)問(wèn)題。

?
3. 在CSS里使用Data URL

當(dāng)?shù)谝淮慰吹紻ata URL的作用和用法時(shí),你也許會(huì)很不疑惑,“為什么要麻煩的將圖片轉(zhuǎn)換成base64編碼字符串,還要嵌入的網(wǎng)頁(yè)中,將HTML代碼弄的混亂不堪,甚至還會(huì)有性能上的問(wèn)題。”

?

誠(chéng)然,無(wú)法否認(rèn)緩存在瀏覽器性能中的重要作用——如何能將Data URL數(shù)據(jù)也放入瀏覽器緩存中呢?答案是:通過(guò)CSS樣式文件。CSS中的 url 操作符是用來(lái)指定網(wǎng)頁(yè)元素的背景圖片的,而瀏覽器并不在意URL里寫(xiě)的是什么——只要能通過(guò)它獲取需要的數(shù)據(jù)。所以,我們就有了可以將Data URL形式的圖片存儲(chǔ)在CSS樣式表中的可能。而所有瀏覽器都會(huì)積極的緩存CSS文件來(lái)提高頁(yè)面加載效率。

?

假設(shè)我們的頁(yè)面里有一個(gè)很小的 div 元素,我們想用一種灰色的斜紋圖案做它的背景,這種背景在當(dāng)今的網(wǎng)站設(shè)計(jì)者中非常流行。傳統(tǒng)的方法是制作一個(gè)3×3像素的圖片,保存成GIF或PNG格式,然后在CSS的 background-image 屬性中引用它的地址。而Data URL則是一種更高效的替代方法,就像下面這樣。

下面是CSS代碼:

        .striped_box
  {
  width: 100px;
  height: 100px;
  background-image: url("data:image/gif;base64,R0lGODlhAwADAIAAAP///8zMzCH5BAAAAAAALAAAAAADAAMAAAIEBHIJBQA7");
  border: 1px solid gray;
  padding: 10px;
  }
      
?

在我們的HTML里放入下面的代碼:

        <div class="striped_box lazy ">
這是一個(gè)有條紋的方塊
</div>
      
?

實(shí)際輸出效果就是下面這樣

這是一個(gè)有條紋的方塊

在這個(gè)例子中,Data URL的使用是完全符合場(chǎng)景的。它避免了讓這個(gè)小小的背景圖片獨(dú)自產(chǎn)生一次HTTP請(qǐng)求,而且,這個(gè)小圖片還能同CSS文件一起被瀏覽器緩存起來(lái),重復(fù)使 用,不會(huì)每次使用時(shí)都加載一次。只要這個(gè)圖片不是很大,而且不是在CSS文件里反復(fù)使用,就可以以Data URL方法呈現(xiàn)圖片降低頁(yè)面的加載時(shí)間,改善用戶的瀏覽體驗(yàn)。

?

?
4. 將圖片轉(zhuǎn)換成Data URL格式的方法

用Data URL來(lái)展示圖片的例子以及它的好處我們說(shuō)完了,下面我們轉(zhuǎn)入下一個(gè)問(wèn)題,如何將圖片轉(zhuǎn)換成Base64編碼的字符串。其實(shí)網(wǎng)上有很多工具都可以使用,下面列舉了幾個(gè)。其中一個(gè)是在線工具,一個(gè)Mac OS X桌面應(yīng)用。

?
Data URL總結(jié)

IE6/7是不支持Data URL技術(shù)的,不幸的是在中國(guó)還有很多用戶在使用這種古老的瀏覽器。希望各方面包括官方和民間都多做努力工作,讓現(xiàn)代瀏覽器(谷歌瀏覽器,火狐瀏覽器,IE11+)盡快的占領(lǐng)市場(chǎng),這是我們Web程序員最大的愿望。

原文: http://www.webhek.com/data-url/

?

最近Data URI似乎熱了起來(lái),特別是從淘寶UED上發(fā)了一篇《 Data URI小試 —— 在旺旺點(diǎn)燈(JS)上的應(yīng)用 》后,陸續(xù)出現(xiàn)這方面的文章。看到不少人提到Data URL時(shí)都只是提到了優(yōu)點(diǎn),我也好奇了一把,借這機(jī)會(huì)更全面了解了下。

?

說(shuō)到Data URI的優(yōu)點(diǎn),自然少不了“減少鏈接數(shù)”,把圖片轉(zhuǎn)為Base64編碼,以減少圖片的鏈接數(shù)。我們先想當(dāng)然一下,同樣一張圖片,如果不用發(fā)起一個(gè)下載請(qǐng)求,打開(kāi)速度是會(huì)更快的。但是,有幾個(gè)問(wèn)題需要關(guān)注下:

  • 圖片始終是要下載的,那么下載一張圖片的速度快還是下載一堆編碼快?
  • 瀏覽器對(duì)圖片的顯示,處理效率哪個(gè)更快?
  • 圖片的緩存問(wèn)題

做了幾個(gè)Demo,我們來(lái)看對(duì)比下:
多小圖的處理對(duì)比: Demo1 DataURI Demo2 img
單圖處理對(duì)比: Demo1 DataURI Demo2 img

?

多刷新幾次,可以發(fā)現(xiàn),使用Data URI方式的Demo在渲染時(shí)會(huì)比不使用 多消耗53%左右的CPU資源,內(nèi)存多出4倍左右,耗時(shí)平均高出24.6倍 。由此可見(jiàn),使用Data URl方式還是需要更多的考量,在可接受的范圍內(nèi)適量使用。

?

有關(guān)Data URI的介紹可以看下《 data URI scheme 》和《 利用 Data URL 加速你的網(wǎng)頁(yè) 》,里面提到的IE8以下瀏覽器不支持的問(wèn)題,相應(yīng)的解決方案可以看《 MHTML – when you need data: URI s in IE7 and under 》,當(dāng)然使用這種方法的代價(jià)就是為了兼容IE6\7,使代碼量多出一倍;優(yōu)點(diǎn)是可以被Cache和Gzip壓縮。

CSS森林 下方使用了另一種兼容IE6\7的方式,有興趣的同學(xué)可以找找。

文章地址: http://www.cssforest.org/blog/index.php?id=152

Data URL和圖片,及Data URI的利弊


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 97久久久久 | 亚洲国产一区二区三区四区 | 日韩在线看片中文字幕不卡 | 亚洲国产精品久久久久婷婷软件 | 亚洲国产品综合人成综合网站 | 日日噜噜夜夜狠狠视频buoke | 一级毛片免费不卡 | 国产成人免费a在线资源 | 亚洲国产高清人在线 | 伊人久久精品亚洲精品一区 | 亚洲天堂三级 | 色老头老太xxxxbbbb | 91热久久免费频精品99欧美 | 人人看操| 2021国产精品自产拍在线 | 中文字幕久精品免费视频蜜桃视频 | 国产a毛片清高视频 | 国产色婷婷亚洲 | 国产精品久久二区三区色裕 | 最新国产精品视频 | 天天色色网 | 天天操天天摸天天舔 | 欧美一级片 在线播放 | 熊出没之重启未来免费观看 | 九九热视频在线免费观看 | 狠狠色伊人亚洲综合第8页 狠狠色综合久久丁香婷婷 狠狠色综合久久婷婷 | 亚洲国产99在线精品一区二区 | 男女羞羞免费视频 | 欧美黄色录像视频 | 麻豆国产一区 | 中国jizz日本| 精品免费tv久久久久久久 | 久草视频在线免费播放 | 欧美一级美片在线观看免费 | 手机看片一区二区 | 四虎影院在线视频 | 97在线成人免费视频观看 | 国产精品久久久久久久久鸭 | 深夜精品寂寞在线观看黄网站 | 狠狠色噜狠狠狠狠 | 欧美高清亚洲欧美一区h |