[译] 现代垃圾回收

2016-12-26
阅读 5 分钟
4.3k
关于 Go 语言最新的垃圾回收器(garbage collector),我最近阅读了许多篇赞扬它的文章,但是它们都让我将信将疑,其中的不少来自 Go 语言的官方团队博客。他们像是暗示着在垃圾回收领域已经发生了一个巨大的突破。

基于多 goroutine 实现令牌桶

2016-12-07
阅读 5 分钟
7.4k
前言 令牌桶是一种常见用于控制速率的控流算法。原理于 Wikipedia 上描述如下: 每秒会有 r 个令牌被放入桶中,即每 1 / r 秒向桶中放入一个令牌。 一个桶最多可以存放 b 个令牌。当令牌被放入桶时,若桶已满,则令牌被直接丢弃。 当一个 n 字节的数据包抵达时,消耗 n 个令牌,然后放行之。 若桶中的令牌不足 n ,则该...

[译] libuv 设计概述

2016-07-04
阅读 3 分钟
10.3k
libuv 不仅仅只提供了对于不同 I/O 轮询机制的简单抽象:“句柄(handles)”和“流(streams)”也提供了对于 socket 和其他相关实例的高度抽象。同时 libuv 还提供了跨平台文件 I/O 接口和多线程接口等等。

[译] V8 使用者文档

2016-06-10
阅读 11 分钟
11.1k
如果你已经阅读过了上手指南,那么你已经知道了如何作为一个单独的虚拟机使用 V8 ,并且熟悉了一些 V8 中的关键概念,如句柄,域 和上下文。在本文档中,还将继续深入讨论这些概念并且介绍其他一些在你的 C++ 应用中使用 V8 的关键点。

通过源码解析 Node.js 中高效的 timer

2016-05-08
阅读 4 分钟
5.8k
在 Node.js 中,许许多多的异步操作,都需要来一个兜底的超时,这时,就轮到 timer 登场了。由于需要使用它的地方是那么的多,而且都是基础的功能模块,所以,对于它性能的要求,自然是十分高的。总结来说,要求有:

通过源码解析 Node.js 中进程间通信中的 socket 句柄传递

2016-05-06
阅读 8 分钟
9.3k
在 Node.js 中,当我们使用 child_process 模块创建子进程后,会返回一个 ChildProcess 类的实例,通过调用 ChildProcess#send(message[, sendHandle[, options]][, callback]) 方法,我们可以实现与子进程的通信,其中的 sendHandle 参数支持传递 net.Server ,net.Socket 等多种句柄,使用它,我们可以很轻松的实现在...

通过源码解析 Node.js 中 Buffer 的 8KB 池分配规则和固定位数字的读写

2016-05-03
阅读 4 分钟
4.3k
在 Node.js 中,Buffer 常常用来存储一些潜在的大体积数据,例如,文件和网络 I/O 所获取来的数据,若不指定编码,则都以 Buffer 的形式来提供,可见其地位非同一般。你或许听说过,Buffer 的创建,是可能会经过内部的一个 8KB 池的,那么具体的规则是什么呢?可以创建一个新 Buffer 实例的 API 那么多,到底哪些 API 会...

通过源码解析 Node.js 中一个 HTTP 请求到响应的历程

2016-05-01
阅读 6 分钟
5.9k
如果大家使用 Node.js 写过 web 应用,那么你一定使用过 http 模块。在 Node.js 中,起一个 HTTP server 十分简单,短短数行即可:

通过源码解析 Node.js 启动时第一个执行的 js 文件:bootstrap_node.js

2016-04-28
阅读 10 分钟
6.3k
一步步来看,翻开 Node.js 的源码,不难看出,入口文件在 src/node_main.cc 中,主要任务为将参数传入 node::Start 函数:

通过源码解析 Node.js 中 events 模块里的优化小细节

2016-04-25
阅读 5 分钟
5.6k
之前的文章里有说,在 Node.js 中,流(stream)是许许多多原生对象的父类,角色可谓十分重要。但是,当我们沿着“族谱”往上看时,会发现 EventEmitter 类是流(stream)类的父类,所以可以说,EventEmitter 类是 Node.js 的根基类之一,地位可显一般。虽然 EventEmitter 类暴露的接口并不多而且十分简单,并且是少数纯 J...

