标签:Devto

使用 Firebase(云消息传递)进行 PWA 推送通知 - 第 1 部分

摘要: 本文主要介绍了如何使用 Firebase 云消息传递(FCM)为渐进式 Web 应用(PWA)添加推送通知功能。文章首先解释了推送通知 API 和 Push API 的区别,并强调了通知 API 用于接收用户选择接收的消息,而 Push API 用于服务器向用户代理推送消息。接下来,文章提供了创建 PWA 中的推送通知的具体步骤,包括配置 Firebase 项目、获取必要的权限和 token,以及编写处理推送通知的代码。本文旨在为开发者提供一种简单有效的方法来集成 FCM 推送通知功能到他们的 PWA 中。

Administrator 博客 2025-06-10

使用 Nest 进行 GraphQL 订阅:如何跨多个正在运行的服务器发布

使用 NestJS 进行 GraphQL 订阅:跨多个运行服务器发布的方法 摘要: 本文将介绍如何使用 NestJS 和 Redis 构建一个具有订阅功能的 GraphQL 应用程序。首先,我们将讨论先决条件,包括 GraphQL、NestJS 的基本知识和 Docker 的安装。然后,我们将逐步介绍如何创建一个基本的 GQL 应用程序并使用默认订阅。接下来,我们将讨论为什么需要 Redis 以及如何在 NestJS 中使用它来支持跨多个服务器的订阅发布。最后,我们将详细阐述如何实现跨服务器订阅的过程,包括安装依赖项、更改主文件以及构建乒乓应用程序来演示订阅的实际效果。本文旨在帮助读者理解如何使用 NestJS 进行 GraphQL 订阅,并跨多个运行服务器发布消息。

Administrator 博客 2025-06-10

20 分钟内使用 Netlify Functions 构建后端

这是一个关于如何使用Netlify Functions在20分钟内构建后端的文章摘要: 文章首先介绍了Netlify,它是一个能够快速简便地部署前端应用的平台。接着,文章重点介绍了Netlify Functions,这是一个可以让无服务器产品入门门槛低并且提供丰富免费套餐的解决方案。无论是独立开发者还是企业级商店,都可以考虑使用它。 文章详细阐述了用例——你可以构建什么。例如,你可以使用Netlify Functions保护机密和凭证、处理服务器端渲染、发送电子邮件、处理文件IO、运行集中式逻辑、在主线程外执行任务、绕过锁定API的CORS问题、提供渐进式增强/NoScript回退等。 然后,文章介绍了Netlify Functions的基本框架和如何在JavaScript中使用它。每个函数都应位于其自己的文件中,并将执行分配给任何内容。我们可以访问事件和上下文。我们可以在Node上运行任何我们需要的代码,并返回任何我们想要的响应类型。 接下来,文章以一个具体的例子——创建一个问候函数——展示了如何设置Netlify Functions。函数可以从传入的查询字符串参数中获取信息,并寻找名字参数。为了实际连接函数文件夹,需要在项目的根目录添加一个netlify.toml配置文件。 最后,文章指导读者如何在本地测试Netlify Functions,并给出了一个文件夹结构示例,让读者可以照着做。总的来说,这篇文章为那些希望在短时间内使用Netlify Functions构建后端的人提供了有用的指导和建议。

Administrator 博客 2025-06-10

既然 Bun 也是捆绑软件,为什么还要使用 Vite? - Vite 与 Bun 的对比

摘要: 本文主要探讨了为什么尽管Bun也是一种捆绑软件,开发者仍然需要使用Vite的问题。文章首先介绍了Vite和Bun的基本概念和用途。Vite是一个快速的本地开发服务器/打包工具,主要用于非捆绑式开发,并且可以优化生产环境的JS代码。Bun是一个基于esbuild的Zig端口,包含自己的(目前有限的)捆绑器。 文章接着阐述了Vite与Bun之间的重叠和差异。虽然Bun可以作为服务器使用的Node.js替代品,但Vite在快速开发、优化捆绑生产环境的JS代码、以及通过网络将代码发送给客户端等方面表现出优势。此外,Vite拥有众多开发者喜爱的API,已经形成了良好的生态系统,并且具有热模块重载(HMR)功能,这对于快速本地开发至关重要。 因此,尽管Bun和Vite在某些方面有重叠,但Vite仍然有其独特的优势,这也是为什么开发者在开发中仍然需要Vite的原因。

Administrator 博客 2025-06-10

利用信号进行本地思考

