前端基础知识整理-杂记

一、同步、异步、阻塞、非阻塞

同步与异步的区别在于通知机制。如果是应用程序主动向操作系统发送信息则为同步,如果是操作系统向应用程序推送数据,则为异步。也就是说二者的区别在于信息的获取是通过主动还是被动的方式。

 阻塞和非阻塞的区别在于程序的等待状态。如果进行io操作时,发送请求后就立即返回,之后需要通过轮询的方式来获取io操作是否完成的信息,这种操作方式叫做非阻塞。如果进行io操作时,需要等待io操作执行完成,并将执行结果返回,则这种操作方式叫做阻塞。

对node来说,就是典型的异步非阻塞。

二、进程与线程

进程是进行资源分配和调度的一个独立单元,有独立的内存单元。线程是进程中更细粒度的单元,线程中共享内存单元,其中有独立的堆栈和局部变量,但没有单独的地址单元。线程有程序的入口、出口,但不能独立运行。一个程序中至少有一个进程,进程中至少有一个线程,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

三CommonJs 规范

node遵循commonjs规范,允许通过require同步加载所需的模块,然后通过exports或者module.exports导出需要暴露的接口。node将模块保存在本地磁盘,读取非常快。但这种同步加载模块的方式不适用于浏览器环境,限于网络问题。在CommonJS中,一个单独的文件就是一个模块,使用require加载模块后就会执行,最后返回文件内部的exports对象。

四、AMD规范

AMD:异步模块定义。它是在浏览器端模块化开发的规范,在模块声明的时候需要定义依赖,并且依赖的模块需要提前执行,依赖前置。模块的加载不会影响后面语句的执行。define require两个定义模块,调用模块的方法合称为AMD模式,

五、CMD规范

AMD规范中是依赖前置,在CMD规范中是依赖就近。在AMD中是在调用模块时,首先将依赖一开始就写好,而CMD中是依赖在使用时就近写。

六、node中的nextTick和setImmediate方法区别

二者均可实现异步,但nextTick执行的优先级更高,process.nextTick属于idle检查。setImmediate属于check检查,在进行循环检查中idle>io>check.在实现上,nextTick方法的回调函数保存在数组中,而setImmediate的结果保存在链表中。在行为上,nextTick会在每轮循环中将数组中的回调函数全部执行完,而setImmediate在每轮循环中执行链表中的一个回调函数。

七、文档模式

文档模式分为:标准模式和混杂模式,文档模式是通过文档类型的切换实现的,会影响css内容的呈现和js的解释执行。标准模式:html5文档类型 html4.0.1严格型等。

你可能感兴趣的:(前端杂记,前端基础知识杂记)