typescript 后端选型:

Express &Typescript &trpc 广泛使用,灵活,快速,稳定
Nestjs 企业级,标准化,像java ,依赖注入,
Hono , web standards framework. Support for any JavaScript runtime.


思考:

最近我和几个用Go和Java/Kotlin写后端的开发者聊过。他们说TypeScript差远了,Go和Java/Kotlin才是真正的现代后端语言。但是当我问到具体原因时,他们却很难说出什么具体的来。他们声称,例如,这些语言的工具比TypeScript要好。

我过去在前端编程(React)中大量使用过TypeScript,并没有用它做过很多后端开发。但我认为TypeScript 是一门强大的语言,它非常灵活,而且有类型系统。我对后端工具不太熟悉,所以他们在这点上可能是对的。

但是当涉及到微服务时,我看不出使用Go/Kotlin比TypeScript有什么优势。你只需要用一个Docker容器,做一个Express的endpoint,就完事了。

另外,我认为在后端使用TypeScript的优势在于,你可以用同一种语言做前后端,这对小型公司/初创公司特别有用,因为它们通常拥有更多全栈开发者,而不是严格区分前后端开发者。


TypeScript本身比前端更适合后端领域,因为你的类型更多的是围绕领域逻辑而不是DOM。所以从这个意义上说,它真的很好。

很多人吹捧Go,我在一些大量使用Go的地方工作过,但我个人始终无法接受它在美学上的丑陋。我几乎在各个方面都更喜欢Rust。

这里有很多关于性能的讨论,但是取决于你的领域,你可能不会注意到区别。如果你使用的是现代基础设施,例如无服务器架构,那么TypeScript在很多用例中实际上性能更好——例如HTTP API。如果你受限于更传统的选项,例如Docker,那么TypeScript可能不是最佳选择。

如果你已经熟练掌握了TS和TS工具,那么在后端使用它完全没问题。但我个人讨厌Express和其他Node生态系统的框架,所以我需要补充一点,如果我不能使用Lambda/无服务器生态系统,我会避免使用TS。

TS比Java/C#最大的优势在于它默认情况下不是面向对象的语言。当然,你可以将TS与OOP一起使用,但是能够自由地编写操作数据的自由函数非常令人解放。我不再想把所有东西都塞进一个类里了。

还有其他优点。例如,我们运行微服务和微前端。对于使用全栈TypeScript的团队来说,这意味着他们的服务可以是一个小型单体仓库,其后端和前端在同一个仓库中共享API契约类型。我想,那些在后端使用C#的团队必须做其他事情,例如契约测试。

然后还有测试框架、ESLint、IDE配置等等。能够停留在相同的工具集中是很好的。

老实说,对于任何需要企业级规模并需要能够快速构建和维护的项目,TS都是我的后端默认选项。但如果我做的是计算密集型的工作,我会选择Rust——这几乎总是后台作业,所以我的API几乎总是用TS。


是的!在无服务器环境中使用 TS 太棒了,fp-ts TaskEither 真的非常适合那些可能以奇奇怪怪的方式失败的异步 API。


对我来说,关键在于编译时间和运行时间。我们必须记住,JS严格来说不是强类型语言,所以在你的程序编译掉那些类型之后,如果出现问题,你该怎么办?我更倾向于对后端密集型的东西,比如支付系统,使用强类型语言。
对我来说,另一个重要的事情是企业级应用的包,特别是像支付系统这样高风险的东西。我更喜欢那些内置库更多,而且经过多年验证的库,而不是一些JS开源库。尤其是在考虑安全性的情况下。JS的依赖性简直是地狱。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85610.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85610.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85610.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL和OpenGL ES区别

OpenGL(Open Graphics Library)和OpenGL ES(OpenGL for Embedded Systems)都是用于图形渲染的API,但它们的目标平台和设计定位有所不同。 1. 目标平台 OpenGL 主要用于桌面平台(如Windows、macOS、Linux&a…

PyTorch 入门之官方文档学习笔记(一)

目录 1 张量 1)张量的初始化和属性 2)张量操作 3)使用 NumPy 进行桥接 2 torch.autograd 1)背景 2)在 PyTorch 中的使用 3)Autograd 的微分机制 4)计算图原理 5)从计算图中…

King’s LIMS 系统引领汽车检测实验室数字化转型

随着汽车保有量的持续攀升和车龄的增长,消费者对汽车的需求已悄然转变,从最初对外观和性能的追求,逐渐深化为对安全性、可靠性、耐久性、性能与舒适性以及智能化功能的全方位关注。这无疑让汽车检测行业在保障车辆质量、满足市场需求方面肩负…

Neo4j常见语句-merge

merge用法&#xff1a;MERGE 是 Neo4j 中一个强大的操作符&#xff0c;用于确保图中存在特定的节点或关系。它的核心逻辑是&#xff1a;如果目标存在则匹配&#xff0c;不存在则创建 基本语法与逻辑&#xff1a; MERGE <pattern> [ON CREATE <create_clause>] //…

Mem0多级记忆实现机制详解

在人工智能交互场景中,记忆能力是实现个性化服务与智能决策的关键。Mem0 通过设计分层记忆架构,实现了对用户、会话和智能体状态的多级管理。各层级记忆既相互独立存储,又通过精密的关联机制协同运作,确保在不同场景下都能提供精准的上下文支持,显著提升 AI 交互的智能性与…

Python 爬虫入门 Day 5 - 使用 XPath 进行网页解析(lxml + XPath)

Python 第二阶段 - 爬虫入门 &#x1f3af; 今日目标 掌握 XPath 的基本语法使用 lxml.etree 解析 HTML&#xff0c;提取数据与 BeautifulSoup 比较&#xff1a;谁更强&#xff1f; &#x1f4d8; 学习内容详解 ✅ 安装依赖 pip install lxml&#x1f9e9; XPath 简介 XPa…