通过源码解析 Node.js 中一个文件被 require 后所发生的故事

2016-03-27
阅读 5 分钟
6.5k
在 Node.js 中,要说如果有几乎会在每一个文件都要用到的一个全局函数和一个全局对象,那应该是非 require 和 module.exports 莫属了。它们是 Node.js 模块机制的基石。大家在使用它们享受模块化的好处时,有时也不禁好奇:

一些当前 Node.js 中最流行 ES6 特性的 benchmark (V8 / Chakra)

2016-03-20
阅读 3 分钟
6.8k
前言 项目 github 地址:[链接] 如果有想要增加的特性 benchmark ,欢迎更新benchmarks/ ,然后 PR 。 环境 CPU: Intel Core(TM) i5-2410M 2.30GHz Memory: 8GB 1600 MHz DDR3 Node.js: 5.9.0 / Node-chakracore 6.0.0-pre5 大致结论 许多情况下: V8 ES5 >> Chakra ES6 > Chakra ES5 > V8 ES6 Chakra 下的 ...

通过源码解析 Node.js 中 cluster 模块的主要功能实现

2016-03-16
阅读 5 分钟
4.1k
众所周知,Node.js中的JavaScript代码执行在单线程中,非常脆弱,一旦出现了未捕获的异常,那么整个应用就会崩溃。这在许多场景下,尤其是web应用中,是无法忍受的。通常的解决方案,便是使用Node.js中自带的cluster模块,以master-worker模式启动多个应用实例。然而大家在享受cluster模块带来的福祉的同时,不少人也开...

使用 Node.js 中的流写工具时的两点小 tips

2016-02-29
阅读 3 分钟
3.1k
Node.js中的流十分强大,它对处理潜在的大文件提供了支持,也抽象了一些场景下的数据处理和传递。正因为它如此好用,所以在实战中我们常常基于它来编写一些工具 函数/库 ,但往往又由于自己对流的某些特性的疏忽,导致写出的 函数/库 在一些情况会达不到想要的效果,或者埋下一些隐藏的地雷。本文将会提供两个在编写基于...

通过源码解析 Node.js 中导流(pipe)的实现

2016-02-09
阅读 7 分钟
4.9k
在Node.js中,流(Stream)是其众多原生对象的基类,它对处理潜在的大文件提供了支持,也抽象了一些场景下的数据处理和传递。在它对外暴露的接口中,最为神奇的,莫过于导流(pipe)方法了。鉴于近期自己正在阅读Node.js中的部分源码,也来从源码层面分享下导流的具体实现。

在 Web 应用中使用 ES7 装饰器(Decorator)初体验

2016-01-24
阅读 5 分钟
10.7k
今天闲来时看了看ES7中的新标准之一,装饰器(Decorator)。过程中忽觉它和Java中的注解有一些类似之处,并且当前版本的TypeScript中已经支持它了,所以,就动手在一个Web应用Demo中尝鲜初体验了一番。

[译]JavaScript ES6模块指南

2015-12-05
阅读 4 分钟
13.2k
ECMAScript 2015(又称ES6)提供了一个前端JavaScript缺失已久的特性 —— 模块。ES2015中的模块参考了CommonJS规范(目前Node.js的模块规范)以及AMD规范,并且尽可能的取其精华,去其糟粕:

[译]web权限验证方法说明

2015-12-02
阅读 3 分钟
15.2k
本文将会从最基本的一种web权限验证说起,即HTTP Basic authentication,然后是基于cookies和tokens的权限验证,最后则是signatures和一次性密码。

[译]Express在生产环境下的最佳实践 - 性能和可靠性

2015-11-21
阅读 7 分钟
11.4k
这将是一个分为两部分,内容是关于在生产环境下,跑Express应用的最佳实践。第一部分会关注安全性,第二部分则会关注性能和可靠性。当你读这篇文章时,会假设你已经对Node.js和web开发有所了解,并且对生产环境有了概念。

[译]Express应用结构的最佳实践

