Java Python 和Nodejs在web开发方面的简单比较

对语言之间优点这个问题,能够写几本书来具体阐述. 我尝试简单地说一点。不见得对,也不可能完整,仅供参考。前端

互联网兴起,静态页面不能知足复杂的交互需求. 出现了动态技术.
史前时期动态Web 开发多采用CGI 技术来实现.
CGI 将脚本做为单独的进程运行, 每一个请求都使用环境变量、标准输入和标准输出来与它 "通讯 "。
这是种互对低效的运行方式. 出现了相似isapi, ASP 这样技术(ASP 1.0 发布于1996年12月, 做为 IIS 3.0的一部分). 方便多了,有了session管理, 有了内置对象.
但也有明显缺点,代码与页面混在一块儿.node

接下来提出Servlet标准,参考实现是Tomcat.
Tomcat的做为Servlet 规范一个开源的参考实现, 最初是Sun公司在1998年11月发布的. 核心人物是 James Duncan Davidson.
Tomcat 3.0合并了Sun捐赠的Java Web Server代码, 这个版本实现了Servlet 2.2和JSP 1.1规范.
目前由Apache软件基金维护.python

它是一个开放的标准,引起了当时的一些开发热潮,
产生了大量的中间件,也称为应用服务器, 如WebSphere, WebLogic, GlassFish, JBoss, Jetty, Resin,金蝶的Apusic. 这里面有的是完整实现了J2EE标准.如WebLogic:
标准具体有,Servlet, JSP, EJB, JDBC, Java Message Service, JTA, XML相关, JAAS 等等.
有的只是一小部分实现,如Tomcat:只有Servlet, JSP, Java EL, JNDI等.
对企业开发来讲,这样的标准有诸多的好处,解决了不少须要重复解决的问题,如消息队列,分布式事务等等. 应用只需根据接口开发就能够了,实现由应用服务器来完成.
由于复杂,太重,适合中等以上团队开发.ajax

Tomcat/Servlet的体系之因此这么设计,基于几点考虑:算法

方便扩展
遵循标准化定义
保持版本间的兼容性
好处是稳定,值得依赖,不会为个别商业机构左右.
很差的是地方是升级相对慢, 与nodejs社区的飞速发展相比, Java显得沉重而缓慢.
但这何尝不是好事, 对于开发人员来讲, 这是很是好的长效投资. 保证工做经验的积累是有效的, 而不是忽略业务追逐技术去适应迎接不暇的新版本.
Python 2到Python 3的过渡便是断堐式的. 而Java最先的代码仍能够跑在今天的虚拟机上.
Node.js也存在不少版本间的问题, 但由于是脚本,而不是编译,出错时不会告诉你是版本的是问题, 而是报告各类奇怪的异常. 固然,这是题外话了.数据库

Tomcat 内部的体系结构
Tomcat 有很是优秀的结构定义
核心部分有:
Catalina - 实现Servlet API
Coyote - HTTP协议栈
Jasper - JSP 动态编译器及加载器, 负责把JSP页面编译成Servletjson

能够看出以上所有的核心是 Servlet 规范.后端

做为互联网的基础设施,Tomcat历经20年,没有本质上改动, 可见当初设计才的洞见.api

能够与其媲美的有估计只有以太网口的设计, HTTP的设计, TCP/IP 的设计,USB接口的设计.tomcat

Tomcat 的配置项与代码隔离, 我的认为这是Tomcat设计最精良的地方
你能够在不改代码的前提下,对tomcat各个层面环节进行配置,从而实现多种协议多种特性的支持

与Python和Nodejs的Web Server的比较

都遵循HTTP/1.0 and HTTP/1.1 协议
但用Java写的Web 应用支持更高层的Servlet 接口, 能够在不一样应用服务器中运行,不须要对代码进行调整,
Python和Nodejs都有不少Web Server的实现, 但这些Servers之间显然没有更高层次的抽象, 如须要切换,须要作大量改动和测试.
假设在你Server A 上作开发, 突然发现Server B 上有你想的的特性, 你只有大幅改动才行.

Python 下的Web服务器, 核心标准 WSGI

Python 下也有不少Web Server 软件,如CherryPy WSGI Server, Gunicorn, Tornado, Twisted Web, uWSGI, Waitress WSGI Server等等.

这个服务器都支持[WSGI]2规范.
须要指出的是WSGIv1.0.1出现的时间是: 26-Sep-2010, 比Java相应规范晚了十多年. 出来时已是群雄混战,想统一已经很难了,
也使得WSGI 是一个相对简单,容易实现的规范, 以此来吸引服务器开发者. 在此以前则是 CGI, FastCGI, mod_python三分天下的局面.

Node.js下的Web服务器:light-server, live-server ,lite-server, http-server
基本以轻量级的静态文件服务器为主。

总结一下

名称 Java Python Node.js典型的WebServer Tomcat Tornado http-server标准 Servlet WSGI 无服务器端模板 JSP,Freemarker tornado.template CoffeKup, Swig, Jade典型 Web框架 Spring MVC Flask, Django Express数据库相关 JDBC, Hibernate SQLAlchemy Moogoose多线程与分布式 容易 不清楚 不清楚日志 Log4j, Slf4j 不清楚 不清楚远程调试 容易 不清楚 不清楚结论:各有优点,如Nodejs配合前端模板技术如Vue.js采用先后端分离的json/ajax做为数据格式在一些场景下颇有吸引力。Python在作数据分析和人工智能方面也有不少能够直接使用的算法库。Java的优点更在于一应俱全。各方面都能找到优秀的组件。但开发起来复杂一些,更适合有必定规模的团队采用。

相关文章
相关标签/搜索