回顾 2020
2020 年这个时候定下的目标
- 每周一篇短文,三周一篇长文
- 深入精通某一个方向,在专业上有所成就
- 成为 Libuv Contributors
- 听一场演唱会
- 英语水平能够和社区的人日常交流
成为 Node.js Collaborators看 10 本书去一趟南京健身,维持体重到120左右
引用 nodejs.org
的描述
When called, the active Timeout object will not require the Node.js event loop to remain active. If there is no other activity keeping the event loop running, the process may exit before the Timeout object’s callback is invoked. Calling timeout.unref() multiple times will have no effect.
简单的可以理解为:timer.unref
标记句柄,当进程中再无存活的事件,此时的 timer
句柄不会阻止进程退出。
又到了年尾写总结的时候,时间过得可真快,2018年是奔波的一年,其实是打算阳历1号写的,但是那时候还比较忙。。。。所以懒的拖到了现在,回家了才空下来回忆回忆这一年发生的事。
作为一个不怎么踏出家门的广东人,起初只是对杭州有几点比较好的印象。白娘子啊雷峰塔啊断桥啊,这些唯美的故事,还有就是有阿里在,杭州市一个科技和人文结合密切的城市,感觉挺合我心意。最后是看到了【杭州映像诗】这部纪录片,我也忘了已经看了多少遍,记得第一次看完后就决定去杭州了,我看到了不同于之前生活这么多年的另外一个世界。所以我来了杭州 ╮( ̄▽ ̄)╭
。杭州还有很多很多漂亮的景点我还没去过,打算争取明年去多几个,好好领略下杭州的美。
Node.js
是天才屌丝程序员Ryan Dahl
于2009年发布,经过几年的发展,Node.js
已经是成熟的JavaScript
运行时了。用Node.js
开发的应用被分发到世界各地的云主机上,随着公司的发展和壮大、应用PV
和UV
的剧增,如何保障Node.js
应用的高性能是如今作为一个Node.js
开发者必须面对的问题。
V8/Node
自带的profiler
能力通过v8/Node
的profiler
能力,能够列出各函数的执行占比。
我们通过对一段经典简单的http服务的示例代码进行分析:
1 | // index.js |
之前编译v8的时候,需要先去Google的代码仓库拉取depot_tools,所以就需要终端走代理才能走得通了,得让终端的http或https代理到本地的socks5协议。需求是这样的,可以用开关控制是否代理。
shell脚本如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#!/bin/bash
# .socks5-proxy.sh
proxy=$1
if [ -z $proxy ]; then
read -p "请输入使用使用代理? (y/n) " -n 1 -r proxy
echo
fi
if [ $proxy = 'y' ]; then
export http_proxy=http://127.0.0.1:1087
export https_proxy=http://127.0.0.1:1087
echo "http_proxy: "$http_proxy
echo "https_proxy: "$https_proxy
echo "已开启代理"
else
export http_proxy=
export https_proxy=
echo "已关闭代理"
fi
在很久之前的单机时代,一台电脑中跑着多个进程,进程之间没有交流各干各的,就这样过了很多年。突然有一天有了新需求,A进程需要实现一个画图的功能,恰好邻居B进程已经有了这个功能,偷懒的程序员C想出了一个办法:A进程调B进程的画图功能。于是出现了IPC
(Inter-process communication,进程间通信)。就这样程序员C愉快的去吃早餐去了!
又过了几年,到了互联网时代,每个电脑都实现了互联互通。这时候雇主又有了新需求,当时还没挂的A进程需要实现使用tensorflow
识别出笑脸 >_< 。说巧不巧,远在几千里的一台快速运行的电脑上已经实现了这个功能,睡眼惺忪的程序媛D接手了这个A进程后借鉴之前IPC
的实现,把IPC
扩展到了互联网上,这就是RPC
(Remote Procedure Call,远程过程调用)。RPC
其实就是一台电脑上的进程调用另外一台电脑上的进程的工具。成熟的RPC
方案大多数会具备服务注册、服务发现、熔断降级和限流等机制。目前市面上的RPC已经有很多成熟的了,比如Facebook
家的Thrift
、Google
家的gRPC
、阿里家的Dubbo
和蚂蚁家的SOFA
。
polix
是基于koa v2.5.0
的IOC
、插件式开发框架,和平常的Node.js Web Framework
相比,它无需另外绑定路由集合、可拓展、开发简单,依照java
的著名依赖注入框架spring
来制作,让开发者专注于逻辑。polix
采用多服务多进程架构来保证服务的稳定和快速响应能力。polix
的中间件和koa v2.x
的中间件保持兼容。默认使用的ORM
是sequelize
(后续会提供polix-orm
)。开发者可以选择ES6/7/8 或者 TypeScript来进行开发。
1 | $ npm i polix --save |
使用
polix-cli
初始化应用
1
2
3 $ npm i polix-cli -g
$ pol init example && cd example
$ make build && make dev