谷歌不喜欢 Node.js ? 听听开发团队怎么说

王练
 王练
发布于 2017年06月07日
收藏 5

有人在 Quora 上提问,为什么谷歌不喜欢 Node.js 呢,Google 的 UX 工程师和来自 Node.js 团队的开发者分别回答了他们对这个问题的看法,对于编程语言来说,每一门语言都有它自己的优势,重要的是如何用它去解决问题。

谷歌 UX 工程师 Sean Grogg :

对于任何语言,谷歌对其都秉持着中立的态度,只有所谓的 Big Three(Java、Python 和 Go)例外,这些语言有着自己特别的优势,在项目中使用它们不需要进行额外的说明。

作为一家企业,谷歌对 Node.js 并没有什么偏见。我写过很多 React 代码,它们都依赖 Node ,其中一些代码甚至现在还在谷歌的 megarepo 中。

当然,可能也会有一些个人或是团队不太喜欢 Node.js 。谷歌内部的确有一些人不喜欢它,但是同时也有很多人能够看到 Node.js 的价值,尤其是 Cloud 团队。

  •  Node.js 是目前 Cloud Functions 唯一支持的语言

  •  它也是 App Engine 灵活环境的一部分

  •  它还是很多产品的客户端 library(Compute Engine,、Cloud Storage 以及 Datastore 等)

Node.js 团队 Andreas Madsen:

谷歌的 V8 团队与 Node.js 团队有着紧密的合作。在最近的 Node.js 8 中,我们对之后的 V8 保证了 ABI 兼容性。如果没有两个团队间的紧密合作,我们无法做到这一点。

Node.js 还在和 V8 团队一起开发 PromiseHook API ,它允许开发者使用 C++ 检测所有 promise 。它让我们可以在 domain module 中加入对 promise 的支持,而且也是新的 async_hooks API 中的一个主要组件。

由此可见,说谷歌讨厌 Node.js 完全是一派胡言。

Topseptools.tech SEO 经理 Muhammad Saeed:

在使用 Node.js 的时候,你不能一次性处理多个 core ,比需要要对多个 instance 进行 spin 。更糟的是,它的 cluster API 到现在依然还只是实验性功能。

我之所以不喜欢 Node.js ,是因为在使用 headless 浏览器运行测试的时候,你智能使用一个 core 。除非你能学会如何将测试的 load 进行分配,否则在真实浏览器中运行测试的速度会更快。

调试也是个问题,如果你使用的是cluster library,它会无法正常工作。我非常希望 Node.js 能解决这个问题。

原文:Why does Google despise Node.js? Answer Request

译文:SDK.cn  编译:鲁行云

原标题:谷歌为何不喜欢 Node.js ?

>>>【评论有礼】6月6日-30日评论每日更新的“新闻资讯和软件更新资讯”,评论点赞数超过 20 的可登上每周更新的“源资讯”和“软件周刊”两大栏目,点赞数超过 50 的还将获得 5 活跃积分奖励和开源中国定制好礼。详情

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:谷歌不喜欢 Node.js ? 听听开发团队怎么说
加载中

精彩评论

eechen
eechen
话说Google员工说的Big Three中居然没有自家的Dart,Dart团队哭晕在厕所.
最新版本Angular有AngularTS和AngularDart,就是没有AngularJS.
至少Angular这个Google团队,是不喜欢JS的.

PHP在PHP-FPM中可以用fastcgi_finish_request()异步发送邮件.
也就是客户端浏览器不用等服务器端PHP发完邮件就能返回并响应用户:
<?php
fastcgi_finish_request(); // 结束本次请求,返回并响应用户
mail(); // 发送邮件
?>
话说号称事件驱动无阻塞的Node.JS该如何实现上述异步发送邮件的功能呢?
watano
watano
1. 这nodejs是多难用啊,需要请google大神出来站台宣传?
2. google大神放个p都是香的.
陈少鑫
陈少鑫
标题:谷歌为何不喜欢 Node.js

内容:由此可见,说谷歌讨厌 Node.js 完全是一派胡言。
Megadotzipp
Megadotzipp

引用来自“gamehope”的评论

