亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

前端性能優(yōu)化之路——圖片篇。

wfc_666 / 2993人閱讀

摘要:判斷為白名單,則直接調(diào)用,返回格式圖片反之,則顯示原圖。處理處理,是美團云為美團主站提供的處理方式。目前,可用替換路徑的方式來處理。處理實際上效果也是不錯的,美團頁面里以上的圖片都是懶加載的,基本上都可以滿足需求。

本人是一名前端開發(fā)者,在公司負責目前負責信息流服務,為五大手機廠商和各大App提供服務,每天的請求就是以億計算,加上我們又做了SSP和DSP,就是類似于百度廣告聯(lián)盟,騰訊廣點通這種。接觸過的應該知道,所以前端優(yōu)化一直是我頭痛的問題,不僅要注重用戶體驗,同時要兼顧收益,有時候必須犧牲一些用戶體驗,但是作為一名有思想的前端,還是努力規(guī)避掉,希望能和從事相同業(yè)務的同學一起學習交流一下,話不多說,就來分享我的性能優(yōu)化之路,有什么不對的知識點,麻煩大家指出批評。

先附上基本的yahoo軍規(guī)——yahoo前端性能團隊總結的35條黃金定律

yahoo軍規(guī)把大部分的前端優(yōu)化都提到了,而在js優(yōu)化這一塊如果有興趣的額,推薦大家去看《高性能javascript》,書里講的非常詳細。https://segmentfault.com/a/11...

web前端優(yōu)化之圖片優(yōu)化

Media Queries 調(diào)用高清背景圖

國內(nèi)手機發(fā)展迅速,用 retina顯示屏的越來越多,假如現(xiàn)在有一張圖片,有兩部手機,一部是普通顯示屏,一部是高清顯示屏,在同樣大小的屏幕上,高清顯示屏中的位圖會被放大,圖片會變得模糊。

通過 devicePixelRatio的值,就可以區(qū)分普通顯示屏和高清屏,當devicePixelRatio值等于1時(也就是最小值),那么它普通顯示屏,當devicePixelRatio值大于1(通常是1.5、2.0),那么它就是高清顯示屏。這時候我們可以讓UI準備2套圖片,甚至是3套圖片,不同像素的圖利用媒體查詢結合 devicePixelRatio 可以區(qū)分普通顯示屏和高清顯示屏,并給出了如下CSS設計方案:

.css{/* 普通顯示屏(設備像素比例小于等于1.3)使用1倍的圖 */ 
    background-image: url(img_1x.png);
}
@media only screen and (-webkit-min-device-pixel-ratio:1.5){
.css{/* 高清顯示屏(設備像素比例大于等于1.5)使用2倍圖  */
    background-image: url(img_2x.png);
  }
}

也可以用less或者sass

bg-image($url)
  background-image: url($url + "@2x.png")
  @media (-webkit-min-device-pixel-ratio: 3),(min-device-pixel-ratio: 3)
    background-image: url($url + "@3x.png")

如果省時間通用性高,就像我們是服務端用nginx對圖片進行處理,想要什么樣尺寸的圖片自己裁切,我們提供了按比例縮放和自定尺寸的裁切方法,地址后拼接字符串就行。

http://image.uczzd.cn/12046251381056834816.jpg?id=0&from=export&width=800&height=600

使用更小更快更強,新一代圖片格式 WebP

WebP是谷歌在10年推出一種新型圖片格式,最早也是應用在谷歌產(chǎn)品中,谷歌發(fā)布的Android Studio 2.3正式版中就包括對WebP支持的更新,在實測中,webp 格式比 jpg 格式減小約 20%。這對優(yōu)化用戶體驗,減少CDN帶寬消耗有很好的效果,但并不是所有瀏覽器都支持 webp ,所以為了使用 webp,需要做一點兼容性的工作。

與其他圖片格式相比,在肉眼無法分辨圖片質(zhì)量差異的情況下,WebP的空間占用是最小的,目前國內(nèi)外各大互聯(lián)網(wǎng)公司都已經(jīng)開始應用這一圖片格式。比如美團

想實現(xiàn)首先是判斷,即識別單次訪問的來源瀏覽器是否支持 webp 格式,其次是執(zhí)行,如果該瀏覽器支持,則將原圖替換為 webp 格式,并返回。如果不支持,則顯示原格式圖片。http://caniuse.mojijs.com/Hom...

在識別階段,我們有兩種方法:

1. Server 處理

通過 UAString 判斷瀏覽器支持情況

只要有請求,服務端就能拿到你的User-Agent信息,通過對瀏覽器進行分類,支持webp放在白名單里,不支持的則為黑名單。判斷為白名單,則直接調(diào)用,返回webp格式圖片;反之,則顯示原圖。這種方式的優(yōu)點在于,只需定期維護白名單即可,邏輯簡單;缺點則在于不可擴展、不可測試、UA判斷會出現(xiàn)不準確的情況。

讀取 JavaScript 種下的 cookie 判斷瀏覽器支持情況

Server處理中的另一種方式是通過讀取 JavaScript 種下的 cookie來實現(xiàn)判斷。這種方式的優(yōu)點是表現(xiàn)穩(wěn)定,訪問速度更快,切換無壓力。但缺點是,頁面靜態(tài)化會導致用戶切換瀏覽器時不能自主更新,圖片服務失效。比如用戶用支持webp的瀏覽器A請求頁面,這時緩存的靜態(tài)頁面均使用webp圖片,但當該用戶使用不支持webp的瀏覽器B時,訪問網(wǎng)頁則會出現(xiàn)請求不到圖片的報錯。

