我没有完全了解Node.js的全部内容.也许是因为我主要是一个基于Web的业务应用程序开发人员.它是什么以及它的用途是什么?
到目前为止,我的理解是:
我的理解是否正确?如果是,那么即使I/O有什么好处,它对于并发性的东西更多吗?另外,Node.js的方向是成为一个类似于基于JavaScript(V8的)编程模型的框架吗?
在Bluebird的util.js文件中,它具有以下功能:
function toFastProperties(obj) {
/*jshint -W027*/
function f() {}
f.prototype = obj;
ASSERT("%HasFastProperties", true, obj);
return f;
eval(obj);
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,在返回函数之后有一个声明,我不知道它为什么存在.
同样,它似乎是故意的,因为作者已经沉默了JSHint对此的警告:
'return'后无法访问'eval'.(W027)
这个功能到底是做什么的?难道util.toFastProperties真的让一个对象的属性"快"?
我在Bluebird的GitHub存储库中搜索了源代码中的任何注释或者问题列表中的解释,但我找不到任何注释.
我正在阅读幻灯片使用V8破解Javascript速度限制,并且有一个示例,如下面的代码.我无法弄清楚为什么<=比<这种情况慢,有人可以解释一下吗?任何评论都表示赞赏.
慢:
this.isPrimeDivisible = function(candidate) {
for (var i = 1; i <= this.prime_count; ++i) {
if (candidate % this.primes[i] == 0) return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
(提示:素数是一个长度为prime_count的数组)
快点:
this.isPrimeDivisible = function(candidate) {
for (var i = 1; i < this.prime_count; ++i) {
if (candidate % this.primes[i] == 0) return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
[更多信息]速度提升很显着,在我的本地环境测试中,结果如下:
V8 version 7.3.0 (candidate)
Run Code Online (Sandbox Code Playgroud)
慢:
time d8 prime.js
287107
12.71 user
0.05 system
0:12.84 elapsed
Run Code Online (Sandbox Code Playgroud)
快点: …
新的稳定版本的Node.js(0.12)最近已经升级了Google的v8 JavaScript引擎v3.28.73.
--harmony标志?我检查了几个声称要列出ES 6功能的网站但是所有这些功能看起来都已过时 - 最突出的是,这个表(更新: 现在更新时的当前Node.js状态为0.12),因为有几个功能列为--harmony当我发现其中一些是默认启用时需要标志(地图,集合,符号,仅举几例).更新:节点特定表已经可用
此外,尝试谷歌这个信息纯粹为v8引擎提供了太新的信息 - 当前的v8版本是4.2.*,这远远超过了Node.js使用的.
我希望这个问题(及其答案)将成为Node.js开发人员现在可以使用的ES 6功能的全面总结.
我正在研究没有浏览器的Javascript编程.我想从Linux或Mac OS X命令行运行脚本,就像我们运行任何其他脚本语言(ruby,php,perl,python ......)
$ javascript my_javascript_code.js
Run Code Online (Sandbox Code Playgroud)
我看了蜘蛛猴(Mozilla)和v8(谷歌),但这两个似乎都是嵌入式的.
是否有人使用Javascript作为脚本语言从命令行执行?
如果有人好奇,为什么我期待到这一点,我一直在关注着Node.js的.node.js的性能让我想知道javascript是否可以成为处理大数据的可行脚本语言.
从官方文档(来源):
process.memoryUsage()
返回一个对象,描述以字节为单位测量的Node进程的内存使用情况.
Run Code Online (Sandbox Code Playgroud)var util = require('util'); console.log(util.inspect(process.memoryUsage()));这将产生:
Run Code Online (Sandbox Code Playgroud){ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }heapTotal和heapUsed是指V8的内存使用情况.
究竟rss,heapTotal和heapUsed代表什么?
这似乎是一个微不足道的问题,但我一直在寻找,到目前为止我找不到一个明确的答案.
场景:考虑以下是节点Web应用程序的代码部分.
app.get('/users/:id?', function(req, res, next){
var id = req.params.id;
if (id) {
// do something
} else {
next(); //or return next();
}
});
Run Code Online (Sandbox Code Playgroud)
问题:我正在检查哪一个next()或只是return next().上面的示例代码对两者都完全相同,并且没有显示执行上的任何差异.
问题:有人可以对此有所了解,何时使用next()以及何时使用return next()和一些重要区别?
我刚刚发现ECMAScript 7功能a**b作为Math.pow(a,b)(MDN参考)的替代方案,并且在该帖子中遇到了一个讨论,其中他们显然表现不同.我在Chrome 55中测试了它,可以确认结果有所不同.
Math.pow(99,99) 回报 3.697296376497263e+197
而
99**99 回报 3.697296376497268e+197
因此记录差异会Math.pow(99,99) - 99**99导致-5.311379928167671e+182.
到目前为止可以说,它只是另一种实现,但将它包装在一个函数中的行为又有所不同:
function diff(x) {
return Math.pow(x,x) - x**x;
}
Run Code Online (Sandbox Code Playgroud)
调用diff(99)返回0.
为什么会这样?
正如xszaboj指出的那样,这可以缩小到这个问题:
var x = 99;
x**x - 99**99; // Returns -5.311379928167671e+182
Run Code Online (Sandbox Code Playgroud) v8 ×10
javascript ×7
node.js ×6
bluebird ×1
command-line ×1
connect ×1
ecmascript-6 ×1
ecmascript-7 ×1
evented-io ×1
express ×1
performance ×1
scripting ×1
unix ×1