作为前端开发对浏览器的初步认识

浏览器初见

在百度百科上是这样定义的:
浏览器是用来检索、展示以及传递Web信息资源的应用程序。Web信息资源由统一资源标识符( Uniform Resource Identifier,URI)所标记,它是一张网页、一张图片、一段视频或者任何在Web上所呈现的内容。使用者可以借助超级链接( Hyperlinks),通过浏览器浏览互相关联的信息。
用通俗的话来说,就是把我们输入的url通过浏览器的内核转换成我们能看见的界面,呈现在我们面前。

接下来是页面渲染 的基本流程:

渲染引擎先解析 HTML,将标签转换成树的节点——叫作"内容树"。然后解析样式数据,包括外联样式和内联样式。样式信息和 HTML 中的可视指令一起用于创建另一棵树——渲染树

渲染树包含具有可视属性(如颜色和尺寸)的矩形。矩形按正确的顺序显示在屏幕上。

渲染树构建完成后,就进入"布局"流程。也就是给每个节点分配正确的坐标——节点应该显示在屏幕上的哪个位置。下一步就是绘制——将遍历渲染树,通过用户界面(UI)后端层绘制每个节点。

重要的是要理解这是一个循序渐进的过程。为了更好的用户体验,渲染引擎将尽可能快地在屏幕上呈现内容。它不会等到所有的 HTML 都解析完成才开始构建和布局渲染树。当程序还在持续处理来自网络层的内容时,它已经解析和呈现了部分内容。

进程与线程的定义

进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

谈到了线程,就有一个问题了,js是多线程还是单线程?
答案是:单线程

JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。所有任务都需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。
JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变。

JS的异步是通过回调函数实现的,即通过任务队列,在主线程执行完当前的任务栈(所有的同步操作),主线程空闲后轮询任务队列,并将任务队列中的任务(回调函数)取出来执行。“回调函数”(callback),就是那些会被主线程挂起来的代码。异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数。

关于css阻塞和js阻塞

总结:css并不会阻塞页面的解析,也就是说不会影响dom的加载
而会影响页面的加载,当cssdom还没构建完成时,页面是不会渲染到浏览器界面的。
js会阻塞页面的解析同时也会阻塞页面的渲染

你可能感兴趣的:(浏览器,前端)