这篇文章介绍了在构建用户界面时,如何利用信号进行本地思考,以及相关的技术原则,如单向流、组合和显式突变等。文章强调了React的魔力在于其设计原则的组合,使得开发者可以在不了解整个代码库的情况下推断出给定组件的行为。此外,文章还讨论了传递价值和从上层接收值的重要性,并指出任何离开组件的接口都不应默认同时传递值和setter。最后,文章提到了Svelte Runes采取的另一种方法来实现这一点,即将变量访问编译为信号读取。整体上,这篇文章对如何利用信号进行本地思考进行了详细的阐述。翻译如下: Thinking Locally with Signals 在构建用户界面时,我们如何从信号中汲取灵感并对其进行本地思考?让我们深入探讨这个问题及其相关技术原则。 React的影响力并不仅仅来自于其虚拟DOM或JSX技术,更重要的是它的原则。虽然这些技术展现了React的能力,甚至可能将其定义为一种解决方案,但它们并不是React的遗产。相反,诸如单向流、组合和显式突变等特性持续影响着我们的界面构建方式。当看到Solid的核心响应式技术Signals被整个生态系统采用时,我们不应忘记从React中汲取的教训。 React的真正魔力在于当你将其所有设计原则结合起来时,你可以在不查看其余代码的情况下推断出给定组件的行为。这使得新人能够高效工作,允许独立构建功能而不影响应用程序的其余部分。这是一种不可思议的力量。值得庆幸的是,这些力量并不局限于React的技术选择。 单向流可能是实现局部性思维最重要的部分。通常,这始于不变性,因为传递可变内容后,调用者将永远无法信任它。然而,这并不需要真正的不变性。它需要的是读/写隔离,或者换句话说,显式地改变。因此,任何离开我们组件的接口,无论是用于原始组合(例如自定义信号)还是JSX,都不应默认同时传递值和setter。我们在SolidJS中鼓励这样做,通过在JSX中使用按值传递的方法,并提供默认读/写分离的原始操作。 从机制上讲,这与Svelte Runes采取的另一种方法来实现这一点相似,即将变量访问编译为信号读取。变量只能通过值传递,因此不必担心在当前作用域之外写入。这意味着组件无法更改在此文件中声明的变量。只有与定义一起定义的方式才能唯一改变它。 这种按值传递的方法对于传入组件的数据也非常有利。想象一下如果你可以传递信号或值会如何?当考虑到从上层接收值时,我们必须确保不会意外地调用某些函数或更改我们不希望更改的状态。因此,我们需要确保数据的来源是可信的,并且只传递我们真正需要的数据部分。这有助于保持代码的清晰性和可维护性。总的来说,利用信号进行本地思考意味着我们需要关注数据的流动和变化,并确保在构建用户界面时充分利用这些原则来提供清晰、高效和可维护的解决方案。

Administrator 博客 2025-06-10

重新审视 UI 组件的真正成本

文章摘要: 文章重新审视了UI组件的真正成本,作者通过测试几种不同的JavaScript框架和库来探究UI组件的性能表现。文章首先介绍了测试的背景和目的,然后详细描述了测试设置、场景、竞争者(包括Inferno、Lit、Solid、Svelte和Vanilla JS等),最后进行了基准测试,通过数据和图表展示了不同框架和库的性能表现。文章强调从层次上看待UI组件的成本问题,并提出了平均几何平均值作为全面比较这些库性能的方法。

Administrator 博客 2025-06-10

Typescript 4.5 中模板字符串类型作为判别式

摘要: 本文介绍了 Typescript 4.5 版本中模板字符串类型作为判别式的功能。通过创建两种类型 SuccessType 和 ErrorType,使用模板字符串类型作为它们的属性,可以在联合类型中使用该属性来区分不同的类型。文章通过示例展示了如何使用模板字符串类型缩小联合类型的范围,并提供了一个简单的示例来演示通过非具体的字面类型区分两个并集。最后,文章总结了模板字符串类型作为判别式的优势和应用场景。

Administrator 博客 2025-06-10

Qwik——后现代框架

文章介绍了Qwik——后现代框架,探讨了现代框架面临的挑战以及Qwik如何解决这些问题。文章指出,现代框架在性能上面临巨大的挑战,不能满足公司的需求。Qwik采取了不同的方法,将重点从“做得更快”转移到“做得更少”,并实现了顶级性能、完美无瑕、零JavaScript和纯HTML的目标。文章还介绍了Qwik的关键概念,如可恢复性、预取等,并探讨了Qwik City的实现原理。最后,文章得出结论,Qwik将改变我们的思维模型,成为JS框架中的先驱之一。

Administrator 博客 2025-06-10

Learning to Appreciate React Server Components In the beginning there was Marko Render-as-you-Fetch React Server Components Something Unexpected New Eyes Closing Thoughts

摘要: 本文介绍了作者对React服务器组件的学习和欣赏过程,以及在此过程中对Marko框架的了解和体验。文章提及了Marko的核心优势,如渐进式服务器渲染和部分数据加载等特性。此外,作者还探讨了React中的即取即渲染(Render-as-you-Fetch)概念,以及在代码和数据获取并行化方面的挑战。最后,作者强调了代码拆分和数据加载策略在加快页面加载速度方面的重要性。整体而言,文章提供了一个独特的视角,对于了解React服务器组件以及与之相关的技术趋势有一定的参考价值。

Administrator 博客 2025-06-10

如何使用 Git 命令清理本地存储库

摘要: 本文介绍了如何使用Git命令清理本地存储库。首先,解释了如何删除未跟踪的文件,包括使用git clean命令删除工作目录中所有未跟踪的文件和目录。其次,解释了如何撤消本地更改,使用git checkout命令将工作目录重置为指定分支或提交的状态。然后,阐述了如何删除本地分支,介绍了使用git branch命令删除已合并或强制删除分支的方法。最后,说明了如何修剪远程跟踪分支,使用带有--prune选项的git fetch命令从远程存储库获取最新更新并删除远程存储库中不再存在的远程跟踪分支。本文提供了详细的步骤和示例,以帮助读者使用Git命令有效地清理本地存储库。

Administrator 博客 2025-06-10