node的第一步,hello,以及小技巧和CPU使用情况。到底能用几个核心?
安装了啥的就不说了,百度一下有很多。
Windows环境。Linux不会,所有就不说了。
1、 hello Word
node的hello Word很简单,就一行。
console.log("Hello world");
打开记事本,写这么一行,然后保存关闭(文件名hello),再把扩展名(.txt)改成.js。代码就写好了。
然后打开“运行”,输入cmd,打开“dos窗口”好像叫命令行窗口。
输入 node hello.js ,然后就能看的运行效果了。
然后有几个小问题,第一个就是编码问题,弄不好会出现乱码。
在Windows环境下,文件需要用utf8 ,如果是ansi的话,输出汉字会出现乱码。用记事本打开,“另存为”可以看到文件编码。
第二个就是执行方法太繁琐,需要好几个步骤,不够“Windows”,那么怎么办呢?我们可以用“批处理”来简化。
还是打开记事本,输入 :
node hello.js
然后保存,还是要改一下扩展名,这次要改成.bat。(hello.bat)
然后我们双击这个文件就可以运行。
但是等等,怎么窗口一闪就没了?这是因为默认情况下,执行完操作命令行窗口就会被关闭。所以我们需要改进一下。
右键hello.bat,在弹出菜单里选择“编辑”,改一下代码。
@echo off echo 开启控制台 :time title 现在时间是:%time%。这是node的hello Word echo 编译 hello.js echo. node hello.js echo. echo 执行完毕 echo. pause cls goto time
简单介绍一下,(更多批处理命令请自行百度)
pause 是暂停功能,窗口不会被关闭。
Cls是清屏。
Goto 就是传说中的跳转,跳到制定的位置。
保存后,我们在双击运行这个批处理文件,会自动编译hello.js,然后显示运行结果,然后窗口不会关闭。如果我们要修改代码的话,可以修改代码,然后保存文件,然后在这个窗口里面按任意键,就可以重新编译且运行修改后的代码。
这样编写和调试就会比较简单了。
2、 精确计时时间的问题。
一般情况下,我们可以用
new Date()).getTime()
来得到时间,这个可以精确到毫秒,但是实际运行的时候,由于只能16毫秒左右取一次时间,所以用这种方法只能精确到16毫秒。如果想要更精确需要用其他方法。
为啥要更精确呢,因为我想看看在node里面执行一段代码到底需要多少时间,越精确越好。比如从数据库里读取数据到底要多少毫秒?执行一个函数需要多少时间?
找了一下,发现了一种方法
function time(){
var diff = process.hrtime();
return diff[0] * 1000 + diff[1] / 1e6; // nano second -> ms
}
这个可以精确到0.00000000000毫秒。
3、 运行效果
先看看(new Date()).getTime()的运行情况,我们来写个死循环来看看
var i=0;var j=0;
var star = (new Date()).getTime(); //普通计时
var star2 = time(); //精确计时
var star3 = time(); //精确计时
while (true){
i++;j++;
var t = time() - star2;
// 循环次数 一般的时间 精确的时间 每次循环需要的精确时间
var msg = i + '_' + (new Date()).getTime() + '_' + time() + '_' +t;
//计算每循环100次需要的时间,运行结果可得,时间并不一致
if (j==100){ //每循环100次输出一次
var t2 = (new Date()).getTime() - star;
var t3 = time() - star3;
console.log(msg + '_' + t2+ '_' + t3); //每百次用时
star = (new Date()).getTime();
star3 = time();
j=0;
}
else {
console.log(msg);
}
star2 = time();
}
运行效果,对了,按“ctrl+c”可以停止死循环。

(new Date()).getTime() 的取值,有一大串都是一样的。
精确取值,每行都不一样,精确到了小数点后7位。
然后再看一下两次循环的时间差,这个就更厉害了,精确到了19位。而且几乎每行数值都不一样。

这是循环100次需要的时间。138毫秒。两种计时方法在大于16毫秒的时候,误差就比较小了,在15毫秒内。原因还是前者每16毫秒才能取值一次。
4、 运行效率问题
大家有没有发现问题?只是循环了100次,就需要138毫秒,这个是不是太慢了?
每次循环也没干啥是呀。这个node的效率是不是有问题?
这个嘛,问题出在 console.log() 上面,每次循环都要输出显示,我们可以简单验证一下,把每次循环都要输出的那一行注释掉,只保留每100次的输出。

这样,循环100次需要的时间,从100多豪秒,变成了0.1毫秒到0.5毫秒,波动范围比较大。但是这也是一千倍的差距。至于为啥多出来个显示功能,就变得这么慢,我也不太清楚。
5、 CPU的使用率
话说node不是单线程串行运行的吗?运行死循环的时候我特意看了一下CPU的使用情况。
我的CPU比较弱,I5,6200U,双核心四线程,显示四个核,好吧至少算是两个核吧。

