_YuLong's Blog

一个假的程序猿👨🏻‍💻

参考 阮一峰 《ES6 标准入门》

Number对象的扩展

Number.isFinite()

Number.isFinite(number)
Function: 检查参数是否为非无穷数值。
return: boolean

1
2
3
4
5
Number.isFinite(10); //true
Number.isFinite(NaN); //false
Number.isFinite(Infinity); //false
Number.isFinite(-Infinity); //false
Number.isFinite('str'); //false
阅读全文 »

参考 阮一峰 《ES6 标准入门》

模版字符串

使用反引号`标识, 模版字符串可以填充普通字符串,也可以定义多行字符串。

  • 使用多行模版时,所有的空格缩进都会被保存在输出中。
  • 使用${}嵌入变量,{}中可以写任何js表达式。
  • 模版中使用反引号用反斜杠\转义。
阅读全文 »

参考 阮一峰 《ES6 标准入门》

let

简要说明

  • 块级作用域:在ES5及以前,JS只有全局作用域及函数作用域,let则为JS提供了块级作用域
  • 变量提升:let声明的变量不会提升
  • 锁区:let声明的变量会暂时锁定其存在的作用域。
  • 不允许重复声明:let声明的变量只能在声明之后使用且不允许重复声明
阅读全文 »

笔记部分内容摘自 《深入浅出 Node.JS》 —— 朴灵

背景

与前端不同,前端常常只需要处理简单字符串操作及DOM操作,而后端需要处理相对复杂的文件、网络I/O等,JS自由的字符串无法满足需求,于是有了buffer以满足后端的需求。

阅读全文 »

笔记部分内容摘自 《深入浅出 Node.JS》 —— 朴灵

背景

一方面由于Node基于无阻塞、事件驱动,具有内存消耗低的特点,常用于开发高网络请求的应用,因此,在服务器端,需要对资源进行高效利用。另一方面node选择了V8,享受着V8带来的良好性能与语言特性,但是也受到了V8的一些限制。
如Node通过JS生成对象,V8会在内存中回收不再被使用的垃圾内存,一方面减少了内存管理的负担,但是另一方面也造成了内存管理上的不灵活,如V8在内存上有大小限制,32位系统上限制为0.7G,64位系统为1.4G,在应用中,若不小心触碰到这个极限值,会造成进程退出,并且在进行垃圾回收的过程中,会导致阻塞代码,程序暂停。

这篇笔记,只是大致了解node里内存的控制、清理机制,具体如何使用、排查解决内存问题未做详细记录。

阅读全文 »

笔记部分内容摘自 《深入浅出Node.JS》 —— 朴灵

解决方案

  • 事件发布/订阅模式
  • Promise/Deferred模式
  • 流程控制库

事件发布/订阅模式

常常用来解耦业务逻辑

Node.js内的实现

Node自身提供的events模块,是事件发布/订阅模式的简单实现。
通过模块提供的监听、触发等方法实现。

1
2
3
4
5
6
7
//订阅
emitter.on("event1", function (message) {
//TODO
})

//发布
emitter.emit("event", "message");

事件发布/订阅模式 可以将一个事件与多个回调关联起来。一个事件的发布,可以传递给所以正在侦听此事件的监听器(数量设限,过多可能会导致内存泄漏)执行。

阅读全文 »

笔记部分内容摘自 《深入浅出 Node.JS》 —— 朴灵

异步编程难点

  • 异常处理
  • 函数嵌套
  • 阻塞代码
  • 多线程
  • 异步转同步

异常处理

传统 try/catch 方法,只能捕获当次事件循环内的异常, 对callback执行时,无法再进行捕获。

1
2
3
4
5
6
7
try {
//...
async(callback);
//...
} catch (e) {
//TODO
}
阅读全文 »
0%