2015-11-19
阅读 7 分钟
8.4k
Node和Express并不严格要求它的应用的文件结构。你可以以任意的结构来组织你的web应用。这对于小应用来说,通常是不错的,十分易于学习和实验。

[译]Express在生产环境下的最佳实践 - 安全性

2015-11-15
阅读 4 分钟
7.9k
这将是一个分为两部分,内容是关于在生产环境下,跑Express应用的最佳实践。第一部分会关注安全性,第二部分最会关注性能和可靠性。当你读这篇文章时,假设你已经对Node.js和web开发有所了解,并且对生产环境有了概念。

[译]初窥Express 5

2015-10-22
阅读 2 分钟
5.4k
Express 5.0 仍处于alpha版中,但是我们还是想先来初窥一下新的express版本中将会有哪些改变,以及如何将你的应用从Express 4 迁移至 Express 5。

[译]Node.js安全清单

2015-10-15
阅读 6 分钟
24k
安全性,总是一个不可忽视的问题。许多人都承认这点,但是却很少有人真的认真地对待它。所以我们列出了这个清单,让你在将你的应用部署到生产环境来给千万用户使用之前,做一个安全检查。

[译]JavaScript ES6箭头函数指南

2015-09-22
阅读 3 分钟
24.5k
胖箭头函数(Fat arrow functions),又称箭头函数,是一个来自ECMAScript 2015(又称ES6)的全新特性。有传闻说,箭头函数的语法=>,是受到了CoffeeScript 的影响,并且它与CoffeeScript中的=>语法一样,共享this上下文。

[译]事件循环,Node.js背后的核心概念

2015-09-15
阅读 2 分钟
8.6k
如果你了解过Node.js,那么你一定听说过事件循环。你一定想知道它为什么那么特殊,并且为什么你需要关注它?此时此刻的你,可能已经写过许多基于Express.js的后端代码,但没有接触到任何的循环。

[译]JavaScript ES6 class指南

2015-08-15
阅读 4 分钟
21k
EcmaScript 2015 (又称ES6)通过一些新的关键字,使类成为了JS中一个新的一等公民。但是目前为止,这些关于类的新关键字仅仅是建立在旧的原型系统上的语法糖,所以它们并没有带来任何的新特性。不过,它使代码的可读性变得更高,并且为今后版本里更多面向对象的新特性打下了基础。

[译]JavaScript ES6迭代器指南

2015-07-26
阅读 3 分钟
19k
前言 EcmaScript 2015 (又称ES6)提供一个全新的迭代器的概念,它允许我们在语言层面上定义一个(有限或无限的)序列。 暂时先抛开它。我们对于for循环以及它的兄弟for-in循环,都已经十分的熟悉。后者可以被用来帮助我们理解迭代器。 {代码...} 对于for-in循环,它有许多的问题。但是最大的问题,便是它不保证迭代的顺...

[译]JavaScript ES6解构赋值指南

2015-06-19
阅读 3 分钟
24.6k
让我们来仔细地看看ES6所带来的更清晰的变量声明与赋值语法。现今的变量声明语法十分的直接:左边是一个变量名,右边可以是一个数组:[]的表达式或一个对象:{}的表达式,等等。解构赋值允许我们将右边的表达式看起来也像变量声明一般,然后在左边将值一一提取。听起来有点迷糊?让我们一起看看下面的例子就好。

Node.js中spawn与exec的异同比较

2015-06-17
阅读 3 分钟
23.8k
众所周知,Node.js在child_process模块中提供了spawn和exec这两个方法,用来开启子进程执行指定程序。这两个方法虽然目的一样,但是既然Node.js为我们提供了两个方法,那它们之间必然还是会有一些不同之处,下面让我们来分析一下他们的异同。

用ES6重写《JavaScript Patterns》中的设计模式

2015-05-27
阅读 5 分钟
12.3k
最近在回顾设计模式方式的知识,重新翻阅了《JavaScript模式》(个人感觉也算是一本小有名气的书了哈)一书,读时总有感触:在即将到来的ES6的大潮下,书中的许多模式的代码可用ES6的语法更为优雅简洁的实现,而另一些模式,则已经被ES6原生支持,如模块模式(99页)。所以自己动手用ES6重新实现了一遍里面的设计模式,...