node.js가 JS로 작성되고 Tornado로 Python으로 작성된다는 사실 외에, 둘 사이의 차이점은 무엇입니까? 둘 다 비 차단 비동기 웹 서버입니다. 맞죠? 언어 외에 다른 것을 선택하는 이유는 무엇입니까?
답변:
node.js의 가장 큰 장점은 모든 라이브러리가 비동기 적이라는 것입니다. 이므로 차단에 대해 많이 걱정할 필요가 없다는 것입니다. mysql, postgres, redis 등에 대한 비동기 라이브러리가 있습니다. 모두 기본적으로 비동기입니다.
Python에는 모든 것을위한 라이브러리가 있지만 대부분의 라이브러리는 비동기식이 아닙니다. 토네이도를 이용하려면 (프로세스를 차단하지 않고) 특수 라이브러리가 필요합니다 (예 : 'pip install redis'만 사용할 수없고 brukva 와 같은 것이 필요합니다 ). node.js 라이브러리보다 토네이도 라이브러리. 예를 들어, 현재 사용할 수있는 비동기 mysql 토네이도 드라이버가 없습니다 (또는 적어도 나는 그것을 알지 못합니다).
그러나 토네이도 (i / o를 수행하지 않는 라이브러리)와 함께 많은 파이썬 라이브러리를 계속 사용할 수 있으며 토네이도 커뮤니티는 격차를 늘리고 메우고 있습니다.
내 경험상 토네이도를 사용하는 것보다 node.js를 사용하여 앱을 작성하는 것이 더 쉽습니다. 필자는 Python 프로젝트의 기존 인프라에 더 잘 맞기 때문에 node.js에서 tornado로 전환했습니다 (html 페이지를 제공하는 django 사이트와 실시간 기능을 제공하는 tornado 서버 간의 통합은 매우 고통스럽지 않았습니다).
Rich Bradshaw가 지적했듯이 Node.js 는 JS로 작성 되었으므로 프런트 엔드와 백 엔드를 동일한 언어로 유지하고 일부 코드베이스를 공유 할 수 있습니다. 나에게 그것은 Node.js 의 엄청난 잠재적 인 이점입니다 . Node는 또한 상자에서 나오는 더 많은 비동기 라이브러리를 제공합니다.
V8은 적어도 벤치 마크가 제안하는 것처럼 JS를 Python보다 빠르게 만들어야 하지만 Node.js 와 Tornado (및 그 문제에 대한 대부분의 다른 웹 프레임 워크) 모두 네이티브 라이브러리 용 래퍼를 사용 하기 때문에 중요하지 않을 수 있습니다 . 많은 Python 표준 라이브러리가 C로 작성되거나 더 빠른 대안으로 대체 될 수 있으므로 잠재적 인 차이를 훨씬 더 완화 할 수 있습니다.
웹 서비스는 일반적으로 I / O 바운드이므로 데이터를 처리하지 않고 데이터 저장소를 기다리는 데 시간을 소비합니다. 이는 많은 애플리케이션에서 JS와 Python의 합성 속도 차이를 무의미하게 만듭니다.
node.js는 어셈블리 코드로 컴파일되는 V8을 사용하지만 tornado는 아직 그렇게하지 않습니다.
그 외에는 (실제로 속도에 큰 차이가없는 것 같음) 생태계입니다. JS의 이벤트 모델을 선호합니까, 아니면 Python이 작동하는 방식을 선호합니까? Python 또는 JS 라이브러리를 사용하는 것이 더 만족 스럽습니까?
Nodejs는 또한 Socket.io라는 웹 소켓의 원활한 통합 / 구현을 가지고 있습니다. 소켓-이벤트를 지원하는 브라우저를 처리하고 이전 브라우저에 대한 역방향 폴링 호환성도 제공합니다. 알림 프레임 워크 또는 유사한 이벤트 기반 프로그래밍이 필요한 개발이 매우 빠릅니다.
파이썬에 대한 개인적인 환경이 없다면 NodeJS를 사용하는 것이 좋습니다. 나는 Python을 많이 좋아하지만 비동기의 경우 노드 대신 Tornado를 선택하고 나중에 작업을 수행하는 방법이나 비동기 지원이있는 라이브러리를 찾는 데 어려움을 겪어야했습니다 (예 : Cassandra는 테스트에서 비동기를 사용하지만 cqlengine을 사용할 수있는 방법을 찾을 수 없습니다. async. 이미 마감 시간을 초과했기 때문에 Mongo를 선택해야했습니다). 성능 및 비동기 측면에서 노드는 토네이도보다 훨씬 좋습니다.