Node.js 服务器端的JavaScript脚本新秀:Node.js
目前,Node.js是在前端页面开发中十分受欢迎的,它是一套用来编写高性能网络服务器的JavaScript工具包,在本文中,将带领各位初学者介绍Node JS的基本知识,要求本文的阅读对象为有一定Javascript和其他开发语言基础的读者。
什么是Node.js
Node是一个Javascript运行环境(runtime)。实际上它是对GoogleV8引擎(应用于Google Chrome浏览器)进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。例 如,在服务器环境中,处理二进制数据通常是必不可少的,但Javascript对此支持不足,因此,V8.Node增加了Buffer类,方便并且高效地 处理二进制数据。因此,Node不仅仅简单的使用了V8,还对其进行了优化,使其在各环境下更加给力。
初识Node.js
要开始使用Node.js的,必须先了解Node.js和传统的服务器端脚本环境(如:PHP,Python和Ruby的,等等)之间的差异。
相信大部分读者都已经对ajax编程十分熟悉了,其中ajax中的a(asynchronous)指的是异步编成,所以在node.js世界中,一切的方法都是异步执行的,因此比如你需要程序中阅读一个操作系统中的文件,则必须指定一个回调方法,则在读取完这个文件后,则会执行这个回调方法的内容。
下面,就Node.js跟其他语言来做个小的对比,读者可以可以看出其中的端倪。因为Node.js不是服务器运行环境,它实际上是在服务端运行的javascript,因此在性能上是十分高效的。下面是Node.js编写的一个小程序代码:
var i, a, b, c, max;
max = 1000000000;
var d = Date.now();
for (i = 0; i < max; i++) {
a = 1234 + 5678 + i;
b = 1234 * 5678 + i;
c = 1234 / 2 + i;
}
而相同的PHP代码如下:
$a = null;
$b = null;
$c = null;
$i = null;
$max = 1000000000;
$start = microtime(true);
for ($i = 0; $i < $max; $i++) {
$a = 1234 + 5678 + $i;
$b = 1234 * 5678 + $i;
$c = 1234 / 2 + $i;
}
var_dump(microtime(true) - $start);
下面的表是两者对比的性能列表,以微秒为单位,如下:
Node.JS初学者指南之基础介绍篇
在命令行执行这两个应用程序,所以没有服务器端的延迟执行。对每个应用分别测试10次,取平均值,结果。如果循环的次数比较少,则php的速度快点,但这种优势,随着迭代次数的增加而减少,会发现都比nodejs慢了!
可以看到Node.js速度是很快,但必须正确地使用它。下面介绍Node.js中几个重要的概念:
Modules模块
Node.js使用Module模块去划分不同的功能,以简化应用的开发。Modules模块有点象C语言中的类库。每一个Node.js的类库都包含了十分丰富的各类函数,比如http模块就包含了和http功能相关的很多函数,可以帮助开发者很容易地对比如http,tcp/udp等进行操作,还可以很容易的创建http和tcp/udp的服务器。
要在程序中使用模块是十分方便的,只需要如下:
在这里,引入了http类库,并且对http类库的引用存放在http变量中了。这个时候,node.js会在我们应用中搜索是否存在node_modules的目录,并且搜索这个目录中是否存在http的模块。如果node.js找不到这个目录,则会到全局模块缓存中去寻找,用户可以通过相对或者绝对路径,制定模块的位置,比如:
var myModule = require('./myModule.js');
模块中包含了很多功能代码片断,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,都只能在同一个模块中被调用。当然,可以将某些方法和变量暴露到模块外,这个时候可以使用export是对象去实现,比如如下代码:
var PI = Math.PI;
exports.area = function (r) {
return PI * r * r;
};
exports.circumference = function (r) {
return 2 * PI * r;
};
上面的代码中,创建了PI这个变量,这个变量只能在同一个模块中被访问,并且用exports分别将两个方法area和circumference对外暴露出去了,因此在其他模块中可以访问。
尽量避免使用全局变量
Node.js是使用Google的V8 JavaScript引擎。因此,我们应该遵循的最佳实践去进行客户端的开发。比如,我们应该尽量避免将所有东西都放在全局变量中。然而,这并不总是可能的。在node.js中,要声明全局变量的话,甚至可以省略var关键字,这样你可以很容易地创建一个全局变量的函数,比如:
globalVariable = 1;
globalFunction = function () { ... };
但是尽可能的话,还是应该少在Node.js中到处使用全局变量。
Node.js的安装
下面介绍下Node.js的安装,首先在nodejs.org的网站上根据操作系统下载相关的安装包,对于linux下的安装,可以如下进行:
sudo apt-get update
sudo apt-get install node
或者:
sudo aptitude update
sudo aptitude install node
Node.js就会在sid库,现在可以将它们增加到sources来源列表中
sudo echo deb http://ftp.us.debian.org/debian/ sid main > /etc/apt/sources.list.d/sid.list
但要注意的是,在完成安装后,需要移走/etc/apt/sources.list.d/sid.list。
Node.js 服务器端的JavaScript脚本新秀:Node.js相关推荐
- 服务器端执行javascript脚本
想实现这样的功能: 单击一个服务器端按钮(登陆)后,如果登陆成功隐藏页面上的一个HTML按钮. 于是想通过在服务器端执行javascript脚本实现: private void Btn_login_C ...
- 【JS】把JavaScript脚本作为书签收藏起来并可单击执行
效果说明 从操作上说,是将JavaScript脚本作为书签,想用的时候点一下收藏栏中对应的书签,即可执行脚本: 从作用上说,主要可以对当前页面进行一些脚本上的操作,比如对特定页面DOM进行操作.改变字 ...
- php能反序列化js的吗,javascript – 如何在node.js中反序列化PHP会话?
我将 PHP $_SESSION数据存储在数据库中. 然后从Node.js服务器,我想获取该数据并反序列化它. con.query('SELECT user_id, data ' + 'FROM se ...
- 小汤学编程之JavaScript学习day01——认识JS、JS基础语法
一.认识JS 1.JavaScript的组成 2.浏览器执行js简介 3.JavaScript是什么? 4.扩展内容 二.JS基础语法 1.代码书写位置 2.变量 ...
- 在服务器端运行JavaScript文件(一)
rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cyc%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C0 ...
- Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)...
什么是Node.js?还服务器端javascript?对于这个概念我在这篇文章不做解释,可以自己去搜索了解下,服务器端js不是新技术,只是最近的node.js的火爆让他爆发了,我会在以后的文章里解释什 ...
- JavaScript教程9 - Node.js
Node.js 安装Node.js https://nodejs.org/ npm npm其实是Node.js的包管理工具(package manager). 命令行模式 执行node hello.j ...
- js是运行在服务器端的脚本语言,JavaScript脚本语言
JavaScript脚本语言 JavaScript是一种脚本语言,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解释运行.下文为大家分享的是JavaScript ...
- paip.最好的脚本语言node js 环境搭建连接mysql
paip.最好的脚本语言node js 环境搭建连接mysql #====下载node...走十一个exe..容易的.. 1 #0----Hello world .js 2 #---------模 ...
最新文章
- 实战:使用 Python 用不到 10 行代码计算汽车数量
- listview 的 selection mode 训练小例子
- 5G | 5G新基建最新进展及投资机会【包含五大板块】
- leetcode-13-罗马数字转整数
- 【算法】Bellman-Ford算法(单源最短路径问题)(判断负圈)
- Hello world开始
- Android生命周期函数执行顺序
- ie浏览器模拟器_航空飞机模拟器安卓版下载-航空飞机模拟器游戏下载
- python入门基础知识实例-Python入门基础知识实例,值得收藏!
- 力扣-876 链表的中间结点
- 传智播客-刘意-java深入浅出精华版学习笔记Day06
- Android计分器课程设计,课程设计题八:篮球比赛计分器
- Android init.rc介绍及其语法
- 2022华为机试真题 C++ 实现【勾股数元组】
- linux用户motd,linux需要装?那就和我一起来配置一个动态的MOTD登陆效果吧
- CE修改Eternium永恒之金【LUA篇】
- 史上非常简单、快速的解决Excel导出遇到Excel导出错误
- php 豆瓣isbn接口,ISBN书号查询
- 解读-m addrtype --dst-type LOCAL -j DOCKER
- Ubuntu下mount cifs
热门文章
- Linux splint命令
- flex java mysql,关于从Flex到Java到mysql:从Flex到Java到mysql-连接失败,从剪贴簿到Java到mysql-成功连接...
- [gitsourcetree]cherry pick和遴选的使用
- html display none取消,display none是什么意思?
- 蓝桥杯 安慰奶牛Python版
- ihs服务器限制文件上传,请教IHS配置问题
- android干不过苹果,安卓和苹果已经做到了平起平坐,为什么口碑上还超不过苹果?...
- linux获取符号表调试
- 蓝海创意云丨稀缺又高端,为电影“补妆”的调色师是怎样炼成的!
- GlusterFS 和 Ceph 比较