05 2013 档案
摘要:前述 nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核CPU机器上的性能表现。本文将介绍利用cluster模块创建的多线程如何共享数据的问题。进程间数据共享 首先举个简单的例子,代码如下:var cluster = require('cluster'); var data = 0;//这里定义数据不会被所有进程共享,各个进程有各自的内存区域 if (cluster.isMaster) { //主进程 var numCPUs = require('os').cpus().l
阅读全文
摘要:前述 我们都知道nodejs最大的特点就是单进程、无阻塞运行,并且是异步事件驱动的。Nodejs的这些特性能够很好的解决一些问题,例如在服务器开发中,并发的请求处理是个大问题,阻塞式的函数会导致资源浪费和时间延迟。通过事件注册、异步函数,开发人员可以提高资源的利用率,性能也会改善。既然Node.js采用单进程、单线程模式,那么在如今多核硬件流行的环境中,单核性能出色的Nodejs如何利用多核CPU呢?创始人Ryan Dahl建议,运行多个Nodejs进程,利用某些通信机制来协调各项任务。目前,已经有不少第三方的Node.js多进程支持模块发布,而NodeJS0.6.x 以上的版本提供了一个c.
阅读全文
摘要:1.shift()函数定义该函数从从数组中删除第一项,并返回该删除项。用法示例var fruits = ["Banana", "Orange", "Apple", "Mango"];fruits.shift()console.log(fruits);结果输出:Orange,Apple,Mango注:该方法会改变数组的长度2.pop()函数定义该函数从从数组中删除最后项,并返回该删除项。用法示例var fruits = ["Banana", "Orange", "Ap
阅读全文
摘要:准备工作(1)本机系统说明:本人机器为win7 64位,32位也可以。(2)软件安装: VISUAL C++ 2010 EXPRESS(Visual Studio 2010也可以); windows下安装NodeJS,可以从官网http://www.nodejs.org下载msi版进行快捷安装;(3)源码准备:从官网下载SourceCode版本node-v0.10.5.tar(笔者下载时的最新代码版本为v0.10.5),解压到windows任意目录下,如D:\node-v0.10.5。编写node的C/C++原生扩展[1]打开Windows命令行cmd.exe,进入D:\node-v0.1..
阅读全文
摘要:原始的方式因为对象的属性可以在对象创建后动态定义,这在 JavaScript 最初引入时都会编写类似下面的代码:var oCar = new Object;oCar.color = "blue";oCar.doors = 4;oCar.mpg = 25;oCar.showColor = function() { alert(this.color);};在上面的代码中,创建对象 car。然后给它设置几个属性:它的颜色是蓝色,有四个门,每加仑油可以跑 25 英里。最后一个属性实际上是指向函数的指针,意味着该属性是个方法。执行这段代码后,就可以使用对象 car。不过这里有一个问题
阅读全文
摘要:如果你比较熟悉Excel,并且用过里面的ROMAN()这个函数,如下:Microsoft Excel 中ROMAN函数的公式语法和用法如下:语法ROMAN(number, [form])ROMAN 函数语法具有下列参数:Number必需。需要转换的阿拉伯数字。Form可选。一数字,指定所需的罗马数字类型。罗马数字的样式范围可以从经典到简化,随着 form 值的增加趋于简单。请参见下面的示例ROMAN(499,0).说明如果数字为负,则返回错误值 #VALUE!。如果数字大于 3999,则返回错误值 #VALUE!。示例显然,微软Excel中的所谓古典罗马数字样式是和维基百科上对罗马数字的书写规
阅读全文
摘要:最近一个项目有这个需求,琐碎就找找这方面的资料来实现一下,顺便就拿来分享之。什么是罗马数字?罗马数字是最早的数字表示方式,比阿拉伯数字早2000多年,起源于罗马。如今我们最常见的罗马数字就是钟表的表盘符号:Ⅰ, Ⅱ , Ⅲ ,Ⅳ ,Ⅴ ,Ⅵ ,Ⅶ ,Ⅷ ,Ⅸ ,Ⅹ ,Ⅺ ,Ⅻ ……对应阿拉伯数字(就是现在国际通用的数字),就是1,2,3,4,5,6,7,8,9,10,11,12。阿拉伯数字其实是古代印度人发明的,后来由阿拉伯人传入欧洲,被欧洲人误称为阿拉伯数字。罗马数字记数方法基本字符:I、V、X、L、C、D、M相应的阿拉伯数字表示为:1、5、10、50、100、500、1000(1)相同的数
阅读全文
摘要:构造函数、原型实现继承的缺陷首先来分析构造函数和原型链两种实现继承方式的缺陷:构造函数(对象冒充)的主要问题是必须使用构造函数方式,且无法继承通过原型定义的方法,这不是最好的选择。不过如果使用原型链,就无法使用带参数的构造函数了。开发者如何选择呢?答案很简单,两者都用。构造函数+原型混合方式这种继承方式使用构造函数定义类,并非使用任何原型。创建类的最好方式是用构造函数定义属性,用原型定义方法。这种方式同样适用于继承机制,用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。用这两种方式重写前面的例子,代码如下:function ClassA(sColor) { th...
阅读全文
摘要:我们知道在JavaScript中定义类的原型方式,而原型链扩展了这种方式,以一种有趣的方式实现继承机制。prototype 对象是个模板,要实例化的对象都以这个模板为基础。总而言之,prototype 对象的任何属性和方法都被传递给那个类的所有实例。原型链利用这种功能来实现继承机制。如果用原型方式重定义前面例子中的类,它们将变为下列形式:function ClassA() {}ClassA.prototype.color = "blue";ClassA.prototype.sayColor = function () { alert(this.color);};functi
阅读全文
摘要:前面介绍过JavaScript中通过对象冒充来实现继承,这是最原始的方法。本文将介绍两种很类似于对象冒充的继承方式,即使用call()和apply()方法。call() 方法call() 方法是与经典的对象冒充方法最相似的方法。它的第一个参数用作 this 的对象。其他参数都直接传递给函数自身。例如:function sayHello(sPrefix,sSuffix) { alert(this.name + ”says“ + sPrefix + sSuffix);};var obj = new Object();obj.name = "Tom";sayHello.call(
阅读全文
摘要:我们知道JavaScript是面向对象的脚本语言,那么既然是面向对象,继承一定是必不可少的了。JavaScript的核心是ECMAScript,JavaScript继承机制的实现其实就是ECMAScript继承机制的实现。继承的方式ECMAScript 实现继承的方式不止一种。这是因为 JavaScript 中的继承机制并不是明确规定的,而是通过模仿实现的。这意味着所有的继承细节并非完全由解释程序处理。作为开发者,你有权决定最适用的继承方式。最原始的继承实现方式就是对象冒充,下面着重介绍该方法。对象冒充对象冒充实现继承的核心其实依赖于在函数环境中使用 this 关键字。其原理如下:构造函数使用
阅读全文
摘要:每种程序语言中都会涉及到字符窜连接,而这个小小的字符窜连接问题很可能会影响到系统的整体性能,本文主要探讨JavaScript中字符串连接的性能问题。而JavaScript的核心是ECMAScript 。与其他语言类似,ECMAScript 的字符串是不可变的,即它们的值不能改变。请考虑下面的代码:var str = "hello ";str += "world";实际上,这段代码在幕后执行的步骤如下:创建存储 "hello " 的字符串。创建存储 "world" 的字符串。创建存储连接结果的字符串。把 str 的当
阅读全文
摘要:在编写代码的时候难免涉及到变量的命名问题,不能只要求变量名的语法正确,而忽略了变量命名对代码可读性的影响。变量命名还应遵守以下某条著名的命名规则:著名的变量命名规则Camel 标记法首字母是小写的,接下来的字母都以大写字符开头。例如:var testValue = 0, secondValue = "hi";Pascal 标记法首字母是大写的,接下来的字母都以大写字符开头。例如:var TestValue = 0, SecondValue = "hi";匈牙利类型标记法在以 Pascal 标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的
阅读全文

浙公网安备 33010602011771号