Fresh 1.0 稳定版发布,Deno 全栈 Web 框架


Fresh 是 Deno 的全新全栈 Web 框架。默认情况下,使用 Fresh 构建的网页不会向客户端发送 JavaScript。该框架没有构建步骤,可以将部署时间缩短一个数量级。近日,Fresh 发布了第一个稳定版本。

Fresh 使用了一种不同的模型:默认情况下,开发者会将 0 KB 的 JS 发送给客户端。因为大多数渲染在服务器上完成,客户端只负责重新渲染交互性的小模块。这是一个开发者明确选择客户端渲染特定组件的模型。早在 2020 年,Jason Miller 在他的 Islands Architecture 博客文章中就描述了这个模型。

Fresh 核心是路由框架和模板引擎的组合,支持在服务器上按需渲染页面。除了在服务器中提供的即时 (JIT) 渲染之外,Fresh 还提供了一个接口,用于在客户端上无缝渲染某些组件,以实现最大的交互性。该框架使用 Preact 和 JSX(或 TSX)在服务器和客户端上进行渲染和模板化。客户端渲染在每个组件级别上是完全可选的,因此许多应用程序根本不会向客户端发送任何 JavaScript。

由于 Fresh 没有构建步骤,因此开发者编写的代码直接就是在服务器和客户端上运行的代码。将 TypeScript 或 JSX 转换为纯 JavaScript 的任何必要转换都是在需要时即时完成的。这允许通过即时部署实现非常快速的迭代循环。

Fresh 不仅仅是一个前端框架,而是一个用于编写网站的完全集成系统。开发者可以任意处理任何类型的请求、返回自定义响应、发出数据库请求等等。此路由返回纯文本 HTTP 响应而不是 HTML 页面,例如:

// routes/api/joke.ts

const JOKES = [/** jokes here */];

export const handler = (_req: Request): Response => {
const randomIndex = Math.floor(Math.random() * JOKES.length);
const body = JOKES[randomIndex];
return new Response(body);
};

这也可以用于为路由进行异步数据获取。下面是从磁盘上的文件加载博客文章的路由:

// routes/blog/[id].tsx

import { HandlerContext, PageProps } from "$fresh/server.ts";

export const handler = async (_req: Request, ctx: HandlerContext): Response => {
const body = await Deno.readTextFile(`./posts/${ctx.params.id}.md`);
return ctx.render({ body });
};

export default function BlogPostPage(props: PageProps) {
const { body } = props.data;
// ...
}

因为 Fresh 非常依赖动态服务器端渲染,所以速度必须快。Fresh 非常适合在 Deno Deploy、Netlify Edge Functions 或 Supabase Edge Functions 等边缘 runtime 场景运行。由于渲染过程在物理上非常靠近用户,从而可以最大限度地减少网络延迟。

Fresh 亮点特性

  • 无构建步骤
  • 零配置
  • 边缘 JIT 渲染
  • 轻量且快速(框架不需要客户端 JS)
  • 单个组件支持可选的客户端 Hydration
  • 由于采用渐进式增强和使用原生浏览器功能而具有很强的适应性
  • 开箱即用的 TypeScript
  • 文件系统路由采用 Next.js

Fresh 1.0 是一个稳定版本,支持在生产环境使用。通过 Deno,Fresh 项目可以手动部署到任何平台,但部署到像 Deno Deploy 这样的边缘运行时可获得最佳体验。


相關推薦

2023-06-17

Fresh 1.0 以来,已经过去了将近一年,如今 Fresh 1.2 正式发布,亮点功能如下: islands 是在服务器和客户端都渲染的独立组件,是 Fresh 设计的核心。如今可以在 island props 中传递 Preact、Uint8Arrays 和循环数据 向 island 传递 JSX,

2022-09-12

Fresh 1.1 稳定版已发布,新版本包含许多重要的改进,使 Fresh 更易于使用、更快,并且更实用。 Fresh 是 Deno 的全新全栈 Web 框架。默认情况下,使用 Fresh 构建的网页不会向客户端发送 JavaScript。该框架没有构建步骤,可以将部署

