buffer用來保存原始數(shù)據(jù),流是暫存和移動數(shù)據(jù)的
node:
process.nextTick總是發(fā)生在當(dāng)前執(zhí)行棧的結(jié)尾
setImmediate方法則是在當(dāng)前"任務(wù)隊列"的尾部添加事件,也就是說,它指定的任務(wù)總是在下一次Event Loop時執(zhí)行
stack的第三種含義是存放數(shù)據(jù)的一種內(nèi)存區(qū)域。程序運行的時候,需要內(nèi)存空間存放數(shù)據(jù)。一般來說,系統(tǒng)會劃分出兩種不同的內(nèi)存空間:一種叫做stack(棧),另一種叫做heap(堆)。
如果是單線程只能做一件事 執(zhí)行到setTimeout 或ajax之后 把他們放入"事件池" 再去執(zhí)行后續(xù)的代碼 這個時候就會出現(xiàn)問題 說好的單線程只能做一件事的引擎怎么一邊監(jiān)控事件池的狀態(tài)一邊執(zhí)行后續(xù)的代碼呢? 后來偶然看到一位大牛的博客翻譯了一篇墻外的文章才突然頓悟(文章地址找不到了)。因為瀏覽器是多線程啊 當(dāng)瀏覽器的事件觸發(fā)進(jìn)程監(jiān)控到"事件池"狀態(tài)更新時會通知改變js引擎 這時候js引擎會在空閑的時候停下來去執(zhí)行"事件池"里面的回調(diào) 所謂空閑的時候是指的是當(dāng)前引擎執(zhí)行的語句塊上下文執(zhí)行完畢時的正要執(zhí)行下一個語句塊時的狀態(tài) 比如你在 setTimeout(()=>{console.log(1000 end)}, 1000) 后面寫個for的死循環(huán) 因為單線程 你永遠(yuǎn)也無法得到輸出 或是在setTimeout后面寫一個函數(shù)讓其循環(huán)1300后它就會在1300后去回調(diào)輸出而不是1000后
js引擎線程和gui渲染線程hu chi
我們平常會使用left和top屬性來修改元素的位置,但left和top會觸發(fā)重布局,取而代之的更好方法是使用translate,這個不會觸發(fā)重布局。
http://www.cnblogs.com/s1nker/p/4835079.html
在JavaScript引擎運行腳本期間,瀏覽器渲染線程都是處于掛起狀態(tài)的,也就是說被”凍結(jié)”了.
渲染:
(1)Reflow(回流):瀏覽器要花時間去渲染,當(dāng)它發(fā)現(xiàn)了某個部分發(fā)生了變化影響了布局,那就需要倒回去重新渲染。
(2)Repaint(重繪):如果只是改變了某個元素的背景顏色,文字顏色等,不影響元素周圍或內(nèi)部布局的屬性,將只會引起瀏覽器的repaint,重畫某一部分
瀏覽器渲染頁面前需要先構(gòu)建 DOM 和 CSSOM 樹。因此,我們需要確保盡快將 HTML 和 CSS 都提供給瀏覽器。CSSOM 樹和 DOM 樹合并成渲染樹,然后用于計算每個可見元素的布局,并輸出給繪制流程,將像素渲染到屏幕上。優(yōu)化上述每一個步驟對實現(xiàn)最佳渲染性能至關(guān)重要。
下面簡要概述了瀏覽器完成的步驟:
處理 HTML 標(biāo)記并構(gòu)建 DOM 樹。
處理 CSS 標(biāo)記并構(gòu)建 CSSOM 樹。
將 DOM 與 CSSOM 合并成一個渲染樹。
根據(jù)渲染樹來布局,以計算每個節(jié)點的幾何信息。
將各個節(jié)點繪制到屏幕上。