变幻莫测:CoreData 中 Transformable 类型面面俱到(六)

概述 各位似秃似不秃小码农们都知道&#xff0c;在苹果众多开发平台中 CoreData 无疑是那个最简洁、拥有“官方认证”且最具兼容性的数据库框架。使用它可以让我们非常方便的搭建出 App 所需要的持久存储体系。 不过&#xff0c;大家是否知道在 CoreData 中还存在一个 Transfo…

Vuex(一) —— 集中式的状态管理仓库

目录 Vue组件间通信方式回顾 组件内的状态管理流程组件间通信方式 父组件给子组件传值 (最简单的一种方式)子组件给父组件传值不相关组件之间传值其他常见方式($ref) 简易的状态管理方案 上面组件间通信方式的问题集中式的状态管理方案 Vuex 什么是Vuex?什么情况下使用Vuex?…

操作系统---内存管理上

文章目录 1. 内存的基础知识1.1 什么是内存&#xff0c;有何作用1.2 进程运行的基本原理1.2.1 指令的工作原理1.2.2 逻辑地址 VS 物理地址 1.3 如何实现地址转换&#xff08;逻辑 -> 物理&#xff09;1.3.1 绝对装入1.3.2 可重定位装入&#xff08;静态重定位&#xff09;1.…

医学图像处理期末复习

目录 考试范围第1章 绪论1.1 数字图像处理的概念1.2 数字图像处理的应用领域1、医学领域2、其他领域 1.3 数字图像处理基础1.4 数字图像基础运算 第2章 医学图像灰度变换与空间滤波2.1 医学图像灰度变换线性灰度变换非线性灰度变换 2.2 直方图均衡化√2.3 空间平滑滤波线性空间…

类图:软件世界的“建筑蓝图”

本文来自「大千AI助手」技术实战系列&#xff0c;专注用真话讲技术&#xff0c;拒绝过度包装。 类图&#xff08;Class Diagram&#xff09;&#xff1a;软件世界的“建筑蓝图” 类图&#xff08;Class Diagram&#xff09;是统一建模语言&#xff08;UML&#xff09; 中最重要…

利用DevEco Studio对RK3588的HiHopesOS-4.1.110(OpenHarmony)进行Qt程序编写

文章目录 热身准备添加Qt库运行qml程序 热身 可以先看我这篇文章【DevEco Studio中使用Qt&#xff0c;编写HarmonyOS程序】 准备 板子的主要信息 目前由于系统版本&#xff08;API 11&#xff09;及其他原因&#xff0c;只能用4.1版本的DevEcoStudio来编写&#xff0c;更高…

设计模式精讲 Day 5:原型模式(Prototype Pattern)

【设计模式精讲 Day 5】原型模式&#xff08;Prototype Pattern&#xff09; 文章内容 在“设计模式精讲”系列的第5天&#xff0c;我们将深入讲解原型模式&#xff08;Prototype Pattern&#xff09;。作为创建型设计模式之一&#xff0c;原型模式通过复制已有对象来创建新对…

深度学习——第2章习题2-1分析为什么平方损失函数不适用于分类问题

深度学习——第2章习题2-1 《神经网络与深度学习》——邱锡鹏 2-1 分析为什么平方损失函数不适用于分类问题。 平方损失函数&#xff08;Quadratic Loss Function&#xff09;经常用在预测标签y为实数值的任务中&#xff0c;定义为 L ( y , f ( x ; θ ) ) 1 2 ( y − f (…

【Linux】运行脚本后打屏同时保存到本地

命令&#xff1a; sh run.sh 2>&1 | tee output.log sh run.sh 2>&1 | tee output_$(date "%Y%m%d%H%M").log作用&#xff1a;运行脚本&#xff0c;并同时将输出&#xff08;包括标准输出和错误输出&#xff09;显示到终端&#xff0c;并保存到文件中…

Spark 在小众日常场景中的实战应用:从小店数据到社区活动

Spark 在小众日常场景中的实战应用&#xff1a;从小店数据到社区活动​ 提起 Spark&#xff0c;大家往往会联想到大型互联网公司的数据处理、金融行业的复杂分析。但实际上&#xff0c;Spark 在许多小众、贴近生活的场景中也能大显身手。结合学习与实践&#xff0c;我探索了 S…

mysql 执行计划 explain命令 详解

explain id &#xff1a;select查询的序列号&#xff0c;包含一组数字&#xff0c;表示查询中执行select子句或操作表的顺序select_type&#xff1a;查询类型 或者是 其他操作类型table &#xff1a;正在访问哪个表partitions &#xff1a;匹配的分区type &#xff1a;访问的类…

让大模型“更懂人话”:对齐训练(RLHF DPO)全流程实战解析

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

GO 原子操作面试题及参考答案

Go 的 sync/atomic 包和 sync.Mutex 的根本区别是什么&#xff1f; Go 语言中的 sync/atomic 包和 sync.Mutex 都用于处理并发编程中的同步问题&#xff0c;但它们的实现机制、应用场景和性能特性存在根本差异。理解这些差异对于编写高效、安全的并发代码至关重要。 sync/atomi…

MATLAB 山脊图绘制全解析:从数据生成到可视化进阶

一、引言&#xff1a;当数据分布拥有「层次感」—— 山脊图的魅力​ 在数据可视化的世界里&#xff0c;我们常常需要同时展示多个分布的形态差异。传统的重叠密度图虽然能呈现整体趋势&#xff0c;但当分布数量较多时&#xff0c;曲线交叠会让画面变得杂乱。这时候&#xff0c…