2023-07-20

Fresh 1.3 已正式发布。 Fresh 是 Deno 的全新全栈 Web 框架。默认情况下,使用 Fresh 构建的网页不会向客户端发送 JavaScript。该框架没有构建步骤,可以将部署时间缩短一个数量级。 Fresh 核心是路由框架和模板引擎的组合,支

2022-06-14

栈现代 Web 框架,可帮助他们轻松创建高质量、高性能、稳定性好,以及支持定制的 Web 应用。 Fresh 核心是路由框架和模板引擎的组合,支持在服务器上按需渲染页面。除了在服务器中提供的即时 (JIT) 渲染之外,Fresh 还提供了

2023-04-08

栈现代 Web 框架,可帮助他们轻松创建高质量、高性能、稳定性好,以及支持定制的 Web 应用。 Demo:https://saaskit.deno.dev/

2023-08-18

Fresh 1.4 已正式发布。 Fresh 是 Deno 的全新全栈 Web 框架。默认情况下,使用 Fresh 构建的网页不会向客户端发送 JavaScript。该框架没有构建步骤,可以将部署时间缩短一个数量级。 Fresh 核心是路由框架和模板引擎的组合,支

2022-06-18

仍然想要回到以前的行为,请使用 --check 标志。 移除不稳定的 Deno.sleepSync API 在这个版本中,由于没有明确的必要性 Deno.sleepSync 被删除了,因为这个功能已经可以通过现有的 Web API 获得。此外这也是一个很可能会引起问题的功

2023-05-05

Qwik 是一个全栈式 Web 框架,Qwik 基于 React、Angular 和 Vue 等其他 Web 框架的概念,但以 JavaScript 流等更新的方法脱颖而出,允许以高性能向用户交付复杂的 Web 应用程序。 随着 Web 应用程序变得越来越大,它们的启动性能会下降

2023-03-24

段的类型从 number | null 改为 number。 增加了两个新的不稳定的 API: Deno.DatagramConn.joinMulticastV4 和 Deno.DatagramConn.joinMulticastV6 Web API 的改变 现在支持 URLSearchParams.size() 移除不稳定的 WebGPU API。支持 WebGPU 引入了成本,使所有

2023-07-07

作。 此次版本更新带来如下改进: Deno.serve() API 现已稳定,提供一种快速便捷的方式来构建 Web 服务器。Deno.serve() 允许开发人员使用一句代码设置 Web 服务器: Deno.serve((req) => new Response("hello world")); 相比之前的 Deno

2022-11-17

。 Deno 1.28 已发布,值得关注的更新包括: npm Deno 1.28 稳定了 npm 兼容性,这意味着你现在可以在 Deno 中导入超过 130 万个 npm 模块。构建应用程序将比以往更容易、更安全,现在你可以使用如 Prisma、Mongoose 和 MySQL 等最喜欢的

2022-11-24

经过三年多的努力,Hanami 2.0 正式发布,随着这个版本的发布,Hanami 进入了框架成熟的新阶段,并为 Ruby 社区开启了新的篇章。 更好 Hanami 2.0 的核心是现在的 app/ 目录,在这里,你可以随心所欲地组织你的代码,同时还可以享

2023-11-04

sp;支持 head 命令 针对 VSCode 扩展和语言服务器的稳定性改进 REPL 中的 Deno.test 支持:与 Jupyter 运行良好 Jupyter Notebook 更新:支持富文本 HTML 输出 Deno API 变更: Deno.serve 现在支持 unix 套接字 Web API

2023-02-10

历经三年多的开发,Meilisearch 1.0 首个完全稳定版已正式发布,可用于生产环境且向前兼容。 Meilisearch 是 Rust 实现的高性能开源搜索引擎,支持方便地集成到任何网站或应用程序,支持自托管 (self-hosting),可作为 Algolia 和 Elasti