Fresh框架:下一代全栈开发新选择

更新日期: 2025-10-10阅读: 25标签: 框架

如果你已经对这些问题感到厌倦:

  • 每次安装依赖都要等待很长时间

  • 打包后的文件体积动不动就几百KB

  • 想要部署到边缘节点还要研究各种平台的配置

那么可以花几分钟了解一下Fresh这个新框架


什么是Fresh?

Fresh是Deno官方团队开发的全栈Web框架。它的特点是无需配置、默认不包含客户端JS、支持边缘部署。

核心技术特点

  • 运行环境:直接运行在Deno上,不是Node.js,天然支持TypeScript

  • 渲染方式:基于Preact,首屏是纯html,零JS;交互区域使用Islands架构按需激活

  • 部署方案:官方推荐Deno Deploy,一键推送到全球30多个边缘节点;也支持Docker自建部署


Fresh 2.0 Beta版:从尝鲜到实用

2024年9月,Fresh宣布2.0进入Beta阶段:

  • api已经稳定,保证向后兼容

  • 稳定性接近正式版,可以在生产环境中试用

  • 重要更新:内置Vite插件模式,大幅提升开发体验


Vite模式:三大改进

只需要在配置文件中添加一行代码就能开启Vite模式:

// fresh.config.ts
export default {
  build: { target: "vite" },   // 开启Vite模式
};

主要改进

热更新体验
保存文件后立即刷新页面,响应速度达到毫秒级,不再需要整个页面重新加载。

极速启动
开发服务器的启动时间从秒级缩短到毫秒级,配置较低的电脑也能快速启动。

插件生态
可以直接使用Vite的所有插件:Unocss、mdx、svg、PWA等,安装后立即使用。


快速开始

创建新项目

deno run -A -r https://fresh.deno.dev my-app

进入项目目录

cd my-app

启动开发服务器

deno task start          # 默认Deno原生模式
# 或者
deno task start:vite     # Vite模式(支持热更新和快速启动)

浏览器中打开 http://localhost:8000 就能看到首页。


项目结构说明

典型的Fresh项目结构:

my-app/
├── routes/           # 页面路由
├── islands/          # 交互式组件
├── static/           # 静态资源
├── dev.ts           # 开发入口
└── fresh.config.ts   # 配置文件

创建第一个页面

在routes目录下创建文件:

// routes/about.tsx
export default function AboutPage() {
  return (
    <div>
      <h1>关于我们</h1>
      <p>这是一个使用Fresh框架创建的页面</p>
    </div>
  );
}

访问 http://localhost:8000/about 就能看到这个页面。

创建交互式组件

在islands目录下创建可交互组件:

// islands/Counter.tsx
import { useState } from "preact/hooks";

export default function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <p>当前计数: {count}</p>
      <button onClick={() => setCount(count + 1)}>
        点击增加
      </button>
    </div>
  );
}

在页面中使用这个组件:

// routes/home.tsx
import Counter from "../islands/Counter.tsx";

export default function HomePage() {
  return (
    <div>
      <h1>欢迎来到首页</h1>
      <Counter />
    </div>
  );
}


数据获取和处理

API路由

创建API端点很简单:

// routes/api/users.ts
import { HandlerContext } from "$fresh/server.ts";

export const handler = {
  async GET(_req: Request, _ctx: HandlerContext) {
    const users = [
      { id: 1, name: "张三" },
      { id: 2, name: "李四" }
    ];
    
    return new Response(JSON.stringify(users), {
      headers: { "Content-Type": "application/json" }
    });
  }
};

页面数据获取

// routes/users.tsx
import { Handlers, PageProps } from "$fresh/server.ts";

interface User {
  id: number;
  name: string;
}

export const handler: Handlers<User[]> = {
  async GET(_req, ctx) {
    const users: User[] = await fetchUsers(); // 模拟数据获取
    return ctx.render(users);
  }
};

export default function UsersPage({ data }: PageProps<User[]>) {
  return (
    <div>
      <h1>用户列表</h1>
      <ul>
        {data.map(user => (
          <li key={user.id}>{user.name}</li>
        ))}
      </ul>
    </div>
  );
}

async function fetchUsers(): Promise<User[]> {
  // 实际项目中这里可能是数据库查询
  return [
    { id: 1, name: "张三" },
    { id: 2, name: "李四" }
  ];
}


部署方案

Deno Deploy(官方推荐)

deno deploy  # 一键部署到全球边缘节点

Cloudflare Pages(支持Vite模式)

将代码推送到GitHub后,Cloudflare Pages会自动识别vite.config.ts文件并进行构建,5分钟左右就能上线。

其他部署方式

Docker部署

FROM denoland/deno:latest

WORKDIR /app
COPY . .
RUN deno cache main.ts

EXPOSE 8000
CMD ["run", "-A", "main.ts"]


性能优势

零客户端JS默认

