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 这样的边缘运行时可获得最佳体验。


相关文章

2022-09-12

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

2022-06-14

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

2022-06-18

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

2022-06-12

引言 凡是可以用 JavaScript 来写的应用,最终都会用 JavaScript 来写 | Atwood 定律 目前市面上出现的大多数与 NodeJS 相关的框架,基本都将 NodeJS 定位在工具层、中间层、代理层,很少在业务层面进行深耕,认为这是 JAVA 的领域

2022-07-21

Cirq 1.0 版本支持这些系统的绝大多数工作流,并且有一个稳定的 API,谷歌称后续只会在主要版本号的更改时更新该 API。 Cirq 使用语义版本控制,这意味着 Cirq 的未来点版本将与完整版本兼容。例如,Cirq 1.1 版不会对 1.0 版的 Cir

2022-05-20

,主要变化如下: 更新默认的类型检查模式 移除不稳定的Deno.emit(), Deno.formatDiagnostics()和Deno.applySourceMap()API Deno 命名空间在 worker 中默认可用 新增--no-config flag Navigator.userAgent 升级Deno.resolveDns()API 引入新的R

2022-07-23

相对于当前模块的指定器。 FFI API 的改进 这个版本在不稳定的 FFI API 中增加了新的功能和性能改进 对新的子进程 API 的更新 在 Deno v1.21 中,引入了一个新的不稳定的子进程 API。这个版本对这个 API 进行了重大更新。 LSP 改进

2022-05-21

用 完善 HttpResponse 内置方法,接近 ExpressJS 的 API 使用 稳定性测试和修复 路由功能示例代码 import archttp; void main() { auto app = new Archttp; app.get("/", (req, res) { res.send("Hello, World!"); }); app.get("/user/{id:\d+}", (req, res) { res.send("User id

2022-07-15

欢迎看看项目介绍留以及个Star呀🤺🤺🤺 基于Spring Boot框架打造,针对单体式应用进行专门设计,提供整套服务模块,努力为打造全方位企业级开发解决方案, 致力将开源版打造成超越商业版后台管理框架的项目。前端分为vue

2022-08-11

日,Astro 发布了 1.0 正式版。团队称 1.0 意味着 API 已达到稳定状态,并可用于生产环境。部分新特性: 图像优化:引入新的<Image />和<Picture />组件 支持 MDX:在 Markdown 中混合编写 UI 组件的标准语法 支持 SSR:SSR 现

2022-06-22

历经一年多的开发,mojo.js 终于发布了首个主要版本 1.0。 mojo.js 是 Node.js 实时 Web 框架,可将它视作采用 TypeScript 重写的 Mojolicious(Mojolicious 是 Perl 开发的 Web 框架)。mojo.js 使用了所有最新的 JavaScript 特性,专为聚焦超媒体

2022-08-13

ffi): 读取时检查 CStr 的 UTF-8 有效性 (#15318) fix(ext/ffi): 不稳定的 op_ffi_unsafe_callback_ref (#15439) fix(permissions): 忽略空值 (#15447) fix(task): 子命令解析器跳过全局参数 (#15297) fix: 当没有提供 -location 时,允许设置 globalThis.location (#1544

2022-09-01

管理功能进行统一维护。 通知公告:系统通知公告信息发布维护。 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 登录日志:系统登录日志记录查询包含登录异常。 代码生成:一键生成模块 CR

2022-08-26

在此之前,现在的 Bun 还尚处于 0.1.10 版本,不够稳定和完整。Sumner 表示,他的目标是从现在起在六个月内发布一个稳定的 Bun 版本;不过如果只有他这一个全职人员的话,这就是一项不可能完成的工作。因此,“Oven