跳到主要内容

虚拟滚动

什么是进程?什么是线程?

当系统启动一个应用时,会启动一个进程,一个应用可能会开启多个进程, 进程是系统进行资源分配和调度的一个独立单位,一个进程中包含多个线程

渲染进程

渲染进程,包含了很多线程

  • js 引擎线程(执行js脚本)
  • GUI 渲染线程(页面渲染)
  • 事件触发线程(EventLoop 轮询处理线程)
  • 事件(如:click)、定时器(setTimeout)、xhr(ajax)(独立线程)

GUI 渲染线程 和 js 引擎线程 是互斥的

在执行 js 引擎线程(执行js脚本)时,不会执行 GUI 渲染线程的,在执行 GUI 渲染线程(页面渲染)时候不会执行 js 引擎线程

在执行 js 脚本时,代码从上往下执行,在执行的过程中可能会写很多创建线程的代码,如:写 onClick 事件 会单独开一个线程,写一个 定时器(setTimeout)也会单独的开一个线程,写一个 ajax 请求 也会单独开一个线程

js 为什么是单线程的?

指的是主线程是单线程的,如果 一个线程在某个 DOM 节点上添加内容,另外一个线程删除这个 DOM 节点,如果 js 是多线程,可能多个线程都去操作同一个DOM,此时浏览器以哪个线程为准,这样会产生很多问题

浏览器中的 EventLoop

浏览器中的 EventLoop

代码开始执行时,会执行 js引擎线程(执行栈)包含了 同步代码和异步代码,在代码执行的过程中有很多是异步的,如:click 事件、