Fresh默认不向客户端发送任何JavaScript,这意味着:

  • 首屏加载速度极快

  • 更好的seo支持

  • 更少的网络传输量

Islands架构

只在需要交互的组件中加载JS,而不是整个页面。这显著减少了客户端需要处理的JavaScript代码量。

边缘部署

通过Deno Deploy,你的应用可以运行在全球30多个边缘节点上,为用户提供更快的访问速度。


适用场景

适合使用Fresh的情况

  • 内容为主的网站(博客、文档站、企业官网)

  • 需要良好SEO的Web应用

  • 希望快速部署到全球边缘节点的项目

  • 想要极简配置的开发体验

可能不适合的情况

  • 需要大量客户端交互的复杂应用

  • 依赖特定Node.js生态库的项目

  • 团队对Deno生态不熟悉


学习资源

  • 官方文档:https://fresh.deno.dev/

  • Fresh 2.0介绍:https://deno.com/blog/fresh-and-vite

  • GitHub仓库:https://github.com/denoland/fresh

  • 示例项目:https://github.com/denoland/fresh/tree/main/examples


总结

Fresh 2.0将Deno的简洁和Vite的速度完美结合:

  • 开发体验像Vite一样流畅

  • 产物体积像Deno一样轻量

  • 部署过程像边缘函数一样简单

现在就可以尝试将build.target设置为"vite",提前体验下一代全栈框架的强大能力。无论你是想要更快的开发体验,还是更好的性能表现,Fresh都值得一试。

对于还在纠结选择Next.js还是Nuxt的开发者来说,Fresh提供了一个全新的选择。它简化了配置流程,优化了开发体验,让开发者能够更专注于业务逻辑而不是工具配置。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/article/detial/12973

Angular、Vue、React 和前端的未来

越来越多的人开始站队 Angular、Vue、React,仅仅围绕这些库或者框架进行前端技术讨论,这实在不是什么好的现象。其实我想基于我个人的经验聊下前端的演进和未来,希望可以贡献微薄的力量,消除一些我个人认为的前端社区不太好的风气。

JavaScript 框架的探索与变迁

近几年可谓是 JavaScript 的大爆炸纪元,各种框架类库层出不穷,它们给前端带来一个又一个的新思想。从以前我们用的 jQuery 直接操作 DOM,到 BackboneJS、Dojo 提供监听器的形式,在到 Ember.js、AngularJS 数据绑定的理念,再到现在的 React、Vue 虚拟 DOM 的思想。

新框架(新工具,语言)从入门到精通的正确姿势

新框架(新工具,语言),一、了解概念,把握思路,二、迅速实战,见招拆招,三、深入文档,求人不如求己,四、掌握原理,有恃无恐,五、源码分析,自立门户。如果你已经熟悉一门计算机语言,当再学习其他语言的时候,会发现他们几乎是大同小异,对比着学习,会令你事半功倍。

现代 js 框架存在的根本原因

我曾见过很多很多人盲目地使用(前端)框架,如 React,Angular 或 Vue等等。这些框架提供了许多有意思的东西:它们支持组件化;它们有强大的社区支持;它们有很多(基于框架的)第三方库来解决问题;它们有很多(很好的)第三方组件;它们有浏览器扩展工具来帮助调试;它们适合做单页应用。

Uber开源Fusion.js:一个基于插件架构的通用Web框架

Web 技术变化得很快,而最佳技术实践也在不断发展。Uber 的 Web 平台团队开发了 Fusion.js,一个开源的 Web 框架,用于简化 Web 开发,并构建出高性能的轻量级 Web 应用程序。

web前端框架选择_前端框架是解药还是毒药?

要使用现代的前端框架,你需要下载开发环境和依赖,编译代码,然后在浏览器上运行。这个是好是坏?究竟是什么导致了这种不必要的复杂性?是因为我们构建的网站太复杂,还是因为框架本身就很复杂?

前端框架选型

有一个流传较广的笑话,一个人在stackoverflow中提了一个问题,如何使用javascript实现一个数字与另外一个数字相加。最高票回答是你应该使用jQuery插件,jQuery插件可以做任何事情。 历史总是在重演,以前是jQuery,现在可能是react或vue。不同的框架有不同的应用场景,杀鸡不要用牛刀

基于wsgiref模块DIY一个web框架

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法

Ionic 框架宣布 2019 年将正式支持 Vue 和 React

Ionic 是一个高级的 HTML5 移动端应用框架,也是一个开发混合移动应用的前端框架,旨在让 Web 开发者更轻松地构建、测试、部署和监控跨平台应用。Ionic 基于 Angular 语法,之前一直不支持 Vue 和 React 。

Nancy_轻量级的Web框架

最近想找一个简单的.Net下的轻量级Web框架,作为用户的本地的一个WebServer,实现同浏览器程序的一些简单交互,并调用本地服务,实现类似浏览器插件的功能。它有如下几点要求:

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!