线程与进程 说到单线程,就得从操作系统进程开始说起.在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位.任务调度采用的是时间片轮转的抢占式调度方式,而进程是任务调度的最小单位,每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离.后来,随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大,已经无法满足越来越复杂的程序的要求了.于是就发明了线程,线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元.这里把线程比喻一个车间…
一般地,一个包含外部样式表文件和外部脚本文件的HTML载入和渲染过程是这样的: 浏览器下载HTML文件并开始解析DOM. 遇到样式表文件link[rel=stylesheet]时,将其加入资源文件下载队列,继续解析DOM. 遇到脚本文件时,暂停DOM解析并立即下载脚本文件. 下载结束后立即执行脚本,在脚本中可访问当前<script>以上的DOM. 脚本执行结束,继续解析DOM. 整个DOM解析完成,触发DOMContentLoaded事件. 什么是阻塞? 在页面中我们通常会引用外部文件,而浏览…
经典问题:在浏览器输入一个url后,会发生什么事情呢? (1)假设是简单的http请求(GET),IPV4,无代理. 浏览器先查看浏览器缓存-系统缓存-路由器缓存,若缓存中有,请略过中间步骤,直接跳到第9步~若没有,则按照下面的步骤进行操作. 浏览器从url中解析出服务器的主机名,并将主机名转换成服务器的IP地址.PS:DNS查找域名的过程 浏览器从url中解析出端口号,默认80 浏览器建立一条与服务器的tcp连接(建立过程:三次握手). PS:一个完整的TCP连接 浏览器通过tcp连接向服务器…
总体来说有两个大的方面: 一.网络通信连接部分.二.页面渲染展示部分. 细分详细过程: (网络通信) 1.输入url. 2.DNS解析域名. 3.拿到IP地址后,浏览器向服务器建立tcp连接. 4.浏览器向web服务器发送http请求. 5.服务器收到请求并响应. (页面渲染) 6.服务器返回相应文件,浏览器进行页面渲染. 详细描述之前,先拉个概念出来: 网络通信协议: 一.OSI模型(开放式系统互连) 1.应用层.文件传输,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Te…
1.HTML的加载 HTML是一个网页的基础,下载完成后解析 2.其他静态资源加载 解析HTML时,发现其中有其他外部资源链接比如CSS.JS.图片等,会立即启用别的线程下载. 但当外部资源是JS时,HTML的解析会停下来,等JS下载完执行结束后才继续解析HTML,防止JS修改已经完成的解析结果 3.DOM树构建 在HTML解析的同时,解析器会把解析完成的结果转换成DOM对象,再进一步构建DOM树 4.CSSOM树构建 CSS下载完之后对CSS进行解析,解析成CSS对象,然后把CSS对象组装起来…
文章同步到github<Webkit技术内幕>之页面渲染过程 最近拜读了传说中的<Webkit技术内幕>一书,有很大收获,尤其是对页面渲染有了较深的认识.由于功力有限,而且书中设计到较多的底层也无法理解,所以本文主要整理和分享一下自己理解的基于Webkit内核浏览器的页面渲染的整体过程,不做深入介绍(也做不了深入介绍). 浏览器内核 浏览器之所以能呈现出更重页面,正是由于浏览器内核的存在,也被称为渲染引擎,主要作用就是,也就是能把HTML/CSS/JavaScript文本其相关的资…
浏览器的内核主要分为渲染引擎和JS引擎.目前市面上常见的浏览器内核可以分为这四种:Trident(IE).Gecko(火狐).Blink(Chrome.Opera).Webkit(Safari).这里面大家最耳熟能详的可能就是 Webkit 内核了,Webkit 内核是当下浏览器世界真正的霸主. 页面加载过程 浏览器根据DNS域名服务器解析域名得到IP地址: 向这个IP地址发起HTTP请求: 服务器收到,处理,返回HTTP请求; 浏览器得到返回的内容. 浏览器渲染过程 主要分为三步: 1. 解析…
大家很早就知道JS是一门单线程的语言.但是也时不时的会看到进程这个词.首先简单区分下线程和进程的概念 1. 简单理解进程 - 进程是一个工厂,工厂有它的独立资源 - 工厂之间相互独立 - 线程是工厂中的工人,多个工人协作完成任务 - 工厂内有一个或多个工人 - 工人之间共享空间 2. 简单理解线程 - 工厂的资源 -> 系统分配的内存(独立的一块内存) - 工厂之间的相互独立 -> 进程之间相互独立 - 多个工人协作完成任务 -> 多个线程在进程中协作完成任务 - 工厂内有一个或多个工人…
问题:js是单线程的,页面是从上往下加载的,那么是不是第一个js没加载完成,第二个js就不加载?然后,引申出来一个问题就是,那css和图片呢?这之间的加载有相互影响吗? 1.什么是线程?什么是进程?什么是单线程?什么是多线程? 线程是:程序中一个单一的顺序控制流程.每个程序都至少有一个线程,若程序只有一个线程,那就是程序本身. 进程是:资源分配的基本单位,拥有一个完成的虚拟地址空间.他与线程的关系就是:当进程发生调度时,不同的进程用有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间.…
首先说一下js动态获取浏览器或页面等容器的宽高的方法大体有哪些: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: document.body.offsetWidth (包括边线的宽) 网页可见区域高: document.body.offsetHeight (包括边线的高) 网页正文全文宽: document.body.scrollWidth 网页正文全文高: document.body…