摘要:的速度明顯快于重排重繪與的區(qū)別理解了瀏覽器是如何渲染頁面之后我們?cè)賮肀容^這兩者就很好理解了執(zhí)行的時(shí)間必須等到頁面內(nèi)包括圖片的所有元素加載完畢后才能執(zhí)行。
先上圖,我們?cè)俾忉專@圖就是瀏覽器加載網(wǎng)頁的一個(gè)過程
當(dāng)我們?cè)跒g覽器輸入一個(gè)地址(比如:http://toadw.cn),那么點(diǎn)擊回車后,瀏覽器是如何加載網(wǎng)頁的呢?
加載過程一開始瀏覽器是不知道你輸入的http://toadw.cn這個(gè)東西是什么的,也不知道要去哪里給你找這個(gè)網(wǎng)頁,他需要向DNS服務(wù)發(fā)出解析請(qǐng)求
大致的步驟如下:
瀏覽器發(fā)送toadw.cn尋址請(qǐng)求給DNS服務(wù)
DNS返回?cái)?shù)據(jù)告訴瀏覽器toadw.cn的服務(wù)器地址是255.255.255.255
本地電腦緩存DNS數(shù)據(jù),并發(fā)送請(qǐng)求給255.255.255.255這個(gè)服務(wù)器,然后瀏覽器和服務(wù)器根據(jù)HTTP協(xié)議進(jìn)行通訊
網(wǎng)頁渲染瀏覽器拿到HTML代碼之后,它是如何顯示給大家看的呢?其實(shí)所謂的渲染就是講HTML代碼根據(jù)CSS定義的規(guī)則顯示在瀏覽器窗口中的這個(gè)過程
首先瀏覽器先把這個(gè)HTML文檔先轉(zhuǎn)化為DOM樹,然后根據(jù)這個(gè)DOM樹,進(jìn)行渲染,轉(zhuǎn)化為可視的東西
在渲染的時(shí)候,瀏覽器從上到下依次渲染DOM樹,當(dāng)發(fā)現(xiàn)有外鏈資源或腳本、、的時(shí)候會(huì)異步發(fā)起請(qǐng)求加載,同時(shí)DOM樹的解析繼續(xù)。一般我們都會(huì)把style都放在head里面,那么這樣瀏覽器就先拿到了css樣式文件,他就知道如何講每個(gè)元素繪出來放在哪個(gè)位置。
如果遇到圖片瀏覽器不會(huì)等圖片加載完再去加載,而是繼續(xù)加載,這樣就會(huì)出現(xiàn)個(gè)問題,當(dāng)圖片加載完時(shí),在頁面插入圖片會(huì)影響頁面的結(jié)果,瀏覽器就又要重新排布,這樣瀏覽器又要花費(fèi)時(shí)間跟經(jīng)歷去排布,所有如果圖片是固定的尺寸,我們?cè)趯慍SS的時(shí)候就應(yīng)該給他加上寬高,瀏覽器就會(huì)預(yù)留一個(gè)位置給圖片,這樣就避免了重新排布
上文中將到的重新排布就是回流,網(wǎng)頁加載慢,有一部分原因就是回流,因?yàn)闉g覽器要耗更多的時(shí)間去重新排布渲染,但回流也是不可避免的,因?yàn)榫W(wǎng)頁中的一些效果,如鼠標(biāo)滑過、點(diǎn)擊效果等引起了頁面上某些元素的占位面積、定位方式、邊距包括瀏覽器的伸縮等的變化都會(huì)發(fā)生回流。但也有些事可以避免的,例如上文中說的給圖片定死寬高。
有個(gè)和 reflow 看上去差不多的術(shù)語:repaint,中文叫重繪。如果只是改變某個(gè)元素的背景色、文字顏色、邊框顏色等等不影響它周圍或內(nèi)部布局的屬性,將只會(huì)引起瀏覽器 repaint。repaint 的速度明顯快于reflow
$(img).css("width",200px)//重排 $(body).css("backgroud","#fff")//重繪window.onload()與$(document).ready()的區(qū)別
理解了瀏覽器是如何渲染頁面之后我們?cè)賮肀容^這兩者就很好理解了
執(zhí)行的時(shí)間
window.onload必須等到頁面內(nèi)包括圖片的所有元素加載完畢后才能執(zhí)行。 $(document).ready()是DOM結(jié)構(gòu)繪制完畢后就執(zhí)行,不必等到加載完畢。
可編寫個(gè)數(shù)不停
window.onload不能同時(shí)編寫多個(gè),如果有多個(gè)window.onload方法,只會(huì)執(zhí)行一個(gè) $(document).ready()可以同時(shí)編寫多個(gè),并且都可以得到執(zhí)行
簡化縮寫
window.onload沒有簡化寫法 $(document).ready(function(){})可以簡寫成$(function(){});也可寫成$().ready()$().load()和window.onload()的區(qū)別
這里又會(huì)聯(lián)想到 $().load()和window.onload()有沒有區(qū)別?
查看jq文檔load()事件的定義是
當(dāng)指定的元素(及子元素)已加載時(shí),會(huì)發(fā)生 load() 事件。且$(window).load 方法是 $(window).on("load",handler) 的shortcut
所以$(window).load()和window.onload()是沒區(qū)別的,唯一的小區(qū)別就是$(window).load()可以寫很多個(gè)。
最后來個(gè)小練習(xí)如何用原生的JS實(shí)現(xiàn)$(doucment).ready()?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/116592.html
摘要:的速度明顯快于重排重繪與的區(qū)別理解了瀏覽器是如何渲染頁面之后我們?cè)賮肀容^這兩者就很好理解了執(zhí)行的時(shí)間必須等到頁面內(nèi)包括圖片的所有元素加載完畢后才能執(zhí)行。 先上圖,我們?cè)俾忉專@圖就是瀏覽器加載網(wǎng)頁的一個(gè)過程 showImg(https://segmentfault.com/img/remote/1460000008648335?w=516&h=425); 當(dāng)我們?cè)跒g覽器輸入一個(gè)地址...
摘要:不存在或格式不正確會(huì)導(dǎo)致文檔以兼容模式呈現(xiàn)標(biāo)準(zhǔn)模式的排版和運(yùn)作模式都是以該瀏覽器支持的最高標(biāo)準(zhǔn)運(yùn)行。如果不能確定時(shí),首選使用自然樣式標(biāo)簽 HTML 語義化 HTML標(biāo)簽的語義化是指:通過使用包含語義的標(biāo)簽(如h1-h6)恰當(dāng)?shù)乇硎疚臋n結(jié)構(gòu) css命名的語義化是指:為html標(biāo)簽添加有意義的class 為什么需要語義化: 去掉樣式后頁面呈現(xiàn)清晰的結(jié)構(gòu) 盲人使用讀屏器更好地閱讀 搜...
摘要:歡迎來我的個(gè)人站點(diǎn)性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動(dòng)及頁面渲染優(yōu)化理論寫法對(duì)壓縮率的影響唯快不破應(yīng)用的個(gè)優(yōu)化步驟進(jìn)階鵝廠大神用直出實(shí)現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補(bǔ)課緩存機(jī)制優(yōu)化動(dòng) 歡迎來我的個(gè)人站點(diǎn) 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動(dòng) scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...
摘要:歡迎來我的個(gè)人站點(diǎn)性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動(dòng)及頁面渲染優(yōu)化理論寫法對(duì)壓縮率的影響唯快不破應(yīng)用的個(gè)優(yōu)化步驟進(jìn)階鵝廠大神用直出實(shí)現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補(bǔ)課緩存機(jī)制優(yōu)化動(dòng) 歡迎來我的個(gè)人站點(diǎn) 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動(dòng) scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...
閱讀 1626·2021-11-22 14:45
閱讀 1076·2021-11-17 09:33
閱讀 3329·2021-09-02 09:48
閱讀 976·2019-08-30 15:54
閱讀 2775·2019-08-30 15:53
閱讀 2561·2019-08-30 12:54
閱讀 2250·2019-08-29 12:37
閱讀 2429·2019-08-26 13:58