検索
ホームページバックエンド開発Python チュートリアル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 vs. C:重要な違​​いを理解しますPython vs. C:重要な違​​いを理解しますApr 21, 2025 am 12:18 AM

PythonとCにはそれぞれ独自の利点があり、選択はプロジェクトの要件に基づいている必要があります。 1)Pythonは、簡潔な構文と動的タイピングのため、迅速な開発とデータ処理に適しています。 2)Cは、静的なタイピングと手動メモリ管理により、高性能およびシステムプログラミングに適しています。

Python vs. C:プロジェクトのためにどの言語を選択しますか?Python vs. C:プロジェクトのためにどの言語を選択しますか?Apr 21, 2025 am 12:17 AM

PythonまたはCの選択は、プロジェクトの要件に依存します。1)迅速な開発、データ処理、およびプロトタイプ設計が必要な場合は、Pythonを選択します。 2)高性能、低レイテンシ、および緊密なハードウェアコントロールが必要な場合は、Cを選択します。

Pythonの目標に到達する:毎日2時間のパワーPythonの目標に到達する:毎日2時間のパワーApr 20, 2025 am 12:21 AM

毎日2時間のPython学習を投資することで、プログラミングスキルを効果的に改善できます。 1.新しい知識を学ぶ:ドキュメントを読むか、チュートリアルを見る。 2。練習:コードと完全な演習を書きます。 3。レビュー:学んだコンテンツを統合します。 4。プロジェクトの実践:実際のプロジェクトで学んだことを適用します。このような構造化された学習計画は、Pythonを体系的にマスターし、キャリア目標を達成するのに役立ちます。

2時間の最大化:効果的なPython学習戦略2時間の最大化:効果的なPython学習戦略Apr 20, 2025 am 12:20 AM

2時間以内にPythonを効率的に学習する方法は次のとおりです。1。基本的な知識を確認し、Pythonのインストールと基本的な構文に精通していることを確認します。 2。変数、リスト、関数など、Pythonのコア概念を理解します。 3.例を使用して、基本的および高度な使用をマスターします。 4.一般的なエラーとデバッグテクニックを学習します。 5.リストの概念を使用したり、PEP8スタイルガイドに従ったりするなど、パフォーマンスの最適化とベストプラクティスを適用します。

PythonとCのどちらかを選択:あなたに適した言語PythonとCのどちらかを選択:あなたに適した言語Apr 20, 2025 am 12:20 AM

Pythonは初心者やデータサイエンスに適しており、Cはシステムプログラミングとゲーム開発に適しています。 1. Pythonはシンプルで使いやすく、データサイエンスやWeb開発に適しています。 2.Cは、ゲーム開発とシステムプログラミングに適した、高性能と制御を提供します。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Python vs. C:プログラミング言語の比較分析Python vs. C:プログラミング言語の比較分析Apr 20, 2025 am 12:14 AM

Pythonはデータサイエンスと迅速な発展により適していますが、Cは高性能およびシステムプログラミングにより適しています。 1. Python構文は簡潔で学習しやすく、データ処理と科学的コンピューティングに適しています。 2.Cには複雑な構文がありますが、優れたパフォーマンスがあり、ゲーム開発とシステムプログラミングでよく使用されます。

1日2時間:Python学習の可能性1日2時間:Python学習の可能性Apr 20, 2025 am 12:14 AM

Pythonを学ぶために1日2時間投資することは可能です。 1.新しい知識を学ぶ:リストや辞書など、1時間で新しい概念を学びます。 2。練習と練習:1時間を使用して、小さなプログラムを書くなどのプログラミング演習を実行します。合理的な計画と忍耐力を通じて、Pythonのコアコンセプトを短時間で習得できます。

Python vs. C:曲線と使いやすさの学習Python vs. C:曲線と使いやすさの学習Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)