浏览器

171 阅读4分钟

一、浏览器四大进程

  1. Browser progress(浏览器进程)
  • 负责浏览器界面显示,与用户交互,如前进,后退等
  • 负责各个页面的管理、创建和销毁其他进程
  • 将渲染进程得到的内存中的位图,绘制到用户界面上
  • 网络资源的管理、下载等
  1. GPU progress
  • 最多一个,用于3D绘制
  1. 第三方插件进程
  • 每种类型插件对应一个进程,仅当使用该插件时才创建
  1. Renderer progress(浏览器渲染进程)
  • 主要作为页面渲染,脚本执行,事件处理等

二、浏览器多进程的优势

  1. 避免单个page crash影响整个浏览器
  2. 避免第三方插件crash影响整个浏览器
  3. 多进程充分利用多核优势
  4. 方便使用沙盒模型隔离插件等进程,提高浏览器稳定性

三、渲染进程包括哪些线程

  1. GUI渲染线程
  • 负责渲染浏览器界面,解析HTML,CSS,构建DOM树和RenderObject树,布局和绘制
  • 当页面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行
  • GUI渲染线程与JS引擎线程是互斥的,当JS引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行
  1. JS引擎线程(单线程)
  • 也称为JS内核,负责处理JavaScript脚本程序
  • JS引擎一直等待着任务队列中任务的到来,然后加以处理,一个Tab页中无论什么时候都只有一个JS线程在运行JS程序
  • GUI渲染线程与JS引擎线程是互斥的,所以如果JS执行的时间过长,就会造成页面的渲染不连贯,导致页面渲染加载阻塞
  1. 事件触发线程
  • 归属于渲染进程而不是JS引擎,用来控制事件轮询
  • 当JS引擎执行代码块如鼠标点击、AJAX异步请求等,会将对应任务添加到事件触发线程中
  • 当对应的事件符合触发条件被触发时,该线程会把事件添加到待处理任务队列的队伍,等待JS引擎的处理
  • 由于JS单线程的关系,所以这些待处理队列中的事件都得排队等待JS引擎处理
  1. 定时触发器线程
  • 定时器setInterval和setTimeout所在的线程
  • 浏览器定时计数器并不是由JavaScript引擎计数的
  • 通过单独线程来计时并触发定时
  • W3C在HTML标准中规定,规定要求setTimeout中低于4ms的时间间隔算4ms
  1. 异步HTTP请求线程
  • 用于处理请求XMLHttpRequest,在连接后是通过浏览器新开一个线程请求
  • 检测到状态变更时(Ajax)如果设置有回调函数,异步线程就产生状态变更事件,将这个回调放入JS引擎线程的时间队列中

四、cookie

cookie和session和localStorage都算本地存储 cookie存储的就是用户的登录信息,所以比较敏感一般我们在企业中就是单点登录 单点登录就是一个域名登录后所有的子域名都共享主域名的这个cookie 但是有涉及到很多前端安全的问题比如说CSRF攻击XSS攻击 浏览器安全 CSRF攻击,XSS攻击,iframe点击劫持,sql注入 cookie怎么解决前两个问题其实就是两个属性一个是http only它是专门解决XSS攻击的, 什么是XSS攻击,就是我们用户在输入框里输入一些东西的时候没有做这种校验,然后黑客就可以通过插入script脚本这种方式来拿到我们的cookie,解决方案就是http only一般都是服务端来设置的,因为是服务端种的,服务端一般用set cookie 操作来中cookie 第二个same site他专门防止的就是CSRF攻击,CSRF攻击就是跨站的一个攻击,比如登录百度的一个域名,然后访问了一个钓鱼网站,钓鱼网站发送了带百度域名的这个接口,有可能是支付接口,当你跨站点的时候,他就会自动带上你的cookie,你当前登录的信息,就会盗取你钱包的操作,当设置same site属性后,所有跨站点的请求都会查和当前的域名是否一致,能防止携带