20211025

1、回流于重繪
答:回流:當(dāng)rander tree中發(fā)生元素的顯示隱藏,尺寸變化,布局變化時(shí)需要重新構(gòu)建就是回流。因?yàn)轫撁嬉獦?gòu)建rander tree,每個(gè)頁面會發(fā)生至少一次的回流,就是在第一次加載頁面的時(shí)候。
重繪:當(dāng)rander tree上有一些屬性發(fā)生變化,這些屬性影響外觀顏色風(fēng)格,而不影響結(jié)構(gòu)的時(shí)候,就會發(fā)生重繪,比如background-color。
區(qū)別:回流必將引起重繪,而重繪不一定引起回流,比如改變顏色的時(shí)候會引起重繪,但是不會回流。比如改變元素顯示的時(shí)候就會引起回流并重繪。
2、怎么樣避免瀏覽器一直回流于重繪
答:瀏覽器本身也會幫忙優(yōu)化一些這樣的問題,瀏覽器在回流重繪的時(shí)候會構(gòu)建一個(gè)隊(duì)列,在到一定的時(shí)間內(nèi)或者操作數(shù)量到了一定程度后,瀏覽器會批量觸發(fā)一次。我們自己本身也可以優(yōu)化一些這樣的問題,比如一個(gè)div里要添加3個(gè)p標(biāo)簽,我們可以把3個(gè)p標(biāo)簽拼接好,統(tǒng)一添加到div里。
3、面向?qū)ο蟮睦斫?br> 4、Async和await和promise的區(qū)別
答:1、async/await是ES7的,Proimise是ES6的。2、async/await對于promise來說寫法更優(yōu)雅3、reject狀態(tài):promise的錯(cuò)誤狀態(tài)是用catch來捕獲的,建議寫在尾部。async/await可以用.then又可以用try catch捕獲。
async/await是基于promise開發(fā)出來的,當(dāng)函數(shù)執(zhí)行的時(shí)候,一遇到await就返回,等待異步操作完成再執(zhí)行函數(shù)體后面的語句,它其實(shí)是generator的語法糖,*號替換成async,yield替換成await。
5、渲染機(jī)制,怎么優(yōu)化
6、在瀏覽器輸入url后發(fā)生了什么
答:1、域名解析。2、建立TCP連接(三次握手)。3、發(fā)送http請求。4、服務(wù)器接受到請求并處理。5、服務(wù)器返回結(jié)果。6、關(guān)閉TCP連接。7、瀏覽器解析HTML。8、瀏覽器布局渲染
7、svg和canvas
答:canvas是用筆刷進(jìn)行2D繪圖的。svg是用標(biāo)簽繪制矢量圖的。他們都是用于繪制2D圖像。
區(qū)別:canvas是用來繪制位圖的,svg是繪制矢量圖的,svg節(jié)點(diǎn)較多,渲染較慢,canvas渲染快,但寫起來復(fù)雜。svg支持分層和事件,canvas不支持,但是有庫支持。
位圖圖像也稱為點(diǎn)陣圖像,位圖使用我們成為像素的一格一格的小點(diǎn)來描述圖像。矢量圖是根據(jù)集合特性來繪制圖形,使用線段和曲線描述圖像,矢量可以是一個(gè)點(diǎn)或一條線,矢量圖只能靠軟件生成,內(nèi)存較小。
8、節(jié)流和防抖
答:都是應(yīng)對頁面中事件頻繁觸發(fā)的優(yōu)化方案。
防抖:避免事件重復(fù)觸發(fā)。使用場景:1、頻繁和服務(wù)端交互。2、輸入框自動保存事件。
節(jié)流:把頻繁觸發(fā)的事件減少,并且每隔一段時(shí)間執(zhí)行。使用場景:scroll事件
9、cookie,localstorege和sessionstrorage區(qū)別
10、緩存機(jī)制
答:1、強(qiáng)緩存(本地緩存):不發(fā)起請求,直接使用緩存里的內(nèi)容,瀏覽器把js、css、immag等存到內(nèi)存中,下次用戶訪問直接使用。觸發(fā):HTTP1.0時(shí)間戳響應(yīng)表頭,HTTP1.1 Cache-Control響應(yīng)標(biāo)頭。2、協(xié)商緩存(弱緩存):需要向服務(wù)器發(fā)送請求,通過判斷來決定是否使用協(xié)商緩存,如果請求內(nèi)容沒有變化,則返回304,瀏覽器就用緩存內(nèi)容。觸發(fā):HTTP1.0if-modified-since響應(yīng)標(biāo)頭,HTTP1.1 if-none-match響應(yīng)標(biāo)頭:Etag。
11、用戶的權(quán)限
12、說一下組件化的理解
13、虛擬dom
答:虛擬DOM本質(zhì)上就是一個(gè)普通的js對象,用于描述視圖的頁面結(jié)構(gòu)。在VUE中每個(gè)組件都有一個(gè)render函數(shù),每一個(gè)render函數(shù)返回一個(gè)虛擬DOM樹,也就證明每一個(gè)組件對應(yīng)著一個(gè)虛擬DOM樹。虛擬DOM的作用:1、是為了提高渲染速度,虛擬DOM只更新需要更新的部分,從而避免全量更新的開銷,這種方式可以減少頁面渲染開銷,提高渲染效率。2、是有更好的性能表現(xiàn),虛擬DOM可以通過對DOM的操作批量處理,減少對實(shí)際DOM的操作,從而減少了頁面重新渲染的次數(shù),VUE也做了一些性能優(yōu)化技巧,如異步批量更新,緩存組件等。3、虛擬DOM更易于開發(fā)和維護(hù),使用虛擬DOM可以將應(yīng)用程序的狀態(tài)和渲染邏輯分離,使得代碼更易于理解和維護(hù),開發(fā)者只需要關(guān)注數(shù)據(jù)的變化,不需要手動更新DOM元素,從而提高開發(fā)效率。4、跨平臺支持,虛擬DOM是純JS開發(fā)實(shí)現(xiàn)的,因此可以在不同的平臺和環(huán)境中使用,
14、vue里的key是什么
答:key是vue中diff算法里的一個(gè)內(nèi)容,key的作用是標(biāo)記出我們這次和上次同一個(gè)DOM替換或更新的位置,如果不加key,默認(rèn)會通過索引來,但是索引有一個(gè)缺點(diǎn),如果push數(shù)組第一項(xiàng)的時(shí)候,后面的都會發(fā)生改變,會很浪費(fèi)時(shí)間,key就是用來節(jié)約時(shí)間的。
15、keep-alive是什么
答:vue自帶的組件,keep-alive會來緩存組件,是用來提升性能的。
鉤子:activated是在組件激活狀態(tài)下觸發(fā)的函數(shù),deactivated是在組件停止使用下使用的函數(shù)。keep-alive可以設(shè)置?,屬性值是個(gè)組件名。
用法:用keep-alive標(biāo)簽包裹組件,也可以在路由meta里設(shè)置keepAlive。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容