我的编程空间,编程开发者的网络收藏夹
学习永远不晚

为什么node.js不适合大型项目

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

为什么node.js不适合大型项目

前言

首先要明确什么是大型应用,其实这是仁者见仁、智者见智的问题,并且它是一个哲学问题,不是一个技术问题。假如有人问你,一个可以进行线上销售的网站,比如优衣库,大不大?你可能会说大,因为这与你平常所见的博客、企业官网等逻辑相比较确实复杂很多。或者说小,那么说明你开发过比它还复杂的系统。那么相比较淘宝而言呢?大和小的对比是要有参照物的。

1. 应用的组成

一个完备的 Web 应用可能只由一门语言或者一种技术构成吗?不可能。因为一个完备的 Web 应用其实是多门技术的综合体,解决某个问题有非常多的解决方案,比如后端的逻辑解决方案就非常多,Java、php、Python、Ruby 等都可以。

简单地概述,应用的组成内容可能包括:

Web 界面显示逻辑;后端业务逻辑;缓存;数据库;消息队列。

其实还可以加入日志分析、数据分析等,只是上面几个最广为人知而已。

2. 应用的种类

I/O 密集型;CPU 密集型。

就常见的互联网产品而言,它的瓶颈并非在后端业务的逻辑上,而是在 I/O 上,即返回给用户看的数据的读入与输出。相对于应用程序而言,读入指的是从数据库里获取数据,而输出指的是将这些数据经过一定的处理输出到用户的浏览器,那么这就是 I/O 密集型。

而CPU密集型是指做频繁计算任务的应用,Node.js在这方面确实是短板。

3. 应用服务的过程

如图所示,用户通过浏览器发送请求,由网卡接收TCP 连接,通知内核,内核再去调用相对应的服务端程序。

Request 请求过程

Response 返回过程

如下图,Web 应用要返回数据,首先要获取数据,通过内核调用磁盘的驱动程序,把数据读入缓存,这样就可以在 Web 应用程序中获取数据并进行数据处理,最终调用内核,将数据通过网卡发送给客户端。

4. 应用的瓶颈

通常 I/O 密集型的瓶颈会在磁盘的读写上,所以在购买云服务器的时候可以购买 SSD 的磁盘来提升性能,一般数据库软件的数据都是存储在文件上面的。首先考虑添加内存型缓存来解决这个瓶颈,缓存经常访问的数据,看能否解决当前场景的问题,比如使用 Redis。其次才考虑搭建或扩充数据库集群来提高并发。

而 CPU 密集型的应用瓶颈则在 CPU 上,只能增加 CPU 处理核心来解决瓶颈。

5. 分布式应用

大型的普通应用与分布式应用其实是不同的概念。读者可以把分布式应用简单地理解为一个团队,每一个成员都是一个节点,一个大的项目要让成员合作完成,那么成员与成员之间就存在一些沟通成本,甚至有的成员与成员之间勾心斗角,说话阳奉阴违、推脱责任,也有可能成员生病在家休养,无法工作,等等。在面对这些问题的时候,Node.js的优势并不能很好地显现出来(并非不可以做,只是没有完善的基础设施)。

分布式的真正定义是,在多台不同的服务器中部署不同的服务模块,以进程为基本单位,派发到服务器上,通过远程调用(RPC)通信并协同工作,最终对外提供服务。

相比较Node.js目前的分布式基础设施,Go 语言的基础设施则完善多了,特别是在 Docker 这个项目上,充分证明了 Go 语言的优势,这也是为什么 Node.js 社区“大牛”TJ Holowaychuk 转向 Go 语言,因为他要开发分布式应用。

其实没必要过分地关心分布式的问题,毕竟JavaScript最初只是一个运行在浏览器端的脚本语言而已,JavaScript不是万能的,为什么一定要把它用在操作系统级别的开发上呢?寻找一个更合适的语言不是更好吗?就像此刻我们选择 JavaScript 构建 Web 应用一样。

6. 多进程的 Node.js

了解了以上的一些知识点,现在读者应该知道,Node.js 跟大型应用关系不大。大多数学习 Node.js 的开发者是前端开发者,所以对后端的基础知识并不了解,在网络上搜寻一些资料的时候发现 Node.js 只能利用单核,而又听说 TJ Holowaychuk 转向 Go 的阵营,所以有的开发者就产生了Node.js不适合开发大型应用的疑问。

Node.js 只能利用单核的问题已经被解决了,后面使用的 Egg.js框架中的 Egg-Cluster 模块就利用多进程非常好地解决了这个问题。

以上就是为什么node.js不适合大型项目的详细内容,更多关于node.js的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

为什么node.js不适合大型项目

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

node.js不适合大型项目的原因是什么

这期内容当中小编将会给大家带来有关node.js不适合大型项目的原因是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 应用的组成一个完备的 Web 应用可能只由一门语言或者一种技术构成吗?不可能。
2023-06-14

