node.js适合什么网站?
节点的特征:
它是一个Javascript运行时环境。
依靠Chrome V8引擎进行代码解释
事件驱动
非阻塞输入输出
轻量级和可伸缩性,适合实时数据交互应用。
单一进程、单一线程
NodeJS的缺点:
1.不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要有:由于JavaScript单线程,如果有长时间运行的计算(比如大循环),CPU时间片不会释放,后续I/O不会发起;
解决方案:将一个大的操作任务分解成几个小的任务,使操作能够及时释放,而不会阻塞I/O调用的发起;
2.只支持单核CPU,不能充分利用CPU。
3.可靠性低,一旦代码某个环节崩溃,整个系统崩溃。
原因:单进程、单线程
解决方案:
(1)Nnigx反向代理,负载均衡,开放多个进程,绑定多个端口;
(2)启动多个进程监听同一个端口,使用集群模块;
4.开源组件库质量参差不齐,更新快,向后不兼容。
5.调试不方便,错误中也没有堆栈痕迹。
NodeJS的应用场景:
实时应用:如在线聊天、实时通知推送等(如socket.io)。
分布式应用:通过高效的并行I/O使用现有数据。
工具应用:大量的工具,从前端压缩部署(比如grunt)到桌面图形界面应用。
游戏应用:游戏领域对实时性和并发性要求较高(如网易的pomelo框架)。
NodeJS不适合这个场景:
对于CPU使用量大,IO使用量小的应用,比如视频编码,人工智能,Node.js的优势发挥不了一个简单的Web应用。这些应用的特点是流量低,物理架构简单,Node.js无法提供像Ruby的Rails或者Python的Django这样强大的框架。