Node 极简指南(5)— 继承和 Events

2014 年 07 月 17 日 by name5566 Categories: Computer Science, JavaScript

参考文献列表:
http://nodejs.org/

JavaScript 实现继承有多种方式。

了解 util.inherits 方法

Node 提供了 util.inherits 方法:

util.inherits(constructor, superConstructor)

util.inherits 方法设置 constructor 的 prototype 属性为一个新对象,此对象的原型对象为 superConstructor.prototype。调用 util.inherits 完成继承之后,constructor 会被添加一个 super_ 属性,sup[......]

继续阅读

没有评论

Node 极简指南(4)— 内存

2014 年 07 月 09 日 by name5566 Categories: Computer Science, JavaScript, Reading Notes, 深入浅出 NodeJS

参考文献列表:
深入浅出 NodeJS
http://nodejs.org/

Node 使用 v8 来解析 JavaScript 脚本,v8 限制了对内存的使用,使用过多的内存会导致 Node 进程退出。按照 https://github.com/joyent/node/wiki/FAQ 的说法(2014/7/8),默认情况下 Node 在 32 位系统上存在 512MB 内存使用限制,在 64 位系统上则为 1G,此限制能够通过 –max-old-space-size 修改至上限为 1G(32 位)和大约 1.7G(64 位)。注意,这种限制指的是通过 v8 使用内存时的限制[......]

继续阅读

没有评论

Node 极简指南(3)— 进程

2014 年 07 月 01 日 by name5566 Categories: Computer Science, JavaScript, Reading Notes, 深入浅出 NodeJS

参考文献列表:
深入浅出 NodeJS
http://nodejs.org/

Node 虽然自身存在多个线程,但是运行在 v8 上的 JavaScript 是单线程的。Node 的 child_process 模块用于创建子进程,我们可以通过子进程充分利用 CPU。范例:

var fork = require('child_process').fork;
// 获取当前机器的 CPU 数量
var cpus = require('os').cpus();
for (var i = 0; i < cpus.length; i++) {
    // 生成新进程[......]

继续阅读

没有评论

Node 极简指南(2)— 定时器

2014 年 06 月 22 日 by name5566 Categories: Computer Science, JavaScript, Reading Notes, 深入浅出 NodeJS

参考文献列表:
深入浅出 NodeJS
http://nodejs.org/

setTimeout 和 clearTimeout

var obj = setTimeout(cb, ms);

setTimeout 用于设置一个回调函数 cb,其在最少 ms 毫秒后被执行(并非在 ms 毫秒后马上执行)。setTimeout 返回值可以作为 clearTimeout 的参数,clearTimeout 用于停止定时器,这样回调函数就不会被执行了。

setInterval 和 clearInterval

var obj = setInterval(cb, ms);[......]

继续阅读

没有评论

Node 极简指南(1)— 模块机制

参考文献列表:
深入浅出 NodeJS
http://nodejs.org/

JavaScript 规范(ECMAScript)没有定义一套完善的能适用于大多数程序的标准库。CommonJS 提供了一套 JavaScript 标准库规范。Node 实现了 CommonJS 规范。

模块基础

在 Node 中,模块和文件是一一对应的。我们定义一个模块:

// circle.js
var PI = Math.PI;

// 导出函数 area
exports.area = function(r) {
    return PI * r * r;
}

/[......]

继续阅读

2条评论

JavaScript 极简指南(3)— 数组

2014 年 06 月 17 日 by name5566 Categories: Computer Science, JavaScript

参考文献列表:
JavaScript: The Good Parts
JavaScript: The Definitive Guide, 6th Edition

阅读本文需要有其他语言的编程经验。

在 JavaScript 中数组是对象(而非线性分配的内存)。

通过数组 literal 来创建数组:

var empty = [];
var numbers = [
    'zero', 'one', 'two', 'three', 'four',
    'five', 'six', 'seven', 'eight', 'nine'
];
empt[......]

继续阅读

没有评论

JavaScript 极简指南(2)— 对象和函数

2014 年 06 月 15 日 by name5566 Categories: Computer Science, JavaScript

参考文献列表:
JavaScript: The Good Parts
JavaScript: The Definitive Guide, 6th Edition

阅读本文需要有其他语言的编程经验。

JavaScript 中的简单类型包括:

  1. 数字
  2. 字符串
  3. 布尔(true 和 false)
  4. null
  5. undefined

此外的其他类型均是对象(我们不要被 typeof 操作符的返回值所迷惑),例如:

  1. 函数
  2. 数组
  3. 正则表达式
  4. 对象(对象自然也是对象)

对象基础

在 JavaScript 中,对象是属性的集合(对象为关联数组),每个属[......]

继续阅读

没有评论

JavaScript 极简指南(1)— 基础

2014 年 06 月 07 日 by name5566 Categories: Computer Science, JavaScript

参考文献列表:
JavaScript: The Good Parts
JavaScript: The Definitive Guide, 6th Edition

阅读本文需要有其他语言的编程经验。

开始学习之前

大多数的编程语言都存在好的部分和差的部分。本文只讲述 JavaScript 中好的部分,这是因为:

  1. 仅仅学习好的部分能够缩短学习时间
  2. 编写的代码更加健壮
  3. 编写的代码更加易读
  4. 编写的代码更加易于维护

弱类型和强类型

通常来说,越早的修复错误,为之付出的代价就越小。强类型语言的编译器可以在编译时检查某些错误。而 JavaScript 是一门弱类型语言,其解释器无法检查类型[......]

继续阅读

没有评论

git 极简指南

2014 年 05 月 20 日 by name5566 Categories: Computer Science, Tools

参考文献列表:
http://rogerdudler.github.io/git-guide/index.html

本地仓库(local repository)

创建一个本地仓库的流程:

  1. 为本地仓库创建一个目录
  2. 在目录中执行 git init

对本地仓库所做的改变(例如添加、删除文件等)首先加入到本地仓库的 Index(stage)中,之后通过 commit 命令将这些改变提交到本地仓库。

创建某个仓库的拷贝

git clone /path/to/repository

这里的 /path/to/repository 可以是一个本地路径,也可以是一个 U[......]

继续阅读

没有评论

理解 Memory barrier(内存屏障)

2014 年 04 月 21 日 by name5566 Categories: Computer Science

参考文献列表:
http://en.wikipedia.org/wiki/Memory_barrier
http://en.wikipedia.org/wiki/Out-of-order_execution
https://www.kernel.org/doc/Documentation/memory-barriers.txt

本文例子均在 Linux(g++)下验证通过,CPU 为 X86-64 处理器架构。所有罗列的 Linux 内核代码也均在(或只在)X86-64 下有效。

本文首先通过范例(以及内核代码)来解释 Memory barrier,然后介绍一个利用 Memo[......]

继续阅读

一条评论