运行后,四个核的使用率都上来了,并不是预想的一核工作三核围观的情况。
总使用率只有38.8%,并没有火力全开。看来在Windows家庭版里面,node的优先级并不高,没能获取更多的资源。
总体感觉还是挺奇怪的。只是一个简单的循环,没有回调函数,没有子进程,为啥四个核都用上了呢?
把所有的输出都注释掉,还是四核都使用了,只是使用率低了一点,毕竟不用输出了。

难道最新版的node改进了吗,可以利用多核心的CPU了?
还是Windows对node进行了优化?
还是我理解有误。
node的第一步,hello,以及小技巧和CPU使用情况。到底能用几个核心?的更多相关文章
- 写给Node.js新手的7个小技巧
一些我更愿意在开始就知道东西 利用 Node.js 开发是一个非常有趣,和令人满足的过程, 他有3万多个模块可以选择使用,并且所有的模块可以非常容易的集成入现有的应用之中. 无论如何,对于一些刚开始使 ...
- 零代码第一步,做个添加数据的服务先。node.js + mysql
node.js + mysql 实现数据添加的功能.万事基于服务! 增删改查之添加数据. 优点:只需要设置一个json文件,就可以实现基本的添加功能,可以视为是零代码. 添加数据的服务实现的功能: 1 ...
- 接触node第一步
趁着工作不忙,今天来系统记录一下安装node环境: 1.node下载地址为:https://nodejs.org/en/,检查是否安装成功:如果输出版本号,说明我们安装node环境成功:node -v ...
- Node.js 调试小技巧
小技巧--使用 supervisor如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会发现,无论你修改了代码的哪一 ...
- How Javascript works (Javascript工作原理) (十一) 渲染引擎及性能优化小技巧
个人总结:读完这篇文章需要20分钟,这篇文章主要讲解了浏览器中引擎的渲染机制. DOMtree ----| |----> RenderTree CSSOMtree ----| ...
- JavaScript 工作原理之十一-渲染引擎及性能优化小技巧
原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第十一章. 迄 ...
- 前端网络、JavaScript优化以及开发小技巧
一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...
- ios开发中的小技巧
在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...
- Windows Azure一些小技巧集合
我最近做了一个Windows Azure上面的项目,自己在做的过程中遇到了很多问题.有的是我自己摸索解决,有的是到网上寻找零碎的信息结合起来解决的.我感觉应当把某些解决方法集中一下,方便我以后查阅,也 ...
随机推荐
- 群晖NAS再折腾
端口转发 两年前我买了一台双盘位的群晖NAS,配置两个4T的硬盘,这玩意儿一度改变了我使用电脑的模式,真是爽爆了!最最主要的功能就是我能用它规整我所有的资料,并且不管何时何地,只要有网就能访问.为了能 ...
- java8 Stream常用方法和特性浅析
有一个需求,每次需要将几万条数据从数据库中取出,并根据某些规则,逐条进行业务处理,原本准备批量进行for循环或者使用存储过程,但是for循环对于几万条数据来说效率较低:存储过程因为逻辑非常复杂,写起来 ...
- centos6.7 配置Elasticsearch
Elasticsearch(以下简称ES),是一款开源的全文搜索引擎,获得了广泛的应用.这篇博客将介绍在centos6.7上如何配置ES. 一.安装JAVA环境 centos默认安装了JAVA环境,首 ...
- ubuntu-18.04 设置开机启动脚本-亲测有效
ubuntu-18.04不能像ubuntu14一样通过编辑rc.local来设置开机启动脚本,通过下列简单设置后,可以使rc.local重新发挥作用. 2.将下列内容复制进rc-local.servi ...
- 剑指Spring源码(二)
这是春节后的第一篇博客,我在构思这篇博客的时候,一度想放弃,想想要不要换个东西写,因为毕竟个人水平有限,Spring源码实在博大精深,不是我这个菜的抠脚的菜鸡可以驾驭的,怕误人子弟,还有就是源码分析类 ...
- Java集合详解2:LinkedList和Queue
今天我们来探索一下HashMap和HashTable机制与比较器的源码. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 喜欢的话麻烦star一下哈 ...
- 使用C#开发windows服务定时发消息到钉钉群_群组简单消息
前言:本提醒服务,是由C#语言开发的,主要由windows服务项目和winform项目组成,运行服务可实现功能:向钉钉自定义机器人群组里,定时,定次,推送多个自定义消息内容,并实现主要功能的日志记录. ...
- jsp内置对象-response对象
一.概念 隐含对象response是javax.servlet.HttpServletResponse接口实现类的对象.response对象封装了JSP产生的响应,用于响应客户端的请求,向客户端输出信 ...
- Dynamics 365中显示格式为URL的字段极少部分URL值录入了不显示怎么回事?
微软动态CRM专家罗勇 ,回复318或者20190315可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 对于如下类型的字段, ...
- arcgis api 3.x for js 入门开发系列十七在线天地图、百度地图、高德地图(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...