搜索
首页web前端js教程NestJS 与 Encore.ts:为您的 TypeScript 微服务选择正确的框架

简介

当 Web 应用程序变得越来越大时,开发和维护系统的复杂性也随之增加。解决此问题的常见方法是使用微服务架构,开发人员将系统分解为更小的、管理良好的组件,这些组件可以单独管理和扩展。

为了有效地做到这一点,使用微服务框架通常很有帮助。但选择原生支持微服务的正确框架可能具有挑战性。在本文中,我们将看看 Encore.ts 和 Nest.js 作为两个相关的替代方案,因为它们都原生支持微服务架构和 TypeScript。

Encore.ts 是一个较新的开源框架,以其高性能、类型安全和可观察性功能而脱颖而出。另一方面,Nest.js 引领了用于构建微服务应用程序的 TypeScript 框架。每个框架都有强大的功能,因此我们将从架构、性能和可扩展性方面检查每个框架,并解释如何确定哪个最适合您。

开始之前,我们先看一下下图中的基准数据:

NestJS vs Encore.ts: Choosing the Right Framework for Your TypeScript Microservices

基准数据显示,Encore.ts 在没有验证的情况下每秒可以处理 121,005 个请求,在有模式验证的情况下每秒可以处理 107,018 个请求。这比传统框架快得多。例如,在没有验证的情况下,带有 Zod 的 Express.js 每秒只能命中大约 15,707 个请求,而在经过验证的情况下,每秒只能命中 11,878 个请求。因此,Encore.ts 比 Express 快大约 9 倍,Nestjs 是基于 Express 构建的。

Encore.ts 和 NestJS 概述

当您开始一个项目时,您需要一个不仅功能强大而且易于开发人员使用的框架。 Encore.ts 和 NestJS 在内置了 Typescript 支持的微服务框架中脱颖而出,但它们以自己独特的方式工作。

Encore.ts 是一个开源云原生框架,专为具有内置基础设施自动化的后端开发而设计。它允许您使用声明性基础设施库构建模块化分布式系统。

NestJS vs Encore.ts: Choosing the Right Framework for Your TypeScript Microservices

Encore.ts 在 Rust 运行时上运行 ****通过 napi 与 Node.js 集成,在处理 I/O 和多线程方面具有出色的性能,同时允许您在 TypeScript 中编写逻辑。

以下是如何在 Encore.ts 中定义服务的简单示例:

import { Service } from "encore.dev/service";

export default new Service("hello");

创建此 hello 服务后,Encore.ts 会自动将整个目录视为服务的一部分 — 无需额外配置。

另一方面,NestJS 有自己的风格。它是一个灵活的 TypeScript 框架,可让您完全控制构建应用程序的方式,让您可以自由地按照自己的方式构建事物。

NestJS vs Encore.ts: Choosing the Right Framework for Your TypeScript Microservices

虽然它不处理基础设施自动化,但 NestJS 可以轻松地与几乎任何第三方库集成,这为不同的项目开辟了很多可能性。

以下是如何在 NestJS 中定义类似的服务:

import { Service } from "encore.dev/service";

export default new Service("hello");

NestJS 为您提供了更大的灵活性,但没有 Encore.ts 中的内置自动化功能。

建筑与设计

框架的架构决定了如何随着时间的推移构建和维护应用程序。 Encore.ts 和 NestJS 都很强大,但它们的核心理念不同。

Encore.ts 固执己见,*云优先,使其成为具有许多微服务的大型类型安全*分布式系统的理想选择。其突出功能之一是对 Pub/Sub 的本机支持,从而无缝地实现事件驱动架构。

以下是如何使用 Pub/Sub 在 Encore.ts 中定义事件驱动服务:

import { Controller, Get } from '@nestjs/common';

@Controller('hello')
export class HelloWorldController {
  @Get()
  sayHello(): string {
    return 'Hello, World!';
  }
}

NestJS 虽然能够支持微服务和事件驱动架构,但提供了更加模块化的方法。其核心遵循 MVC 模式,它允许开发人员通过提供对配置的更大控制来按照自己的方式构建系统。

例如,以下是如何使用更加模块化的方法在 NestJS 中定义服务和事件:

import { Topic, Subscription } from "encore.dev/pubsub";

// Define the event type for order creation
export interface OrderCreatedEvent {
    orderId: string;
}

// Create a topic for order creation events
export const orders = new Topic<ordercreatedevent>("orders", {
    deliveryGuarantee: "at-least-once",
});

// Create a subscription to listen for the order creation event
export const _ = new Subscription(orders, "process-order", {
    handler: async (event: OrderCreatedEvent) => {
        console.log('Order created:', event.orderId);
    },
});
</ordercreatedevent>

根据设计,NestJS 对组件如何交互提供了很多控制权,但缺点是更多的样板代码,您还必须自己管理基础设施配置。

内置功能和可扩展性

在分布式系统的开发中,框架提供的功能往往会带来开发过于复杂的风险。

