从promise、process.nextTick、setTimeout出发,谈谈Event Loop中的Job queue
原文连接:从promise、process.nextTick、setTimeout出发,谈谈Event Loop中的Job queue
问题的引出
event loop都不陌生,是指主线程从“任务队列”中循环读取任务,比如
例1:
1 | setTimeout(function(){console.log(1)},0); |
never say never
原文连接:从promise、process.nextTick、setTimeout出发,谈谈Event Loop中的Job queue
event loop都不陌生,是指主线程从“任务队列”中循环读取任务,比如
例1:
1 | setTimeout(function(){console.log(1)},0); |
#JavaScript实现继承的方法及优缺点总结
本文内容参考《JavaScript高级程序设计》第三版
ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法。
原型链继承的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。
简单回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。
浏览器解析大概的工作流程:
根据网上的资料做了一些补充和修改,以下是原文链接:
原文链接:https://blog.csdn.net/zl834205311/article/details/81773511
XSS:跨站脚本攻击,是说攻击者通过注入恶意的脚本,恶意攻击者往 Web 页面里嵌入恶意的客户端脚本,当用户浏览此网页时,脚本就会在用户的浏览器上执行,进而达到攻击者的目的。比如获取用户的 Cookie、导航到恶意网站、携带木马等。借助安全圈里面非常有名的一句话:所有的输入都是有害的。
大部分的 XSS 漏洞都是由于没有处理好用户的输入,导致恶意脚本在浏览器中执行。任何输入提交数据的地方都有可能存在 XSS。
前端是庞大的,包括 HTML、 CSS、 Javascript、Image 、Flash等等各种各样的资源。前端优化是复杂的,针对方方面面的资源都有不同的方式。那么,前端优化的目的是什么 ?
从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。
从服务商角度而言,优化能够减少页面请求数、或者减小请求所占带宽,能够节省可观的资源。
总之,恰当的优化不仅能够改善站点的用户体验并且能够节省相当的资源利用。
net模块包含了Node需要的所有TCP功能。用net.createServer()方法创建一个新的TCP服务端。
Express模块是合同谈判模块的扩展。Express、net、http都是用Server()创建服务器,并用listen()来监听指定窗口。
Express会在后台调用http模块,Express增加了亮相http模块没有的功能:根据HTTP请求的不同方法进行过滤;根据特定的URL进行过滤。
采用HTTP模块时,需要创建HTTP头,res.writeHead,并且在发送请求内容之前把HTTP头先发送给客户端。Express提供了一个方便的方法,res.(http:response)对象的send()方法。此方法发送HTTP头,同时还会调用response.end()方法。如果给res.send()传递一个对象,它会自动把其序列化为JSON并添加对应的HTTP头。
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。
JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。
在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。
在 Node.js 我们可以直接访问到 global 的属性,而不需要在应用中包含它。
stream是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构。
什么是流?流是一种抽象的数据结构。想象水流,当在水管中流动时,就可以从某个地方(例如自来水厂)源源不断地到达另一个地方(比如你家的洗手池)。我们也可以把数据看成是数据流,比如你敲键盘的时候,就可以把每个字符依次连起来,看成字符流。这个流是从键盘输入到应用程序,实际上它还对应着一个名字:标准输入流(stdin)。
如果应用程序把字符一个一个输出到显示器上,这也可以看成是一个流,这个流也有名字:标准输出流(stdout)。流的特点是数据是有序的,而且必须依次读取,或者依次写入,不能像Array那样随机定位。
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。
Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.readStream 对象会在文件被打开的时候触发一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。
events 模块只提供了一个对象:events.EventEmitter
。EventEmitter 的核心就是事件触发与事件监听器功能的封装。