摘要:前言優(yōu)化又是優(yōu)化切圖崽們作為整個(gè)應(yīng)用的紐帶,連接著用戶行為和機(jī)器性能而優(yōu)化的最終意義,在于在這兩者之間取得一個(gè)最佳的平衡點(diǎn)對于圖片資源的加載來說,更是如此今天我們就來簡單說說,項(xiàng)目開發(fā)中常見的圖片加載優(yōu)化方式預(yù)加載遮罩大法我們經(jīng)常用中實(shí)際上
前言
優(yōu)化! 又是優(yōu)化!
切圖崽們作為整個(gè)web應(yīng)用的紐帶,連接著用戶行為和機(jī)器性能. 而優(yōu)化的最終意義,在于在這兩者之間取得一個(gè)最佳的平衡點(diǎn).
對于圖片資源的加載來說,更是如此. 今天我們就來簡單說說,項(xiàng)目開發(fā)中常見的圖片加載優(yōu)化方式.
預(yù)加載 1.遮罩大法我們經(jīng)常用jquery, jquery中$(function){})實(shí)際上是DOMContentLoaded事件完成的回調(diào),只是完成了DOM樹的構(gòu)建. 諸如Css的渲染以及頁面內(nèi)圖片等資源的下載不一定完成了.所以如果此時(shí)呈現(xiàn)頁面,頁面會非常難看.
為了解決這個(gè)問題,為了從設(shè)計(jì)和行為的角度提高用戶體驗(yàn),我們可以在圖片等重要資源完全下載完之前,對頁面加上較為美觀的遮罩,并且彈出loading提示告知用戶資源正在loading.等到圖片完全加載完,才移除遮罩和加載動(dòng)畫.
具體的實(shí)現(xiàn)思路如下:
$(function(){})調(diào)用之后,先彈出蒙板加上loading動(dòng)畫用來提示用戶正在loading中
對頁面中需要預(yù)加載的IMG元素進(jìn)行下載var img = new Image(); img.src="xx.jpg"
圖片下載完成會有一個(gè)onload的回調(diào)img.onload = function(){...}
在這個(gè)回調(diào)中移除loading動(dòng)畫以及遮罩
這樣就可以給用戶帶來順滑如絲般的操作體驗(yàn)了,再也不用擔(dān)心用戶看到那些正在下載的未顯示完全的丑的要死圖片了.
我們的口號是: 要么就不給你看,要么就給你看最好的
應(yīng)用場景: 請?jiān)?首屏中存在圖片的動(dòng)畫,或者和你對接的UI設(shè)計(jì)師極其強(qiáng)勢"的情況下使用
有碼大法和遮罩大法略微有區(qū)別,具體實(shí)現(xiàn)思路如下:
首先對你需要預(yù)加載的圖片準(zhǔn)備兩張,一張是高清一張低清. 比如girl_hd大小為60kb. 另一張是girl, 大小是6kb.
html頁面中需要預(yù)加載的image標(biāo)簽的src地址寫的是低清的地址
因?yàn)榈颓鍒D很小,很快就能被加載出來.
$(function(){})調(diào)用之后,獲取頁面需要高清替換的img的src(girl.jpg),以此src為基準(zhǔn)拼接字符串(+"_hd.jpg")獲得高清圖的地址(girl_hd.jpg),然后用下載該高清圖var img = new Image(); img.src=“girl_hd.jpg”
圖片下載完成會有一個(gè)onload的回調(diào)img.onload = function(){...}
回調(diào)中替換掉頁面中img的src, 所以現(xiàn)在頁面上的image標(biāo)簽為
我們的口號是: 想看無碼高清,請先看有碼低清
應(yīng)用場景: 請?jiān)?首屏中出現(xiàn)大量圖片,且尺寸都不小"的情況下使用
如果你仔細(xì)看了上面預(yù)加載的思路,一定往我腦袋上拍磚: 遮罩大法也好,有碼大法也好,這并沒有提高項(xiàng)目的加載速度啊,最后該下載的圖片還不是得下載. 沒錯(cuò),懶加載只是改變了用戶的操作感受,實(shí)際上項(xiàng)目的加載速度并沒有提高. 但是,現(xiàn)在要說的懶加載,可是實(shí)實(shí)在在的提高了項(xiàng)目的加載速度哦.
什么是懶加載,一句話來解釋, 就是圖片按需加載.
大家一定刷過微博,微博的照片墻就是懶加載的最佳示例.一開始顯示的照片并不多,只有用戶下拉,拉到底部的位置, 照片墻才會被拉長,新的圖片才會被加載.
操作思路:
監(jiān)聽滾動(dòng)條scroll事件(當(dāng)然touchmove事件也可以)
每次事件觸發(fā)的時(shí)候,判斷當(dāng)前照片墻的位置
如果照片墻已經(jīng)被刷到了底部某個(gè)臨界位置點(diǎn)
Js下載新出現(xiàn)的圖片,var img = new Image(); img.src="xx.jpg"
下載完成有一個(gè)onload的回調(diào)img.onload = function(){...}
在下載完成的回調(diào)中向頁面中插入已經(jīng)下載好的圖片
當(dāng)然,根據(jù)項(xiàng)目不同,會有各種各樣的懶加載方式.但核心是不變的:即頁面初始加載的時(shí)候,只加載滿足用戶需求的最小數(shù)量的資源. 拿照片墻舉例,可能用戶的微博里有500張照片,如果你在頁面加載的時(shí)候就加載500張,用戶會卡到爆炸(因?yàn)楹笈_一直處于圖片下載狀態(tài)). 如果頁面加載的時(shí)候只初始加載20張圖片,其他的圖片通過用戶自己的操作(滾動(dòng)下拉),來按需加載,會極大提升項(xiàng)目運(yùn)行的流暢程度.
結(jié)語雖然預(yù)加載還是懶加載實(shí)現(xiàn)原理都非常簡單,給我的啟示確是巨大的:
預(yù)加載除了改善用戶的操作感受,其深層次的核心其實(shí)在于:對資源進(jìn)行碎片化加載, 即預(yù)加載其實(shí)可以出現(xiàn)在任何時(shí)間段,當(dāng)用戶鼠標(biāo)很長時(shí)間沒移動(dòng)的時(shí)候,我可不可以偷偷下載兩張圖片?在用戶目前沒有進(jìn)行大量運(yùn)算操作的時(shí)候,我可不可以偷偷下載兩張圖片?當(dāng)用戶當(dāng)前在一個(gè)很精簡的登陸界面的時(shí)候,我可不可以偷偷下載他登陸成功跳轉(zhuǎn)到的頁面的幾張圖片?等等等等
懶加載的深層次核心在于:按需, 按需這個(gè)詞已經(jīng)被深深刻在我腦子里了. 現(xiàn)在回想起來,很多很多優(yōu)化方式都是圍繞著按需來展開的. 按需加載Js,按需加載圖片等等
首先,我們必須保證項(xiàng)目第一時(shí)間的加載速度,能讓用戶在最短的時(shí)間內(nèi)看到頁面和內(nèi)容.
其次,盡量保證當(dāng)前頁面的精簡程度,不去做無意義的加載. 只有當(dāng)用戶真正需要時(shí),我們才展現(xiàn)給他.
各自的優(yōu)缺點(diǎn)在于:預(yù)加載:
優(yōu)點(diǎn):如果提前下好了圖片,等到這張圖片需要用到時(shí),可以秒開.
缺點(diǎn):下載圖片的時(shí)候會影響項(xiàng)目的加載完成時(shí)間,會影響項(xiàng)目運(yùn)行的流暢程度
懶加載在于:
優(yōu)點(diǎn): 保證用戶加載的項(xiàng)目是最精簡的,最快的, 所下載資源是最少的
缺點(diǎn): 如果用戶的操作觸發(fā)了懶加載,那么需要等待資源下載到完成的時(shí)間,同時(shí)資源下載期間,操作流暢度降低
說到底,項(xiàng)目的優(yōu)化是沒有銀彈的,這一部分的高效很可能導(dǎo)致另一部分的低效.A項(xiàng)目的優(yōu)化方法照搬來B項(xiàng)目可能一文不值.
所以我們切圖崽們能做的,就是深刻理解這些技術(shù)的原理,并且在項(xiàng)目中吸收經(jīng)驗(yàn),只有深刻地理解了各項(xiàng)技術(shù)的優(yōu)劣,只有深刻的理解了用戶的需求以及行為習(xí)慣,才能針對特定的項(xiàng)目,特定的場景,進(jìn)行最適合的處理.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/111330.html
摘要:前言優(yōu)化又是優(yōu)化切圖崽們作為整個(gè)應(yīng)用的紐帶,連接著用戶行為和機(jī)器性能而優(yōu)化的最終意義,在于在這兩者之間取得一個(gè)最佳的平衡點(diǎn)對于圖片資源的加載來說,更是如此今天我們就來簡單說說,項(xiàng)目開發(fā)中常見的圖片加載優(yōu)化方式預(yù)加載遮罩大法我們經(jīng)常用中實(shí)際上 前言 優(yōu)化! 又是優(yōu)化! 切圖崽們作為整個(gè)web應(yīng)用的紐帶,連接著用戶行為和機(jī)器性能. 而優(yōu)化的最終意義,在于在這兩者之間取得一個(gè)最佳的平衡點(diǎn). ...
摘要:前言優(yōu)化又是優(yōu)化切圖崽們作為整個(gè)應(yīng)用的紐帶,連接著用戶行為和機(jī)器性能而優(yōu)化的最終意義,在于在這兩者之間取得一個(gè)最佳的平衡點(diǎn)對于圖片資源的加載來說,更是如此今天我們就來簡單說說,項(xiàng)目開發(fā)中常見的圖片加載優(yōu)化方式預(yù)加載遮罩大法我們經(jīng)常用中實(shí)際上 前言 優(yōu)化! 又是優(yōu)化! 切圖崽們作為整個(gè)web應(yīng)用的紐帶,連接著用戶行為和機(jī)器性能. 而優(yōu)化的最終意義,在于在這兩者之間取得一個(gè)最佳的平衡點(diǎn). ...
摘要:前言我的項(xiàng)目沒問題,是用戶的網(wǎng)絡(luò)環(huán)境不夠好前端作為一個(gè)最貼近用戶的技術(shù)工種,毫無疑問應(yīng)該把戶體驗(yàn)放在第一位而用戶體驗(yàn),基本正比于頁面的打開速度,特別是做移動(dòng)端的同學(xué),所以如何優(yōu)化自己的項(xiàng)目,提高頁面的加載速度成為重中之重資源的下載及解析對前 前言 我的項(xiàng)目沒問題,是用戶的網(wǎng)絡(luò)環(huán)境不夠好 前端作為一個(gè)最貼近用戶的技術(shù)工種,毫無疑問應(yīng)該把戶體驗(yàn)放在第一位. 而用戶體驗(yàn),基本正比于頁面的打開...
摘要:體驗(yàn)記錄大法好退保平安打包工具前端工程化一直是前端的一塊重點(diǎn)之前構(gòu)建工具的選擇上,公司也是很早之前就從收攏為的確是個(gè)好工具,作為工具核心的依賴表是非常好的構(gòu)建思路,也是很多大公司一直在用的構(gòu)建工具但是個(gè)人用的非常不習(xí)慣生態(tài)不是很好它太大太重 Webpack體驗(yàn)記錄 webpack大法好 退fis保平安 打包工具前端工程化一直是前端的一塊重點(diǎn).之前構(gòu)建工具的選擇上,公司也是很早之前就從g...
閱讀 3747·2023-04-25 18:41
閱讀 1180·2021-11-11 16:55
閱讀 1840·2021-09-22 15:54
閱讀 3075·2021-09-22 15:51
閱讀 3550·2019-08-30 15:55
閱讀 1946·2019-08-30 14:19
閱讀 1287·2019-08-29 10:57
閱讀 1707·2019-08-29 10:56