Encore.ts 的突出特点是它提供了在本地开发和云环境中自动化基础设施配置的方法。这包括数据库、Pub/Sub、cron 作业等等。 Encore.ts 还提供本地开发仪表板,自动生成 API 文档、架构图和分布式跟踪。它还生成前端客户端,包括对 REST API 的 OpenAPI 规范支持,这可以为开发人员节省大量时间。

下面是在 Encore.ts 中定义 REST API 的示例,它还会自动生成 OpenAPI 文档:

import { Service } from "encore.dev/service";

export default new Service("hello");

使用 Encore.ts,当您定义服务时,文档和图表就会自动可用,无需额外设置。

NestJS vs Encore.ts: Choosing the Right Framework for Your TypeScript Microservices

NestJS 因其灵活性而广受欢迎。从第一天起,它就轻松支持 REST、GraphQL 和 WebSocket,但其受欢迎的主要原因是它可以轻松地与第三方库连接。

例如,如果您想添加 GraphQL 支持,这是一个简单的过程。

import { Controller, Get } from '@nestjs/common';

@Controller('hello')
export class HelloWorldController {
  @Get()
  sayHello(): string {
    return 'Hello, World!';
  }
}

NestJS 使得构建其核心功能变得简单,但它不提供与 Encore.ts 相同级别的自动化基础设施和功能。

性能和可扩展性

构建分布式系统时,尤其是大规模分布式系统时,性能至关重要。

Encore.ts 专为高性能而构建,其 Rust 运行时可有效处理 I/O 操作和多线程。 Rust 的速度和内存安全性使 Encore.ts 比纯粹基于 Node.js 的框架具有显着优势。在可扩展性方面,Encore.ts 是云原生的,可以使用无服务器架构或 Kubernetes 自动扩展,具体取决于您的部署策略。

另一方面,NestJS 在处理性能和可扩展性方面更为传统。由于 NestJS 纯粹基于 TypeScript 和 JavaScript,因此它依赖于您在设置过程中应用的性能优化。扩展 NestJS 应用程序通常涉及手动配置 Kubernetes、Docker 或 AWS Lambda 等无服务器平台。

虽然 NestJS 在扩展方式方面提供了灵活性,但与 Encore.ts 的内置自动化相比,配置需要更多的手动工作。

让我们从下图中的基准数据了解 encore.ts 和 Nest.js 的性能差异:

NestJS vs Encore.ts: Choosing the Right Framework for Your TypeScript Microservices

从基准数据来看,encore.ts 在性能方面表现突出,启动时间仅为 8.3 毫秒,而 NestJS 则需要约 143.7 毫秒,比传统框架快了近九倍。

部署策略

如何部署应用程序是任何项目的关键考虑因素,尤其是在考虑云环境时。

Encore.ts 通过其开源工具或 Encore 云平台提供了简单的部署路径。使用开源版本,您可以使用 encore build 来构建项目并创建 Docker 映像,然后可以将其部署在支持 Docker 的任何地方:

import { Topic, Subscription } from "encore.dev/pubsub";

// Define the event type for order creation
export interface OrderCreatedEvent {
    orderId: string;
}

// Create a topic for order creation events
export const orders = new Topic<ordercreatedevent>("orders", {
    deliveryGuarantee: "at-least-once",
});

// Create a subscription to listen for the order creation event
export const _ = new Subscription(orders, "process-order", {
    handler: async (event: OrderCreatedEvent) => {
        console.log('Order created:', event.orderId);
    },
});
</ordercreatedevent>

这将创建一个可以部署在任何地方的 Docker 镜像。

或者,如果您选择使用 Encore 云平台,它会自动执行整个 CI/CD 管道,通过无服务器或 Kubernetes 选项直接部署到 AWS 或 GCP 上您自己的云。

NestJS vs Encore.ts: Choosing the Right Framework for Your TypeScript Microservices

相比之下,NestJS 需要手动设置才能部署。通常,开发人员使用 Docker 来容器化 NestJS 应用程序并将其部署到他们选择的云提供商。虽然这使您可以控制部署策略,但它需要更多配置 - 即使对于简单的应用程序,您也需要执行许多步骤:

  1. 创建 Dockerfile:
import { Service } from "encore.dev/service";

export default new Service("hello");
  1. 创建 docker-compose.yml 文件:
import { Controller, Get } from '@nestjs/common';

@Controller('hello')
export class HelloWorldController {
  @Get()
  sayHello(): string {
    return 'Hello, World!';
  }
}
  1. 为 NestJS 创建 GitHub Actions 工作流程
import { Topic, Subscription } from "encore.dev/pubsub";

// Define the event type for order creation
export interface OrderCreatedEvent {
    orderId: string;
}

// Create a topic for order creation events
export const orders = new Topic<ordercreatedevent>("orders", {
    deliveryGuarantee: "at-least-once",
});

// Create a subscription to listen for the order creation event
export const _ = new Subscription(orders, "process-order", {
    handler: async (event: OrderCreatedEvent) => {
        console.log('Order created:', event.orderId);
    },
});
</ordercreatedevent>

