buffer用来保存原始数据,流是暂存和移动数据的
node:
process.nextTick总是发生在当前执行栈的结尾
setImmediate方法则是在当前"任务队列"的尾部添加事件,也就是说,它指定的任务总是在下一次Event Loop时执行
stack的第三种含义是存放数据的一种内存区域。程序运行的时候,需要内存空间存放数据。一般来说,系统会划分出两种不同的内存空间:一种叫做stack(栈),另一种叫做heap(堆)。
如果是单线程只能做一件事 执行到setTimeout 或ajax之后 把他们放入"事件池" 再去执行后续的代码 这个时候就会出现问题 说好的单线程只能做一件事的引擎怎么一边监控事件池的状态一边执行后续的代码呢? 后来偶然看到一位大牛的博客翻译了一篇墙外的文章才突然顿悟(文章地址找不到了)。因为浏览器是多线程啊 当浏览器的事件触发进程监控到"事件池"状态更新时会通知改变js引擎 这时候js引擎会在空闲的时候停下来去执行"事件池"里面的回调 所谓空闲的时候是指的是当前引擎执行的语句块上下文执行完毕时的正要执行下一个语句块时的状态 比如你在 setTimeout(()=>{console.log(1000 end)}, 1000) 后面写个for的死循环 因为单线程 你永远也无法得到输出 或是在setTimeout后面写一个函数让其循环1300后它就会在1300后去回调输出而不是1000后
js引擎线程和gui渲染线程hu chi
我们平常会使用left和top属性来修改元素的位置,但left和top会触发重布局,取而代之的更好方法是使用translate,这个不会触发重布局。
http://www.cnblogs.com/s1nker/p/4835079.html
在JavaScript引擎运行脚本期间,浏览器渲染线程都是处于挂起状态的,也就是说被”冻结”了.
渲染:
(1)Reflow(回流):浏览器要花时间去渲染,当它发现了某个部分发生了变化影响了布局,那就需要倒回去重新渲染。
(2)Repaint(重绘):如果只是改变了某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性,将只会引起浏览器的repaint,重画某一部分
浏览器渲染页面前需要先构建 DOM 和 CSSOM 树。因此,我们需要确保尽快将 HTML 和 CSS 都提供给浏览器。CSSOM 树和 DOM 树合并成渲染树,然后用于计算每个可见元素的布局,并输出给绘制流程,将像素渲染到屏幕上。优化上述每一个步骤对实现最佳渲染性能至关重要。
下面简要概述了浏览器完成的步骤:
处理 HTML 标记并构建 DOM 树。
处理 CSS 标记并构建 CSSOM 树。
将 DOM 与 CSSOM 合并成一个渲染树。
根据渲染树来布局,以计算每个节点的几何信息。
将各个节点绘制到屏幕上。