如果你已经对这些问题感到厌倦:
每次安装依赖都要等待很长时间
打包后的文件体积动不动就几百KB
想要部署到边缘节点还要研究各种平台的配置
那么可以花几分钟了解一下Fresh这个新框架。
Fresh是Deno官方团队开发的全栈Web框架。它的特点是无需配置、默认不包含客户端JS、支持边缘部署。
核心技术特点:
运行环境:直接运行在Deno上,不是Node.js,天然支持TypeScript
部署方案:官方推荐Deno Deploy,一键推送到全球30多个边缘节点;也支持Docker自建部署
2024年9月,Fresh宣布2.0进入Beta阶段:
api已经稳定,保证向后兼容
稳定性接近正式版,可以在生产环境中试用
重要更新:内置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端点很简单:
// 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 # 一键部署到全球边缘节点
将代码推送到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"]
Fresh默认不向客户端发送任何JavaScript,这意味着:
首屏加载速度极快
更好的seo支持
更少的网络传输量
只在需要交互的组件中加载JS,而不是整个页面。这显著减少了客户端需要处理的JavaScript代码量。
通过Deno Deploy,你的应用可以运行在全球30多个边缘节点上,为用户提供更快的访问速度。
内容为主的网站(博客、文档站、企业官网)
需要良好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提供了一个全新的选择。它简化了配置流程,优化了开发体验,让开发者能够更专注于业务逻辑而不是工具配置。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!
越来越多的人开始站队 Angular、Vue、React,仅仅围绕这些库或者框架进行前端技术讨论,这实在不是什么好的现象。其实我想基于我个人的经验聊下前端的演进和未来,希望可以贡献微薄的力量,消除一些我个人认为的前端社区不太好的风气。
近几年可谓是 JavaScript 的大爆炸纪元,各种框架类库层出不穷,它们给前端带来一个又一个的新思想。从以前我们用的 jQuery 直接操作 DOM,到 BackboneJS、Dojo 提供监听器的形式,在到 Ember.js、AngularJS 数据绑定的理念,再到现在的 React、Vue 虚拟 DOM 的思想。
新框架(新工具,语言),一、了解概念,把握思路,二、迅速实战,见招拆招,三、深入文档,求人不如求己,四、掌握原理,有恃无恐,五、源码分析,自立门户。如果你已经熟悉一门计算机语言,当再学习其他语言的时候,会发现他们几乎是大同小异,对比着学习,会令你事半功倍。
我曾见过很多很多人盲目地使用(前端)框架,如 React,Angular 或 Vue等等。这些框架提供了许多有意思的东西:它们支持组件化;它们有强大的社区支持;它们有很多(基于框架的)第三方库来解决问题;它们有很多(很好的)第三方组件;它们有浏览器扩展工具来帮助调试;它们适合做单页应用。
Web 技术变化得很快,而最佳技术实践也在不断发展。Uber 的 Web 平台团队开发了 Fusion.js,一个开源的 Web 框架,用于简化 Web 开发,并构建出高性能的轻量级 Web 应用程序。
要使用现代的前端框架,你需要下载开发环境和依赖,编译代码,然后在浏览器上运行。这个是好是坏?究竟是什么导致了这种不必要的复杂性?是因为我们构建的网站太复杂,还是因为框架本身就很复杂?
有一个流传较广的笑话,一个人在stackoverflow中提了一个问题,如何使用javascript实现一个数字与另外一个数字相加。最高票回答是你应该使用jQuery插件,jQuery插件可以做任何事情。 历史总是在重演,以前是jQuery,现在可能是react或vue。不同的框架有不同的应用场景,杀鸡不要用牛刀
Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法
Ionic 是一个高级的 HTML5 移动端应用框架,也是一个开发混合移动应用的前端框架,旨在让 Web 开发者更轻松地构建、测试、部署和监控跨平台应用。Ionic 基于 Angular 语法,之前一直不支持 Vue 和 React 。
最近想找一个简单的.Net下的轻量级Web框架,作为用户的本地的一个WebServer,实现同浏览器程序的一些简单交互,并调用本地服务,实现类似浏览器插件的功能。它有如下几点要求:
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!