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

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

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


互联网兴起,静态页面不能满足复杂的交互需求. 出现了动态技术.

史前时期动态Web 开发多采用CGI 技术来实现.


CGI 将脚本作为单独的进程运行, 每个请求都使用环境变量、标准输入和标准输出来与它 "通信 "。


这是种互对低效的运行方式. 出现了类似isapi, ASP 这样技术(ASP 1.0 发布于1996年12月, 作为 IIS 3.0的一部分). 方便多了,有了session管理, 有了内置对象.

但也有明显缺点,代码与页面混在一起.


接下来提出Servlet标准,参考实现是Tomcat.

Tomcat的作为Servlet 规范一个开源的参考实现, 最初是Sun公司在1998年11月发布的. 核心人物是 James Duncan Davidson.


Tomcat 3.0合并了Sun捐赠的Java Web Server代码, 这个版本实现了Servlet 2.2和JSP


1.1规范.

目前由Apache软件基金维护.

它是一个开放的标准,引发了当时的一些开发热潮,

产生了大量的中间件,也称为应用服务器, 如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等.

对企业开发来说,这样的标准有诸多的好处,解决了很多需要重复解决的问题,如消息队列,分布式事务等等. 应用只需根据接口开发就可以了,实现由应用服务器来完成.

因为复杂,过重,适合中等以上团队开发.


Tomcat/Servlet的体系之所以这么设计,基于几点考虑:

方便扩展

遵循标准化定义

保持版本间的兼容性

好处是稳定,值得依赖,不会为个别商业机构左右.

不好的是地方是升级相对慢, 与nodejs社区的飞速发展相比, Java显得沉重而缓慢.

但这未尝不是好事, 对于开发人员来说, 这是非常好的长效投资. 保证工作经验的积累是有效的, 而不是忽略业务追逐技术去适应迎接不暇的新版本.

Python 2到Python 3的过渡即是断堐式的. 而Java最早的代码仍可以跑在今天的虚拟机上.

Node.js也存在很多版本间的问题, 但因为是脚本,而不是编译,出错时不会告诉你是版本的是问题, 而是报告各种奇怪的异常. 当然,这是题外话了.


Tomcat 内部的体系结构

Tomcat 有非常优秀的结构定义

核心部分有:

Catalina - 实现Servlet API

Coyote - HTTP协议栈

Jasper - JSP 动态编译器及加载器, 负责把JSP页面编译成Servlet

可以看出以上全部的核心是 Servlet 规范.

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

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


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的优势更在于包罗万象。各方面都能找到优秀的组件。但开发起来复杂一些,更适合有一定规模的团队采用。

相关文章
|
9天前
|
前端开发 Java 程序员
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
35 6
|
18天前
|
JSON 安全 中间件
Python Web 框架 FastAPI
FastAPI 是一个现代的 Python Web 框架,专为快速构建 API 和在线应用而设计。它凭借速度、简单性和开发人员友好的特性迅速走红。FastAPI 支持自动文档生成、类型提示、数据验证、异步操作和依赖注入等功能,极大提升了开发效率并减少了错误。安装简单,使用 pip 安装 FastAPI 和 uvicorn 即可开始开发。其优点包括高性能、自动数据验证和身份验证支持,但也存在学习曲线和社区资源相对较少的缺点。
55 15
|
12天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
31 5
|
12天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
24 4
|
12天前
|
SQL Java API
|
12天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
27 2
|
2月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
24天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
2月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
89 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
138 13