OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

NODEJS是人性化的


分享到


分类 心得体会   关键字 瞎扯   发布 andrewleeson  1399488824518
注意 转载须保留原文链接,译文链接,作者译者等信息。  

NODE在服务器上运行的比JavaScript多得多。

 

那是NODE的办法,对不对?现在你可以写服务器端和客户端的JavaScript代码。

 

你将不会再那么辛苦的在学习和不同环境间跳跃。当你不得不从客户端转移到服务器端或从服务器端转到客户端时,这个转换是极其痛苦的,充满血和泪。

 

我希望你能注意到我的讽刺。

 

NODE使用JavaScript仅仅只是一个取舍点(对有些人有利,有些人有害)。几乎可以肯定的是,这对于它的成功是有很大贡献的,但是太多了,以致于将NODE的根本点和目的经常丢失。如果这对你来说是显而易见的,那么你可以不用读此文了。

 

说你喜欢NODE是因为你能在服务器端写JavaScript代码就像说你喜欢红 Lotus Elises是因为它们是被漆成红色一样。不是每一个人都喜欢红色,而且就算每个人都喜欢,这也不是让这个车被得很“好”最重要的理由。

 

NODE与目前的动态语言现状有着本质的区别。它是由对效率的极度痴迷而产生的。在线程与连接之间经典1对1模式之间的不满让它有能力处理显著增长的用动态语言为web应用写的并发等级。

 

阻塞和IO问题

 

不管WEB还是其它应用的瓶颈都是IO引起的。

 

应用一般都是由数据库,文件系统,网络,或这些介质结合起来来传送/接收数据的。通常,这些信息的传输速度比直接在内存中操作的速度要慢。CPU的过量使用似乎不是你的问题。

 

第二个问题是我们开始处理问题的方法。从历史的角度上理解电脑,我们能有序地思考。这就是电脑思考问题的方式,对吗?你提供一大堆的指令,然后电脑从上到下有序的执行。你的第一个程序大概像下面这样子:

// print
console.log("Enter your name: ");

// block execution to retrieve data
// keeping the process tied up awaiting the
// data's return
var name = console.read();

// manipulate data and report
console.log("Hello " + name + "!");  

但是如果你能以非阻塞方式做的话

// print
console.log("Enter your name: ");

// make a request for the data, but allow the process to
// be free to do other things, providing a bit of code
// to run when the data is retrieved.
console.read(

  // When we are notified we have a
  // response, manipulate data and report
  function(err, name) {
    console.log("Hello " + name + "!");
  }
);

让你的进程阻塞、等待数以百万计的时钟周期将很浪费时间和资源。为了处理额外的请求,某些情况下你必须使用进程管理器来管理这些线程。为了让web逐渐更具媒体交互性,我们不断地减少每个请求的大小,虽然这些不断增加的请求是由每个单独的客户端发起的。这让为什么请求与进程之间1对1关系很难衡量变得很明显。

 

站在历史的角度上,我们让自己能够更简单地以第一种风格来说服我们的程序,但我认为第二种方式也是一样的,如果没有太多,像人类一样进行敏锐的判断。

 

像人类一样思考

 

作为人类,你知道信息流的异步本性。你凭直觉知道,这仅仅只是没有效果和实用性来阻止每次你需要检索或传达信息时所做的所有事情。

 

作为一个开发者,你每次向经理或股东询问一个项目的详细情况时,你会简单地坐着然后安静地等待回复吗?不,你当然不会。你移步到下一个你能取得进展的事情上,欺骗一个单方面很充分的重要任务。一旦信息复原,你继续相关的任务。

 

举个更通俗的例子,你在开车,你旁边坐着你的朋友,你需要知道明天的天气预报。你会刹车,不管交通秩序然后面向你的朋友问他明天天气会怎样吗?你会沉默的等待(除非后面的人按喇叭)直到他为了查询了天气情况?你当然不会,当他告诉你天气情况时,你会继续与他聊别的东西。

 

 

在这种方式下,NODE的非阻塞/异步模型在第一次传递时并不需要变得异质。

 

为什么不用线程

 

线程是困难,繁重,且大材小用的。

 

他们确实解决了平行的基本问题,但他们提出一个围绕着线程安全和易变性的全新问题。如果要实施的话,对于动态语言来说它们通常很复杂且很难解决。

 

在NODE中,除了你的代码,所有东西都平行运行着。

 

对于你来说,所有事情都可以通过平行来解决。但是由于你的代码永远不会平行的运行,且通常都在单线程中,线程安全和易变性就没有了。这给一般用例的平行化带来了好处,不需要给开发者额外的复杂度。

 

我认为NODE处理平行化的方法再次反应出我们人类过程思考的方式,并不是并行的,但是高效的多任务。

 

某某语言也有非阻塞服务

 

我确信肯定是有的,当你想用不会导致阻塞的第三方包模型时它很可能是有用的。非阻塞被开发社区以哲学方面的思想应用。这是规则,而不是例外。

 

此外,围绕着异步性的事件循环和支持性基础通过低级语言很好的实现了(V8,libev,libeio等等)。其他许多语言的非阻塞服务将利用这样的库,但创造性的是用它们的动态语言实现。在这种情况下,当与NODE的实现相比时,性能是需要特别关注的。

 

没有语言或平台是离开权衡的,但我希望实现NODE作为实用性问题的解决方案和有意思的学术研究这个想法。



原文地址: 点此
社区评论 ( Beta版 )
  • #0 己删除 1411298623579
  • #1 己删除 1411298692666
  • #2 己删除 1411298726671
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. 编程是一个没有前途的工作
  2. 你已经毁了JavaScript
  3. 为什么我不建议你将JavaScript作为主力语言
  4. 你用什么工具开发JavaScript?
  5. 将JavaScript 作为第一编程语言
  6. 静态web的回归
  7. 什么是最优秀的JavaScript框架?Angular or Backbone?
  8. 使用Backbone构建精美应用的7条建议
  9. 抛弃jQuery,深入原生的JavaScript
  10. OpenSSL是坑货写的
  11. 用 OnceAir 搭建个人Git/Svn/照片备份服务器,每年电费7块钱

 相关阅读 - 心得体会
  1. 每周工作不要超过40小时
  2. 10位顶级PHP大师的开发原则
  3. 软件开发中最流行的错误观点有哪些?
  4. 14条建议,使你的IT职业生涯更上一层楼
  5. 不能和老板做亲密朋友
  6. 老码农教你学英语
  7. 不要盲目的在项目中使用LESS CSS
  8. 做为技术人员为什么要写博客
  9. 幸福和成功的十条诫律
  10. 在创业型软件公司的收获

 关键字 - 瞎扯
  1. 你已经毁了JavaScript
  2. 我们不需要JavaScript框架
  3. NodeJS会是昙花一现吗?
  4. 编程是一个没有前途的工作
  5. 程序员取名:用大数据分析一下宝宝取名时最容易重复的名字
  6. 浦发银行,请给我们一个解释!
  7. 在 2016 年学 JavaScript 是一种什么样的体验?
  8. Java官方安装包捆绑百度卫士杀毒软件
  9. Node程序员的反应:当我们讨论ES6新功能的优点时
  10. 欧洲杯激战正酣,如何用大数据变身专家级球迷

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号