Node.js 都应用在什么项目上?这些项目为什么选择 Node.js?
来源:互联网 发布:java中使用log4j 编辑:程序博客网 时间:2024/05/01 11:18
首先,node新开一个http连接的开销,相当于一个大函数调用,相比php的新开线程动辄花费2MB内存和上下文切换的漫长时间,已经很小很小了。所以,node天生就是为高并发的应用而诞生,在设计之初就承载着巨大的使命。而这种极度追求代码效率和美感的设计,是以提升学习理解的难度,和考验编程能力为代价。如果你像我一样,有代码洁癖,追求极致,那么node将是不二选择。如果你仅仅是为了完成工作,或者快速搭建项目上线运营,那么还是用php或其它什么看似方便却一点也不“美”的语言吧。
再者,由于js的异步特征,始终有用户代码在执行,省去了等待查询数据库和文件系统的时间,相比CPU的时钟频率,去读一次数据库太久太久,久到让CPU等得花儿都谢了。node让CPU不在等待,node让妈妈不用担心我的内存。但是这种高效运用CPU的异步回调,将会带来逻辑上的混乱,一不小心就会一团乱麻理都理不清,下文有叙。
以上两点,导致node适合在具有大量细小的http请求环境下工作,典型的就是一个web即时聊天程序,或者一个支撑上万人同时在线的游戏服务器。你甚至不用考虑http请求数太多的问题。
如果用node开发网站,你可以把数据请求分的很细,也就是说不必像php那样把所有数据一次性加载到客户端,而是加载一部分,让浏览器渲染页面的同时,再去加载另一部分。Facebook的页面优化技术(叫big...什么的,我忘了),就是这种分块加载的模式。可以让页面的加载速度在用户体验上提升5到10倍。
node无论从代码执行速度,还是开销,都是最完美的选择。但是缺点在于js异步特征的难以理解和控制,如果没有相当过硬的js开发经验和特征理解,项目稍微大一点,代码结构就会一片混乱。node是在考验一个人的代码设计和掌控能力,如同九阴真经,练的好就一身绝学独霸武林,练的不好就走火入魔精神崩溃。动不动就长达8层的回调嵌套,可不是闹着玩的。除了采用step同步方案解决控制流倒置和深层回调嵌套问题,把数据请求分得很细,再分多次加载,不仅在代码流程上更美观,也更符合node的特性。
有人说,异步代码是反人类的。其实同步执行才是反人类。想象一下,你需要打印一叠材料:打印机开始工作后,你站在那里等着,5分钟后打印完毕,你取走材料回到办公室。这似乎没什么。但是如果有100份需要打印?10000份呢?你也站在那里干等着?还是趁这个时间喝杯咖啡,或者多写几个 if else 吧。
再者,由于js的异步特征,始终有用户代码在执行,省去了等待查询数据库和文件系统的时间,相比CPU的时钟频率,去读一次数据库太久太久,久到让CPU等得花儿都谢了。node让CPU不在等待,node让妈妈不用担心我的内存。但是这种高效运用CPU的异步回调,将会带来逻辑上的混乱,一不小心就会一团乱麻理都理不清,下文有叙。
以上两点,导致node适合在具有大量细小的http请求环境下工作,典型的就是一个web即时聊天程序,或者一个支撑上万人同时在线的游戏服务器。你甚至不用考虑http请求数太多的问题。
如果用node开发网站,你可以把数据请求分的很细,也就是说不必像php那样把所有数据一次性加载到客户端,而是加载一部分,让浏览器渲染页面的同时,再去加载另一部分。Facebook的页面优化技术(叫big...什么的,我忘了),就是这种分块加载的模式。可以让页面的加载速度在用户体验上提升5到10倍。
node无论从代码执行速度,还是开销,都是最完美的选择。但是缺点在于js异步特征的难以理解和控制,如果没有相当过硬的js开发经验和特征理解,项目稍微大一点,代码结构就会一片混乱。node是在考验一个人的代码设计和掌控能力,如同九阴真经,练的好就一身绝学独霸武林,练的不好就走火入魔精神崩溃。动不动就长达8层的回调嵌套,可不是闹着玩的。除了采用step同步方案解决控制流倒置和深层回调嵌套问题,把数据请求分得很细,再分多次加载,不仅在代码流程上更美观,也更符合node的特性。
有人说,异步代码是反人类的。其实同步执行才是反人类。想象一下,你需要打印一叠材料:打印机开始工作后,你站在那里等着,5分钟后打印完毕,你取走材料回到办公室。这似乎没什么。但是如果有100份需要打印?10000份呢?你也站在那里干等着?还是趁这个时间喝杯咖啡,或者多写几个 if else 吧。
0 0
- node.js都应用在什么项目上?这些项目为什么选择node.js
- Node.js 都应用在什么项目上?这些项目为什么选择 Node.js?
- Node.js 优秀项目
- node.js项目下载
- Node.js项目目录
- node.js的项目
- 部署Node.js项目
- 创建node.js项目
- Node.js项目搭建
- node.js的十大开源项目
- node.js创建Helloworld项目
- node.js express创建项目
- Node.js项目学习笔记
- Node.js 项目的配置文件
- 利用forever在Linux上实现Node.js项目自启动
- Node.js项目实践:构建可扩展的Web应用
- helmet是一个保护Node.JS应用的安全项目
- Node.JS 使用 Express 创建 Node.js Web 项目
- 数据结构基础7_链队的实现
- [每日一答] [20151016] MySQL中的数值函数
- Word Pattern
- stm32 位操作
- 关于kmp算法中next数组的求法【针对手算的】
- Node.js 都应用在什么项目上?这些项目为什么选择 Node.js?
- casperjs中的open()和thenOpen()使用说明
- Sql Server2014开启远程连接
- 队列的链式表示和实现
- HP Unified Functional Testing 使用【不定时更新】
- Moving Data from HDFS to Hive Using an External Table
- dfs:跳马问题
- cocos2dx 3.x 实现 A星(A*)(A-star)算法自动寻路(二)
- Bootstrap各JavaScript插件的概述