BOM對象模型
跨域相關問題
瀏覽器渲染
1葵腹、構建 dom 樹和 csscom
2、生成渲染樹:從DOM樹的根節(jié)點開始遍歷每個可見節(jié)點安聘,對于每個可見的節(jié)點哄酝,找到CSSOM樹中對應的3、規(guī)則子檀,并應用它們镊掖,根據每個可見節(jié)點以及其對應的樣式乃戈,組合生成渲染樹
4、Layout(回流):根據生成的渲染樹亩进,進行回流(Layout)症虑,得到節(jié)點的集合信息
5、Painting(重繪):根據渲染樹及其回流得到的集合信息归薛,得到節(jié)點的絕對像素谍憔。
繪制,在頁面上展示主籍,這一步還涉及到繪制層級习贫、GPU相關的知識點
6、加載js腳本千元,加載完成解析js腳本
重繪&回流
回流:元素的幾何尺寸發(fā)生改變都會發(fā)生回流沈条,重新計算,然后重新繪制诅炉。
重繪:元素的樣式改變并沒有改變幾何尺寸蜡歹,就只會重繪
重繪不一定導致回流,回流一定會導致重繪
1涕烧、對元素的width月而、height、padding议纯、margin父款、left、top瞻凤、border等幾何屬性改變時憨攒。會重新計算,而且計算可能導致父親元素等都重新計算
2阀参、對元素節(jié)點增刪改肝集,可能導致父親、兄弟節(jié)點重新計算蛛壳。
3杏瞻、對元素的offsetTop、offsetLeft衙荐、 offsetWidth捞挥、offsetHeight進行獲取,也需要回流忧吟,因為是實時獲取砌函。
如何避免?
1溜族、將offsetTop等屬性緩存起來讹俊,避免頻繁改動雏掠。
2、避免逐條改變樣式劣像,使用類名去合并樣式
3、修改之前先將dom display設置為none摧玫,修改完再放出
hash&history
hash 路由耳奕,在 html5 前,為了解決單頁路由跳轉問題采用的方案诬像, hash 的變化不會觸發(fā)頁面渲染屋群,服務端也無法獲取到 hash 值,前端可通過監(jiān)聽 hashchange 事件來處理hash值的變化
history 路由history 路由坏挠,是 html5 的規(guī)范芍躏,提供了對history棧中內容的操作,常用api有: