찾다
백엔드 개발파이썬 튜토리얼Node.js 与 Python 作为后端服务的编程语言各有什么优劣?

前端,但是想学习一门后端的语言,本来是想学习Node js,毕竟如果把Node作为后端语言对我前端的js的熟悉程度也是有帮助的,但是发现Node学习曲线有点陡,而且也没什么好的学习资料,而且国内Node也不是很流行,发现Python是门不错的后端语言,学习资料也多,现在我在纠结两者之间,求大神指教下?

回复内容:

@SUN Ruoyu 针对说Node不擅长CRUD这一点稍微说两句

CRUD应用和平台本身没多大关系,更多是看上层的开源库。express + (mongo + mongoose) || (node-mysql + sequelize) 开发CRUD也快得很,更关键的是Node本身异步的数据库I/O性能上比Python真的高很多。

有人说Node缺少“成熟”的大框架,其实这和Node社区的开发思想有关,几个领头的开发者都推崇“写做好一件事的小程序,然后把它们串起来”的Unix哲学,加上npm对于包之间互相依赖处理得很好,所以灵活性其实是Node的卖点之一。在我个人看来,Node并不需要像rails/django这样“大而全"的web框架。 Disclaimer: 以下对比可能有强烈的个人色彩

Node.js > Python 的地方
  1. 快:这个快有两方面,第一是V8引擎快,在V8引擎背后操刀的是Lars Bak大神,他创造过高性能SmallTalk引擎和Java Hotspot引擎(现在Java的默认VM),他带领下的V8引擎让Javascript速度达到了一个新的阶段。第二是异步执行,Node.js功能上是一个基于V8引擎的异步网络和IO Library,和Python的Twisted很像,不同的是Node.js的event loop是很底层的深入在语言中的,可以想象成整个文件在执行的时候就在一个很大的event loop里。
  2. npm:npm可以说是用起来最顺手的package management了,npm作为Node.js的官方package management,汇集了整个社区最集中的资源。不像Python经历过easy_install和pip,还有2to3的问题。
  3. Windows支持:Node.js有微软的加持,Windows基本被视为一等公民来支持,libuv已经可以很好的做到统一跨平台的API;而Python虽然也对Windows有官方的支持,但是总感觉是二等公民,时不时出些问题。
Python > Node.js 的地方
  1. 语言:就单纯从语言的角度来说,Python写起来要比Javascript舒服很多。Javascript设计本身有许多缺陷,毕竟当时设计的时候只是作为在浏览器中做一些简单任务的script,所以代码一旦庞大,维护还是有困难(不过Node.js的module很大的改善了这个问题)。不过用Coffeescript可以很大的改善Javascript,几乎可以和Python等同。
  2. 成熟:成熟包括语言本身已经成熟,还有Framework和ecosystem也很庞大。Node.js的绝大多数framework都很新,有的API一直在变,有的感觉已经不在维护,总之没有一个像Django那种百足之虫感觉的framework。Python的主流ORM SQLalchemy也很成熟。
Python 和 Node.js 很难分高下的地方
  1. 异步Style:Node.js的异步Style是CPS,也就是层层callback,基于event,和浏览器中的Javascript很像。CPS好处是让熟悉浏览器Javascript的人能很快上手,学习难度也不大。缺点是逻辑一复杂,就变得很难维护,基本上需要通过async.js这种library,或者用promise。Python的异步除了和Node.js很像的Twisted之外,也有基于coroutine的gevent,coroutine让异步代码维护起来更容易,不过学习曲线陡。
  2. 应用场景:如果是一个CRUD的app,那么想都不想直接是Python,Node.js本身不擅长CRUD的app(绝大多数Node.js都是直接裸在外面的,而不是有一个Nginx在前面,否则websocket就不能用了,不过新版nginx开始支持websocket),代码又不好维护,而Python的WSGI很适合,成熟的stack也有很多。如果更偏向于real-time,比如一个chat room,那么Node.js实现更容易。这两个应用场景还是有差别的。
个人接触过Django和少量的Node.js
也在考虑经后的web开发主要使用哪一个?
在我看来,Django更全面,开发一个完整的网站或者cms。
而Node.js的特点也很突出,但是完全用Node.js开发一个完整的网站是不划算的,我更倾向于用Node.js开发RESTful的服务端,可以解决高频率的请求,同时也避免事件嵌套的深度。
于是,有了这样的想法,Django做web的开发,在一些需要RESTful或高频请求的部分用Node.js
各自发挥其长处... 前面SUN Rouyu的回答已经很全面了。补充一句,npm和commomjs的require已经超越了一个简单的包管理工具,已经发展成为一种系统架构形式。
另外,我用CoffeeScript写Node.js,可以享受两个世界的好处。
Python虽然也有异步库,但是由于异步不是它的DNA,因此不同框架和库的实现是很不一致的。这点对Node.js来说,其异步模式已经成为99%的Modules首先要遵守的规范,这个一致性是一个健壮的后台程序所必须的。 Python的gevent带来的非阻塞IO和coroutine同步方式封装异步,足以完爆Twisted;
Nodejs的特性也就是非阻塞IO和更快语言解释器,但是基于事件编程模式更合适对用户响应方式的前端,不太合适大部分是RPC或循环方式的服务端逻辑;
现在分布式和SMP架构下 gevent多进程+coroutine+简洁的语言特性+容易C/C++性能扩展绝对是理想选择。 Node.js 的框架express 难度应该与 Python的框架 Django,Tornado,Flask等等差不多。已经熟悉了js,不如还是从Node.js入手。 性能的区别

我不觉得很多人的系统会比paypal更复杂
paypal现在全nodejs(后台BI可能还是java)

不过prototype模式构建大型代码有难度
改造成oo 编程难度和写python没区别

callback不是问题 我没用那些改造callback的js库 纯js原生方式
习惯了就好 不妨再参考下这个:

Node.js 究竟是什么?


Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码。
为试图解释什么是 Node.js,本文将简要介绍一些背景信息:它要解决的问题,它如何工作,如何运行一个简单应用程序,最后,Node 在什么情况下是一个好的解决方案。本文不涉及如何编写一个复杂的 Node 应用程序,也不是一份全面的 Node 教程。阅读本文应该有助于您决定是否应该继续学习 Node,以便将其用于您的业务。 用过python与nodejs,确实认为python的语言设计,优雅程度都比javascript好,但是实际开发中nodejs确实比python好用
nodejs几大优点:
1. nodejs的环境搭建非常方便,npm包管理也足够好用,几个命令一运行就可以了,而python环境的安装却足够痛苦
2. nodejs强制异步,io异步化,mysql异步,http请求异步,而且异步callback是javascript的天然用法,因此实际项目不用太多优化就能比python的同步mysql快很多
3. nodejs与前端统一,实际开发中不需要像python那样进行环境切换,语言切换
4. nodejs的文件系统watch功能极大的方便了测试,编译等等,很大程度上提高了开发效率
5. nodejs今天已经形成巨大的生态:npm上的库是最多的,与后端编程风格非常接近的angularjs,与watch结合的测试框架,webpack,livereload,pm2,所有这些东西对于web开发来说,都远远优于其他语言的开发
6. javascript语言的演进也渐渐让javascript变得更加好用,例如回调逐渐演变为Promise,async/await 必须是python 这里说python不太合理。
如果要对位的话,nodejs对位应该是python的tornado框架。
之前研究过百度的clouda,算是两个都接触过吧。
我重点说说tornado好了,nodejs在tornado面前优势并不大。
首先,性能
node在性能上相比tornado来说占优,但优势很小,可以说是language bonus,C++的加成。但是他们的设计思想基本类似,所以性能差距并不大,更何况如果业务处理速度慢了,吞吐量再大也是虚的。
其次,易用性
这一点基于python的tornado完胜,你可以以同步的形式写出异步代码而不需要借助一大堆回调和闭包,这对于重业务的场景来说是非常注重的,这也是node学习成本陡峭成因,而且一旦使用不好,node一大堆闭包导致的内存爆栈风险想必会折腾每个学习node的人吧。
扩展性
毫无疑问,除了lua,还没有别的语言可以说有python的扩展性便利了,对于计算密集型的业务或者功能可以轻而易举的使用C语言来自定义扩展(我甚至写过一个awk的嵌套编程)。更何况python自身还存在几何倍数于npm的扩展包(呵呵,反驳我的应该也知道,至少npm好多模块简直无法直视,你见过一个模块只有一个函数,里面就一句话的吗?高质量的库数量简直无法跟pypi比,开发门槛在那里呢,所以咬死我都不会承认npm包数量有python多,因为太多垃圾了)。并且你还可以直接对框架层面进行修改跟自定义(当然在许可证许可的条件下),重新定义引擎行为,eventloop行为,自由度高。
可维护性
无需赘言,js代码很难写出python的优雅跟风骚,而且各种callback跟闭包对可读性简直就是灾难。加上js语言本身也有很多坑。这一回合python完胜。

总之,我个人是这么个情况,如果有人拿nodejs跟tornado来说事,我一定会告诉他我非python不用。哪怕要我辞职。
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Python 학습 : 2 시간의 일일 연구가 충분합니까?Python 학습 : 2 시간의 일일 연구가 충분합니까?Apr 18, 2025 am 12:22 AM

하루에 2 시간 동안 파이썬을 배우는 것으로 충분합니까? 목표와 학습 방법에 따라 다릅니다. 1) 명확한 학습 계획을 개발, 2) 적절한 학습 자원 및 방법을 선택하고 3) 실습 연습 및 검토 및 통합 연습 및 검토 및 통합,이 기간 동안 Python의 기본 지식과 고급 기능을 점차적으로 마스터 할 수 있습니다.

웹 개발을위한 파이썬 : 주요 응용 프로그램웹 개발을위한 파이썬 : 주요 응용 프로그램Apr 18, 2025 am 12:20 AM

웹 개발에서 Python의 주요 응용 프로그램에는 Django 및 Flask 프레임 워크 사용, API 개발, 데이터 분석 및 시각화, 머신 러닝 및 AI 및 성능 최적화가 포함됩니다. 1. Django 및 Flask 프레임 워크 : Django는 복잡한 응용 분야의 빠른 개발에 적합하며 플라스크는 소형 또는 고도로 맞춤형 프로젝트에 적합합니다. 2. API 개발 : Flask 또는 DjangorestFramework를 사용하여 RESTFULAPI를 구축하십시오. 3. 데이터 분석 및 시각화 : Python을 사용하여 데이터를 처리하고 웹 인터페이스를 통해 표시합니다. 4. 머신 러닝 및 AI : 파이썬은 지능형 웹 애플리케이션을 구축하는 데 사용됩니다. 5. 성능 최적화 : 비동기 프로그래밍, 캐싱 및 코드를 통해 최적화

Python vs. C : 성능과 효율성 탐색Python vs. C : 성능과 효율성 탐색Apr 18, 2025 am 12:20 AM

Python은 개발 효율에서 C보다 낫지 만 C는 실행 성능이 높습니다. 1. Python의 간결한 구문 및 풍부한 라이브러리는 개발 효율성을 향상시킵니다. 2.C의 컴파일 유형 특성 및 하드웨어 제어는 실행 성능을 향상시킵니다. 선택할 때는 프로젝트 요구에 따라 개발 속도 및 실행 효율성을 평가해야합니다.

Python in Action : 실제 예제Python in Action : 실제 예제Apr 18, 2025 am 12:18 AM

Python의 실제 응용 프로그램에는 데이터 분석, 웹 개발, 인공 지능 및 자동화가 포함됩니다. 1) 데이터 분석에서 Python은 Pandas 및 Matplotlib를 사용하여 데이터를 처리하고 시각화합니다. 2) 웹 개발에서 Django 및 Flask 프레임 워크는 웹 응용 프로그램 생성을 단순화합니다. 3) 인공 지능 분야에서 Tensorflow와 Pytorch는 모델을 구축하고 훈련시키는 데 사용됩니다. 4) 자동화 측면에서 파이썬 스크립트는 파일 복사와 같은 작업에 사용할 수 있습니다.

Python의 주요 용도 : 포괄적 인 개요Python의 주요 용도 : 포괄적 인 개요Apr 18, 2025 am 12:18 AM

Python은 데이터 과학, 웹 개발 및 자동화 스크립팅 필드에 널리 사용됩니다. 1) 데이터 과학에서 Python은 Numpy 및 Pandas와 같은 라이브러리를 통해 데이터 처리 및 분석을 단순화합니다. 2) 웹 개발에서 Django 및 Flask 프레임 워크를 통해 개발자는 응용 프로그램을 신속하게 구축 할 수 있습니다. 3) 자동 스크립트에서 Python의 단순성과 표준 라이브러리가 이상적입니다.

파이썬의 주요 목적 : 유연성과 사용 편의성파이썬의 주요 목적 : 유연성과 사용 편의성Apr 17, 2025 am 12:14 AM

Python의 유연성은 다중 파리가 지원 및 동적 유형 시스템에 반영되며, 사용 편의성은 간단한 구문 및 풍부한 표준 라이브러리에서 나옵니다. 유연성 : 객체 지향, 기능 및 절차 프로그래밍을 지원하며 동적 유형 시스템은 개발 효율성을 향상시킵니다. 2. 사용 편의성 : 문법은 자연 언어에 가깝고 표준 라이브러리는 광범위한 기능을 다루며 개발 프로세스를 단순화합니다.

파이썬 : 다목적 프로그래밍의 힘파이썬 : 다목적 프로그래밍의 힘Apr 17, 2025 am 12:09 AM

Python은 초보자부터 고급 개발자에 이르기까지 모든 요구에 적합한 단순성과 힘에 호의적입니다. 다목적 성은 다음과 같이 반영됩니다. 1) 배우고 사용하기 쉽고 간단한 구문; 2) Numpy, Pandas 등과 같은 풍부한 라이브러리 및 프레임 워크; 3) 다양한 운영 체제에서 실행할 수있는 크로스 플랫폼 지원; 4) 작업 효율성을 향상시키기위한 스크립팅 및 자동화 작업에 적합합니다.

하루 2 시간 안에 파이썬 학습 : 실용 가이드하루 2 시간 안에 파이썬 학습 : 실용 가이드Apr 17, 2025 am 12:05 AM

예, 하루에 2 시간 후에 파이썬을 배우십시오. 1. 합리적인 학습 계획 개발, 2. 올바른 학습 자원을 선택하십시오. 3. 실습을 통해 학습 된 지식을 통합하십시오. 이 단계는 짧은 시간 안에 Python을 마스터하는 데 도움이 될 수 있습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구