Java 与 Python Web 开发不完全对比

Java 与 Python Web 开发不完全对比

本文比较 Java 与 Python 在 Web 开发时的差异,基于 Python 3.10、Flask 3.x 与 Java 21、spring boot 3.x 的不完全比较。因为 Java 使用时长不超过三个月,所以在比较时可能会有一些偏见,还请海涵。

本文是基于个人经验给出的结论,不承担任何责任。

Java 语言与 Python 语言开发比较

上手难度

新手在学习一门语言时,会需要考虑许多的问题,例如流行程度、运行速度、上手难度。

  • 一般能够耳熟能详的编程语言,流行度都是不差的,Python 与 Java 一直也都是编程行业的常青树,没有什么可以比较的。
  • 在 CPU 密集型任务下,Java 运行速度比 Python 快一百倍左右。(当在 IO 密集型任务下,程序的运行速度主要在于 IO 的阻塞时间,这个值就只能当做参考了)。如果把系统级语言(C、C++、Rust)当做第一梯队,Java、Go 应该是第二梯队的顶流,而 Python 应该作为第三梯队。但是在这里需要考虑一个问题,那就是很多 Python 库底层都会用 C/C++ 进行优化,实际运行速度并不差。这几年 Python 解释不断优化运行速度,并且由于 Rust 语言的发展,Python 项目的运行速度还在进一步提升。所以给一个及格线。
  • 上手难度是新手最容易忽略的。Python 语言非常容易学,只要年龄合适,就可以学习(初中就可以开始)。Java 则是一门专业语言,主要面对专业人士,一般是从大学开始学。Python 学习难度应该是最简单的,很多人连英语都不怎么会,但是会 Python,就能说明一个问题,所以给 10 分。Java 的学习难度并不小, 如果给 C 语言及格线,Java 可以给到 7 分。(低于及格线的就是一些小众语言了,例如 lisp)。

内置工具

内置工具是语言自带的模块、特性,例如系统操作、文件操作、时间日期等。

Python 提供了很多的内置模块,可以非常方便的操作这些东西,所以我给满分 10 分。

Java 虽然也提供了一些工具,但是我用起来觉得很麻烦,很多都要靠拓展工具用起来才方便,给个及格分 6 分吧。

拓展工具

拓展工具主要是指语言的生态。因为本文是讲 Web 开发,所以就不比较爬虫、数据科学、运维相关的工具了。

Java 在国内的 Web 开发市场,应该算是独占鳌头。因为阿里的带动,大部分公司都采用 Java 作为 Web 开发的后端,并且生态非常完善,尤其是 spring 框架,给 10 满分。

Python Web 开发在国内并不流行,使用的大多数都是中小公司。但是站在全球的角度来看,这个份额大概是 Java 的三分之一。但是考虑到国内的情况,给个 8 分吧。

Flask 3.x 与 spring boot3 框架比较

框架本身

flask 与 spring boot 都是微框架,flask 是本身就小,而 spring boot 是约定之后变的很小。

spring boot3 包括了 Servlet、spring framework,崇尚的是约定大于配置,使用起来很舒服,开发也很方便。但是框架里面,对于大部分开发者来说都是一个黑盒,东西很多、源码阅读起来也不方便,所以给及格分 6分 吧(但确实很好用)。

flask 框架核心仅以来 Werkzeug 与 jinja2 ,如果只是像 spring boot 一样开发 restful api,那 jinja2 都可以弃用,就只剩下了一个以来。所以学习起来非常轻松,只需要学习 Web 相关的逻辑,没有太多的框架知识,给满分 10 吧(如果是 Django 我给 8)。

框架拓展

spring 全家桶真的非常好用,各种拓展插件用起来很舒服,满分 10 分我可以给到 12 分。

flask 的插件就相对较少了,但是由于框架本身很小,很多工具直接进行集成就可以了。综合考虑给 8 分。

学习成本

spring boot3 的学习成本比较高,需要从 java、Servlet、spring framework 一步一个脚印走过来才比较好。各种拓展插件,需要阅读源码,才能比较方便的使用,给 6 分。

flask 核心很小,学习起来非常方便,实现功能也很简单。拓展工具一般比较简单,学习也方便,给 10 分。

使用场景对比

开发速度

spring boot3 + jpa + spring security(JWT) 的方案开发速度还是很方便,集成日志、缓存等功能也比较方便。idea 的热更新还行,但是启动速度实在太慢(相对 flask 来说)。并且语言本身比较繁琐,会进一步拖累开发速度。

flask + flask-sqlalchemy + flask-jwt-extended 开发速度很快,并且很简单。如果想集成日志、缓存需要自己定义插件,实现也比较方便,但是对开发人员造轮子的能力有一定的要求。由于是动态语言的原因,启动速度、调试速度没得说。

对于我来说,java 的开发速度应该要比 Python 慢 3 - 10 倍左右,应该也有我对 Python 语言更加熟练的原因。但是 Java 的重新编译、启动速度,也比较长,尤其是项目变得庞大之后。在这一方面,综合考虑,如果对语言同等的熟练程度下,Python 比 Java 开发速度快 2 - 6 倍还是比较正常的。

运行速度

根据 web-frameworks-benchmark.netlify.app/result?f=fl... 网站上的比较,spring boot3 比 flask 的运行速度快 26 倍左右。如果开发了同样的一个 web 程序,默认情况下,flask 的并发数上限是每秒 1 870,spring boot 则是 49 761。但其实不管是一千多还是五万,对于很多网站来说都是够了。如果在程序内部进行优化,是比较容易突破这个限制的。

语言生态

如果单说 web 开发,spring boot 的生态更加完善一些,各种解决方案都有。flask 生态其实还不错,大多数的解决方案都有,但是没有 spring boot 那么完善。但是 flask 有 Python 语言生态的加持。

总结

flask 与 spring boot 开发各自有各自的优点,并没有那个好那个不好,主要看使用场景。如果是没有资源、需要开发速度,则采用 flask 可以节约成本。如果考虑高并发、需要项目的质量,那就采用 spring boot。既想要比较快的开发速度,有想要高性能、高质量,完全可以先用 flask 做原型开发,确定了之后再用 spring boot 开发一次,所需要的成本并不会高出太多。

附录-参考

多语言横向对比 Python 有多慢?: juejin.cn/post/707300...

flask 与 spring boot 运行速度比较: web-frameworks-benchmark.netlify.app/result?f=fl...

服务器使用的语言比较: Usage statistics of server-side programming languages for websites

相关推荐
Tech Synapse2 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
.生产的驴3 分钟前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构
微信-since8119218 分钟前
[ruby on rails] 安装docker
后端·docker·ruby on rails
代码吐槽菌2 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
豌豆花下猫2 小时前
Python 潮流周刊#78:async/await 是糟糕的设计(摘要)
后端·python·ai
YMWM_2 小时前
第一章 Go语言简介
开发语言·后端·golang
码蜂窝编程官方3 小时前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
hummhumm3 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
J老熊3 小时前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
AuroraI'ncoding3 小时前
时间请求参数、响应
java·后端·spring