Client 處理

Client 處理,是美團云為美團主站提供的處理方式。在這種處理方式中,瀏覽器端發(fā)送的beacon webp 請求后,通過檢測其加載情況來判定 webp 支持情況,然后瀏覽器寫一個cookie。之后通過讀取瀏覽器cookie判斷是否支持webp,就可以進行下一步替換操作了。

2.替換圖片過程中也是有兩種處理方式:

Server 處理

在 server 端處理的優(yōu)點是對下游開發(fā)者透明,缺點是靜態(tài)頁面的緩存數(shù)量會翻倍。
替換方式如下:

生成 URL 的函數(shù)( 比如 $deal->getImageUrl ) ,通過運行函數(shù)中直接實現(xiàn)替換.

對 varnish靜態(tài)化的頁面,首先識別瀏覽器請求頭類型,然后將webp 和傳統(tǒng) jpg 的各緩存一份兩份待處理。然后在生成 URL的地方做替換。

Client 處理

在 client 端處理可以比較好地應對頁面靜態(tài)化的情況,主要針對懶加載(非首屏)的圖片進行處理,直接通過修改懶加載器來實現(xiàn)。對非懶加載的圖片暫時沒有特別好的辦法。目前,可用替換路徑的方式來處理。

Client 處理實際上效果也是不錯的,美團頁面里90%以上的圖片都是懶加載的,基本上都可以滿足需求。對于大多數(shù)用戶來說,采用Client 處理實現(xiàn)webp轉(zhuǎn)換是個不錯的選擇。

tracking Pixel(像素追蹤)精準追蹤數(shù)據(jù)

既然提到圖片這一塊,我有忍不住想扯寫些題外的tracking Pixel(像素追蹤),幾乎所有網(wǎng)站都會做數(shù)據(jù)的采集,上報統(tǒng)計。特別是我們做SSP、DSP廣告這塊需要獲取例如

用戶使用的瀏覽器、操作系統(tǒng)、分辨率等。

用戶瀏覽行為記錄,比如用戶網(wǎng)站上的點擊行為、購買行為等。

用戶在APP、WEB中停留時間、是否活躍等

數(shù)據(jù)永遠說的是實話,數(shù)據(jù)證明一切可能。如facebook廣告投放的跨境電商朋友都會使用facebook Pixel(像素追蹤)以獲得各環(huán)節(jié)的精準數(shù)據(jù)。這樣追蹤數(shù)據(jù)后,我們才能投放廣告后銷量上去了,哪個才是效果最好的,哪個效果不好,進而通過多個數(shù)據(jù)對比,對廣告進行合理的調(diào)整優(yōu)化。

 國內(nèi)搜狗、百度、360、新浪都是用這種tracking Pixel方法,實際就是利用1px 的圖片,在圖片地址后綴拼接你需要的信息參數(shù),瀏覽器在請求任何資源的時候會發(fā)送當前系統(tǒng)的數(shù)據(jù),比如瀏覽器信息,操作系統(tǒng)信息,作為http請求頭送過去,他們就能統(tǒng)計了。


為什么不用js請求統(tǒng)計?

并不是所有的頁面都支持JS的!NoJSStats的實現(xiàn)機制就是網(wǎng)站分析中點擊流數(shù)據(jù)獲取的方式之一——Web Beacons,即在頁面中嵌入一個1像素的透明圖片,當該頁面被瀏覽時,圖片就會被請求加載,于是在后端的服務器日志中就會記錄該圖片的請求日志,這樣就可以獲得日志記錄。

例如百度:

這是百度1px圖片地址: http://wn.pos.baidu.com/adx.php?

var url = ["http://eclick.baidu.com/se.jpg?", "type=fatalError", "data=1220", "mes=" + encodeURIComponent(e)].join("&"),    
img = new Image;    
img.src = url
百度在地址欄后拼接了很多參數(shù),后端按照圖片后綴名生成對應的數(shù)據(jù)報表。
                                                                                                

本文引用@美團云 提供的webP方法,感謝。

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/93215.html

相關文章

  • 架構師之路

    摘要:因為用戶不用在第一次進入應用時下載所有代碼,用戶能更快的看到頁面并與之交互。譯高階函數(shù)利用和來編寫更易維護的代碼高階函數(shù)可以幫助你增強你的,讓你的代碼更具有聲明性。知道什么時候和怎樣使用高階函數(shù)是至關重要的。 Vue 折騰記 - (10) 給axios做個挺靠譜的封裝(報錯,鑒權,跳轉(zhuǎn),攔截,提示) 稍微改改都能直接拿來用~~~喲吼吼,喲吼吼..... 如何無痛降低 if else 面...

    NikoManiac 評論0 收藏0
  • 前端優(yōu)化 - 收藏集 - 掘金

    摘要:雖然有著各種各樣的不同,但是相同的是,他們前端優(yōu)化不完全指南前端掘金篇幅可能有點長,我想先聊一聊閱讀的方式,我希望你閱讀的時候,能夠把我當作你的競爭對手,你的夢想是超越我。 如何提升頁面渲染效率 - 前端 - 掘金Web頁面的性能 我們每天都會瀏覽很多的Web頁面,使用很多基于Web的應用。這些站點看起來既不一樣,用途也都各有不同,有在線視頻,Social Media,新聞,郵件客戶端...

    VincentFF 評論0 收藏0

發(fā)表評論

0條評論

wfc_666

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<