Slim vs Phalcon:哪个微框架更适合大型项目?

对于大型项目,性能至关重要,而 phalcon 凭借其 c 语言扩展,在处理速度上优于纯 php 的 slim。此外,phalcon 提供了更广泛的功能(包括 orm、验证、缓存),并具有更强大的依赖注入容器,便于扩展。因此,在性能、功能和
Slim vs Phalcon:哪个微框架更适合大型项目?
2024-05-21

go语言适合做什么项目

go语言适合做服务器端开发、网络编程、云平台和分布式系统、数据处理和数据库操作、系统工具开发、游戏服务端开发等项目。详细说明:1、服务器端开发,Go语言具有高效的处理并发请求的能力,可以处理大规模的并发请求,并具有较低的内存开销,非常适合用
go语言适合做什么项目
2023-12-11

c语言适合做什么项目

c 语言适合用于操作系统的内核、设备驱动程序和嵌入式系统等项目,还适用于网络编程、图形编程、数据库系统、机器学习、高性能计算、游戏开发、网络安全和媒体处理。C 语言适用的项目C 语言是一种通用的编程语言,凭借高效和低级功能,非常适合以下类
c语言适合做什么项目
2024-04-13

Laravel 和 CodeIgniter 中哪一个更适合大型项目开发?

在大型项目开发中,laravel 和 codeigniter 的选择取决于具体需求。laravel 采用 mvc 架构,更适合复杂应用程序,功能丰富;codeigniter 采用 mvr 模型,性能优异。laravel 学习曲线较陡,适用于
Laravel 和 CodeIgniter 中哪一个更适合大型项目开发?
2024-05-12

Go语言适合开发大型项目的原因与限制

Go语言在近年来逐渐流行起来,被越来越多的开发者用于开发各种规模的项目。在这篇文章中,我们将探讨Go语言适合开发大型项目的原因以及可能的限制,并通过具体的代码示例来展示其特点。一、Go语言适合开发大型项目的原因:并发编程支持:Go语言内置
Go语言适合开发大型项目的原因与限制
2024-03-10

为什么Rust不适合开发Web API

这篇文章主要讲解了“为什么Rust不适合开发Web API”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么Rust不适合开发Web API”吧!Rust 是一门神奇的编程语言,有非常好的
2023-06-15

开发维护大型Java项目的建议有什么

本篇文章为大家展示了开发维护大型Java项目的建议有什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码
2023-06-17

为什么不建议在go项目中使用init()

前言 go的 init函数给人的感觉怪怪的,我想不明白聪明的 google团队为何要设计出这么一个“鸡肋“的机制。实际编码中,我主张尽量不要使用init函数。 首先来看看 init函数的作用吧。 init() 介绍 init()与包的初始化
2022-06-07

香港服务器为什么不合适用于广告联盟

香港服务器可能不适合用于广告联盟的原因有以下几点:速度问题:香港服务器可能会受到网络连接速度较慢的影响,导致广告联盟的网页加载速度较慢,影响用户体验。防火墙问题:香港服务器可能会受到严格的网络防火墙限制,导致广告联盟的广告内容无法正常显示或
香港服务器为什么不合适用于广告联盟
2024-04-22

哪种服务器配置适合处理大规模数据?为什么?

哪种服务器配置适合处理大规模数据?大规模数据处理要求高性能的硬件和优化的软件环境。在选择适合的服务器配置时,需考虑诸多因素,包括计算能力、存储容量、数据吞吐量、可扩展性和成本效益等。经过深入分析和比较,以下是适合处理大规模数据的服务器配置。
哪种服务器配置适合处理大规模数据?为什么?
2024-01-24

在大型 PHP 项目中使用函数的最佳实践是什么?

在大型 php 项目中使用函数的最佳实践包括:按照功能组织函数,使用有意义的名称。使用类型提示明确输入和输出类型,包括 null 值。保持函数短小,适当地注释,避免重复代码。利用静态变量和闭包优化性能。使用内置函数和库以提高效率。示例:计算
在大型 PHP 项目中使用函数的最佳实践是什么?
2024-05-01

软考作用不大为什么要去考?软考考试的目的是什么

软考(软件考试)虽然在某些情况下可能被一些人认为作用不大,但实际上,它对于从事计算机软件和相关行业的专业人士来说,具有多方面的意义和价值。软考考试的目的是什么?具体请见下文。
软考作用不大为什么要去考?软考考试的目的是什么
2024-09-04

C++ 函数在大型 GUI 项目中的可重用性和扩展性优势是什么?

c++++ 函数在大型 gui 项目中通过封装代码和允许代码重用,提供了可重用性和扩展性优势:可重用性:封装常见任务的函数可以消除冗余并减少维护工作量。扩展性:支持添加新功能或修改现有函数,以根据需要扩展项目 gui。实战案例:在大型 gu
C++ 函数在大型 GUI 项目中的可重用性和扩展性优势是什么?
2024-04-28

编程热搜

目录