Big Three(Java、Python 和 Go),get
Big Three(Java、Python & Go),get?

最新评论(21

软件之道在易
不喜欢<>讨厌。
雅阁
需要详细的资料的可以看看这个适不适合你 http://javaee.3g-edu.org/courses/?lbjV2 跟页面弹窗要
AutoPlus
AutoPlus

引用来自“eechen”的评论

话说Google员工说的Big Three中居然没有自家的Dart,Dart团队哭晕在厕所.
最新版本Angular有AngularTS和AngularDart,就是没有AngularJS.
至少Angular这个Google团队,是不喜欢JS的.

PHP在PHP-FPM中可以用fastcgi_finish_request()异步发送邮件.
也就是客户端浏览器不用等服务器端PHP发完邮件就能返回并响应用户:
<?php
fastcgi_finish_request(); // 结束本次请求,返回并响应用户
mail(); // 发送邮件
?>
话说号称事件驱动无阻塞的Node.JS该如何实现上述异步发送邮件的功能呢?

引用来自“AutoPlus”的评论

TypeScript 跟 Node.js 没有半点关联,TypeScript 只是 JavaScript 语言的预处理编译器。Node.js 可以用 TypeScript 编程,Dart 也可以。

发送邮件:

async function main() {
await processRequest()
await mail()
}

main()

这个例子太 low,至少得体现出异常处理、会话验证吧,比如:

async function main() {

let user = await sessionGot()
cond(user, UnauthorizedError)
let permission = await permissionGot()
cond(permission.has(user), ForbiddenError)
let list = await mailUserListGot()
cond(list.has(user), NotFoundError)
await mail()

}

main()

引用来自“eechen”的评论

我从你的代码中并未能看出finish request完成请求这个操作.
await只不过是在请求中异步.
async await 就是 Go-lang 的 go {}:

go {

let user = sessionGotAsync()
cond(user, UnauthorizedError)
let permission = permissionGotAsync()
cond(permission.has(user), ForbiddenError)
let list = mailUserListGotAsync()
cond(list.has(user), NotFoundError)
mail()

}

AutoPlus
AutoPlus

引用来自“eechen”的评论

@AutoPlus 网上搜了下,其实Node的res.end()就等价于PHP-FPM的fastcgi_finish_request():
var http = require('http');
var fs = require('fs');
http.createServer(function(req, res) {
  var time = new Date().getTime();
  res.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
  res.write('<h1>' + time + '</h1>');
  res.end(); // 结束本次请求,返回并响应用户
  // 2秒后写入文件模拟发邮件耗时
  setTimeout(function() {
    fs.writeFile(__dirname + '/main.txt', time, function(err) {
      if (err) console.log('写入失败 ');
      else console.log('写入成功' + time);
    });
  }, 2000);
}).listen(8080, '127.0.0.1');
你还是没弄明白 Socket 通信的原理。对于 Unix Linux,socket 通信抽象为文件,发送数据就是 write 或者
send(write 带标识位)。Nodejs 把 write send 做了一层封装,至于 end,只是在 HTTP 数据尾部加一个结束符,对于非 Transfer-Encoding: chunked 的数据,不写 end 也是可以的。
eechen
eechen
@AutoPlus 网上搜了下,其实Node的res.end()就等价于PHP-FPM的fastcgi_finish_request():
var http = require('http');
var fs = require('fs');
http.createServer(function(req, res) {
  var time = new Date().getTime();
  res.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
  res.write('<h1>' + time + '</h1>');
  res.end(); // 结束本次请求,返回并响应用户
  // 2秒后写入文件模拟发邮件耗时
  setTimeout(function() {
    fs.writeFile(__dirname + '/main.txt', time, function(err) {
      if (err) console.log('写入失败 ');
      else console.log('写入成功' + time);
    });
  }, 2000);
}).listen(8080, '127.0.0.1');
eechen
eechen

引用来自“eechen”的评论

话说Google员工说的Big Three中居然没有自家的Dart,Dart团队哭晕在厕所.
最新版本Angular有AngularTS和AngularDart,就是没有AngularJS.
至少Angular这个Google团队,是不喜欢JS的.

PHP在PHP-FPM中可以用fastcgi_finish_request()异步发送邮件.
也就是客户端浏览器不用等服务器端PHP发完邮件就能返回并响应用户:
<?php
fastcgi_finish_request(); // 结束本次请求,返回并响应用户
mail(); // 发送邮件
?>
话说号称事件驱动无阻塞的Node.JS该如何实现上述异步发送邮件的功能呢?

引用来自“AutoPlus”的评论

TypeScript 跟 Node.js 没有半点关联,TypeScript 只是 JavaScript 语言的预处理编译器。Node.js 可以用 TypeScript 编程,Dart 也可以。

发送邮件:

async function main() {
await processRequest()
await mail()
}

main()

这个例子太 low,至少得体现出异常处理、会话验证吧,比如:

async function main() {

let user = await sessionGot()
cond(user, UnauthorizedError)
let permission = await permissionGot()
cond(permission.has(user), ForbiddenError)
let list = await mailUserListGot()
cond(list.has(user), NotFoundError)
await mail()

}

main()
我从你的代码中并未能看出finish request完成请求这个操作.
await只不过是在请求中异步.
AutoPlus
AutoPlus

引用来自“eechen”的评论

话说Google员工说的Big Three中居然没有自家的Dart,Dart团队哭晕在厕所.
最新版本Angular有AngularTS和AngularDart,就是没有AngularJS.
至少Angular这个Google团队,是不喜欢JS的.

PHP在PHP-FPM中可以用fastcgi_finish_request()异步发送邮件.
也就是客户端浏览器不用等服务器端PHP发完邮件就能返回并响应用户:
<?php
fastcgi_finish_request(); // 结束本次请求,返回并响应用户
mail(); // 发送邮件
?>
话说号称事件驱动无阻塞的Node.JS该如何实现上述异步发送邮件的功能呢?
TypeScript 跟 Node.js 没有半点关联,TypeScript 只是 JavaScript 语言的预处理编译器。Node.js 可以用 TypeScript 编程,Dart 也可以。

发送邮件:

async function main() {
await processRequest()
await mail()
}

main()

这个例子太 low,至少得体现出异常处理、会话验证吧,比如:

async function main() {

let user = await sessionGot()
cond(user, UnauthorizedError)
let permission = await permissionGot()
cond(permission.has(user), ForbiddenError)
let list = await mailUserListGot()
cond(list.has(user), NotFoundError)
await mail()

}

main()
开源中国首席屌炸天
开源中国首席屌炸天

引用来自“eechen”的评论

话说Google员工说的Big Three中居然没有自家的Dart,Dart团队哭晕在厕所.
最新版本Angular有AngularTS和AngularDart,就是没有AngularJS.
至少Angular这个Google团队,是不喜欢JS的.

PHP在PHP-FPM中可以用fastcgi_finish_request()异步发送邮件.
也就是客户端浏览器不用等服务器端PHP发完邮件就能返回并响应用户:
<?php
fastcgi_finish_request(); // 结束本次请求,返回并响应用户
mail(); // 发送邮件
?>
话说号称事件驱动无阻塞的Node.JS该如何实现上述异步发送邮件的功能呢?
这个 @eechen 就是个笑话,天天要喊着吊打,结果现在挂在树上惨遭吊打,屁都不敢放一个,又一个神棍被拉下神坛 --via FalconChen . 有链接有真相: https://www.oschina.net/question/253880_2236467
eechen
eechen
话说Google员工说的Big Three中居然没有自家的Dart,Dart团队哭晕在厕所.
最新版本Angular有AngularTS和AngularDart,就是没有AngularJS.
至少Angular这个Google团队,是不喜欢JS的.

PHP在PHP-FPM中可以用fastcgi_finish_request()异步发送邮件.
也就是客户端浏览器不用等服务器端PHP发完邮件就能返回并响应用户:
<?php
fastcgi_finish_request(); // 结束本次请求,返回并响应用户
mail(); // 发送邮件
?>
话说号称事件驱动无阻塞的Node.JS该如何实现上述异步发送邮件的功能呢?
返回顶部
顶部