您的应用程序变得越大,对多个暂存和测试环境的需求就越多,这种手动配置方法就会变得越繁重 - 维护时间持续增长。

用例注意事项

在 Encore.ts 和 NestJS 之间进行选择时,应根据项目的具体需求做出决定。

Encore.ts 非常适合受益于内置自动化的云优先应用程序和大型分布式系统。它的 Rust 支持的运行时和基础设施管理使其成为事件驱动架构、微服务和高性能应用程序的理想选择。 Encore 快速发展的社区是支持和寻找集成第三方工具方法的可靠来源。

另一方面,当需要灵活性和定制化时,NestJS 就会大放异彩。它非常适合需要对各个方面进行细粒度控制并且可以接受花时间进行手动配置的企业应用程序。 NestJS 相对广泛的生态系统和社区支持让您更容易找到资源和第三方工具。

结论

在 Encore.ts 和 NestJS 之间进行选择取决于您项目的具体需求。

如果您正在寻找一个简单、高性能、具有内置自动化功能的云原生框架,Encore.ts 是一个绝佳的选择。它通过自动管理基础设施来简化分布式系统的开发,其由 Rust 驱动的性能难以匹敌。

但是,如果您需要一个非常灵活的模块化框架来让您控制每一个细节,NestJS 可能是您的最佳选择。其可扩展性和庞大的生态系统使其成为定制企业解决方案的可靠选择。

这两个框架本身都很强大,最好的选择取决于您是看重性能和简单性,还是完全的灵活性和控制。

后续步骤

如果性能和简单性对您的项目很重要,那么尝试 Encore.ts 可能是个好主意。而且它都是开源的,因此您可以查看代码并在 GitHub 上做出贡献。

以上是NestJS 与 Encore.ts:为您的 TypeScript 微服务选择正确的框架的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
在JavaScript中替换字符串字符在JavaScript中替换字符串字符Mar 11, 2025 am 12:07 AM

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

构建您自己的Ajax Web应用程序构建您自己的Ajax Web应用程序Mar 09, 2025 am 12:11 AM

因此,在这里,您准备好了解所有称为Ajax的东西。但是,到底是什么? AJAX一词是指用于创建动态,交互式Web内容的一系列宽松的技术。 Ajax一词,最初由Jesse J创造

10个JQuery Fun and Games插件10个JQuery Fun and Games插件Mar 08, 2025 am 12:42 AM

10款趣味横生的jQuery游戏插件,让您的网站更具吸引力,提升用户粘性!虽然Flash仍然是开发休闲网页游戏的最佳软件,但jQuery也能创造出令人惊喜的效果,虽然无法与纯动作Flash游戏媲美,但在某些情况下,您也能在浏览器中获得意想不到的乐趣。 jQuery井字棋游戏 游戏编程的“Hello world”,现在有了jQuery版本。 源码 jQuery疯狂填词游戏 这是一个填空游戏,由于不知道单词的上下文,可能会产生一些古怪的结果。 源码 jQuery扫雷游戏

如何创建和发布自己的JavaScript库?如何创建和发布自己的JavaScript库?Mar 18, 2025 pm 03:12 PM

文章讨论了创建,发布和维护JavaScript库,专注于计划,开发,测试,文档和促销策略。

jQuery视差教程 - 动画标题背景jQuery视差教程 - 动画标题背景Mar 08, 2025 am 12:39 AM

本教程演示了如何使用jQuery创建迷人的视差背景效果。 我们将构建一个带有分层图像的标题横幅,从而创造出令人惊叹的视觉深度。 更新的插件可与JQuery 1.6.4及更高版本一起使用。 下载

如何在浏览器中优化JavaScript代码以进行性能?如何在浏览器中优化JavaScript代码以进行性能?Mar 18, 2025 pm 03:14 PM

本文讨论了在浏览器中优化JavaScript性能的策略,重点是减少执行时间并最大程度地减少对页面负载速度的影响。

Matter.js入门:简介Matter.js入门:简介Mar 08, 2025 am 12:53 AM

Matter.js是一个用JavaScript编写的2D刚体物理引擎。此库可以帮助您轻松地在浏览器中模拟2D物理。它提供了许多功能,例如创建刚体并为其分配质量、面积或密度等物理属性的能力。您还可以模拟不同类型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流浏览器。此外,它也适用于移动设备,因为它可以检测触摸并具有响应能力。所有这些功能都使其值得您投入时间学习如何使用该引擎,因为这样您就可以轻松创建基于物理的2D游戏或模拟。在本教程中,我将介绍此库的基础知识,包括其安装和用法,并提供一

使用jQuery和Ajax自动刷新DIV内容使用jQuery和Ajax自动刷新DIV内容Mar 08, 2025 am 12:58 AM

本文演示了如何使用jQuery和ajax自动每5秒自动刷新DIV的内容。 该示例从RSS提要中获取并显示了最新的博客文章以及最后的刷新时间戳。 加载图像是选择

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能