您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

4大顶级零JavaScript Go框架大火,前端凉凉?

时间:2023-10-30 12:20:48  来源:今日头条  作者:高级前端进阶

前言

本文主要和大家讨论全网最火的4个基于Wasm 的 Go生态 Web 框架,使得开发者不用编写一行 JS 代码就可以写前端应用。在年初,我也确实使用 WebAssembly 将客户端应用成功移植到了 Web,这也是为什么我一直对 WebAssembly 充满好奇的原因。我甚至在头条上开了一个合集《WebAssembly 前沿技术》来专门探讨 WebAssembly ,并将持续关注 WebAssembly 的最新动态。

正如大家所看到的,当我们还在迟疑是否要在日常开发中引入 WebAssembly 的时候,很多优秀的应用、工具已经开始吃 WebAssembly 的红利了,而且取得了不错的成就,这可能也是为什么各个浏览器厂商、开发者如此热衷 WebAssembly 的原因吧。

话不多说,直接进入这几个框架的介绍。

vugu

Vugu(发音为 /ˈvuː.ɡuː/) 是一个用 Go 编写并以 webassembly 为目标的 web UI 的实验库。其受到了以 wasm 为目标的 Go 中 VueJS 库的启发。在 Vugu 的世界里,没有前端开发的那些 Node.js、NPM、JS 等等,也没有庞大的 node_modules 占用大量空间。

Vugu 的典型特征包括:

  • 使用 WebAssembly 在浏览器中运行
  • 单文件组件
  • 类似 Vue 的标记语法
  • 原生的 Go 代码 、标准 Go 构建工具
  • 快速成型
  • ~3 分钟快速启动

Vugu 框架的基本思路如下:

  • 开发者在 .vugu 文件中编写 UI 组件, 这些文件类似于在 JAVAScript 框架中看到的 UI 组件(例如 .vue 文件)。 但是,它们不包含 JavaScript,而是包含用于 if、for 和其他此类功能的 Go 语言表达式。
  • 每个 .vugu 文件都会转换为对应的 .go 文件, Vugu 项目中有一个开发服务器可以在页面重新加载时自动执行此操作,或者可以使用 vugugen 命令行工具与 go generate 集成。 代码生成还尝试在需要时提供合理的默认值,以便 .vugu 文件包含尽可能少的样板文件,同时允许根据需要进行广泛的自定义。
  • 项目被编译为 WebAssembly 模块并在浏览器中运行,当然这依赖于开发服务器,同时也允许对开发服务器进行自定义配置。
  • Vugu 库(包:Github.com/vugu/vugu)提供了根据 .vugu 文件中的标记在网页上高效同步 html DOM 的功能。 支持附加 DOM 事件处理程序(单击等)和将大页面分解为组件等功能。

目前 vugu 在 Github 上通过 MIT 协议开源,有超过 4.6k 的 star,177 的 fork、项目使用量 155、是一个值得关注的跨端项目。

vecty

Vecty 允许开发者使用 WebAssembly 在 Go 中构建响应式和动态的 Web 前端,与 React 和 VueJS 等现代 Web 框架竞争。

通过使用 vecty 框架,开发者可以享受以下诸多好处 :

  • Go 开发人员可以成为有竞争力的前端开发人员
  • 在前端和后端之间共享 Go 代码
  • 通过 Go 包共享组件的可重用性,以便其他开发人员可以简单地导入。

Vecty 框架的目标是:

  • 简单化:从头开始设计,以便新手(如 Go)轻松掌握。
  • 高性能:高效且易于理解的性能,小的包大小,与原始 JS/HTML/css 相同的性能。
  • 可组合:嵌套组件以开发整个用户界面,像任何普通的 Go 包一样在逻辑上将它们分开。
  • 专为 Go 设计(隐式)

Vecty 框架的典型特征包括:

  • 通过标准的 Go 编译器编译为 WebAssembly
  • 包体积小:0.5 MB hello world
  • 快速基于期望的浏览器 DOM diff,支持虚拟 DOM 但资源使用更少。

目前 Vecty 在 Github 上通过 BSD-3-Clause 协议开源,有超过 2.6k 的 star,是一个值得关注的跨端项目。

go-App

Go-app 是一个用于使用 Go 编程语言 (Golang) 和 WebAssembly (Wasm) 构建渐进式 Web 应用程序 (PWA) 的软件包。 UI 是通过使用声明性语法完成的,该语法仅通过使用 Go 编程语言创建和组合 HTML 元素。

因为 Go-app 使用声明式语法,因此开发者只需使用 Go 编程语言即可编写可重用的基于组件的 UI 元素。

// 通过与 HTML 元素组合来显示 Hello world 的组件,
// 条件和绑定
type hello struct {
	app.Compo
	name string
}
func (h *hello) Render() app.UI {
	return app.Div().Body(
		app.H1().Body(
			app.Text("Hello, "),
			app.If(h.name != "",
				app.Text(h.name),
			).Else(
				app.Text("World!"),
			),
		),
		app.P().Body(
			app.Input().
				Type("text").
				Value(h.name).
				Placeholder("What is your name?").
				AutoFocus(true).
				OnChange(h.ValueTo(&h.name)),
		),
	)
}

下面使用 Go 标准 HTTP 模型为使用 go-app 构建的应用程序提供服务。

func mAIn() {
    //Go-app组件路由(客户端):
	app.Route("/", &hello{})
	app.Route("/hello", &hello{})
	app.RunWhenOnBrowser()
    // 标准 HTTP 路由(服务器端)
	http.Handle("/", &app.Handler{
		Name:        "Hello",
		Description: "An Hello World! example",
	})
	if err := http.ListenAndServe(":8000", nil); err != nil {
		log.Fatal(err)
	}
}

go-app 框架还包括以下核心特点:

  • 作为单页应用程序工作
  • 搜索引擎优化友好
  • 可安装
  • 支持离线模式
  • 状态管理

目前 go-app 在 Github 上通过 MIT 协议开源,有超过 7k 的 star,400+的 fork、是一个值得关注的跨端项目。

vue

vue 是 WebAssembly 应用程序的渐进式框架,具有以下核心特点。

  • 为前端空间的框架、状态管理器和路由器提供统一的解决方案
  • 利用模板将应用程序逻辑与前端渲染分开
  • 简化数据绑定以简化状态管理与渲染的关系
  • 鼓励组件重用以提高开发效率

比如下面的 hello world 示例,main.go 文件被编译为 .wasm WebAssembly 文件。

package main
import "github.com/norunners/vue"
type Data struct {
	Message string
}
func main() {
	vue.New(
		vue.El("#app"),
		vue.Template("<p>{{ Message }}</p>"),
		vue.Data(Data{Message: "Hello WebAssembly!"}),
	)
	select {}
}

index.wasmgo.html 文件获取并运行一个 .wasm WebAssembly 文件。

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <script src="{{ .Script }}"></script>
    </head>
    <body>
        <div id="app"></div>
        <script src="{{ .Loader }}"></script>
    </body>
</html>

本文总结

本文主要和大家介绍4大顶级零 JavaScript Go 框架崛起。相信通过本文的阅读,大家对 vue、go-app、vecty、Vugu 会有一个初步的了解。

因为篇幅有限,文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏!

参考资料

https://github.com/hexops/vecty

https://github.com/vugu/vugu

https://www.vugu.org/doc

https://go-app.dev/

https://github.com/maxence-charriere/go-app

https://github.com/norunners/vue

https://medium.com/the-godev-corner/expand-web-app-development-with-go-fc07d55b41f6



Tags:JavaScript   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
17 个你需要知道的 JavaScript 优化技巧
你可能一直在使用JavaScript搞开发,但很多时候你可能对它提供的最新功能并不感冒,尽管这些功能在无需编写额外代码的情况下就可以解决你的问题。作为前端开发人员,我们必须了解...【详细内容】
2024-04-03  Search: JavaScript  点击:(4)  评论:(0)  加入收藏
你不可不知的 15 个 JavaScript 小贴士
在掌握如何编写JavaScript代码之后,那么就进阶到实践&mdash;&mdash;如何真正地解决问题。我们需要更改JS代码使其更简单、更易于阅读,因为这样的程序更易于团队成员之间紧密协...【详细内容】
2024-03-21  Search: JavaScript  点击:(25)  评论:(0)  加入收藏
构建一个通用灵活的JavaScript插件系统?看完你也会!
在软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的Java...【详细内容】
2024-03-20  Search: JavaScript  点击:(20)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  Search: JavaScript  点击:(2)  评论:(0)  加入收藏
跨端轻量JavaScript引擎的实现与探索
一、JavaScript 1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史: 2.JavaScript...【详细内容】
2024-03-12  Search: JavaScript  点击:(2)  评论:(0)  加入收藏
面向AI工程的五大JavaScript工具
令许多人惊讶的是,一向在Web开发领域中大放异彩的JavaScript在开发使用大语言模型(LLM)的应用程序方面同样大有价值。我们在本文中将介绍面向AI工程的五大工具,并为希望将LLM...【详细内容】
2024-02-06  Search: JavaScript  点击:(52)  评论:(0)  加入收藏
18个JavaScript技巧:编写简洁高效的代码
本文翻译自 18 JavaScript Tips : You Should Know for Clean and Efficient Code,作者:Shefali, 略有删改。在这篇文章中,我将分享18个JavaScript技巧,以及一些你应该知道的示例...【详细内容】
2024-01-30  Search: JavaScript  点击:(65)  评论:(0)  加入收藏
使用 JavaScript 清理我的 200GB iCloud,有了一个意外发现!
本文作者在综合成本因素之下,决定用 Java 脚本来清理一下自己的 iCloud,结果却有了一个意外发现,即在 iCloud 中上传同一个视频和删除此视频之后,iCloud 的空间并不一致,这到底是...【详细内容】
2024-01-11  Search: JavaScript  点击:(97)  评论:(0)  加入收藏
JavaScript前端框架2024年展望
Angular、Next.js、React和Solid的维护者和创作者们展望2024年,分享了他们计划中的改进。译自2024 Predictions by JavaScript Frontend Framework Maintainers,作者 Loraine...【详细内容】
2024-01-05  Search: JavaScript  点击:(89)  评论:(0)  加入收藏
JavaScript开发者转向Rust的原因?
JavaScript开发者转向Rust的原因可能有很多,这里列出一些可能的原因: 性能: Rust是一种编译型语言,其性能通常优于JavaScript等解释型语言。对于需要处理大量数据或需要高并发的...【详细内容】
2024-01-04  Search: JavaScript  点击:(96)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(7)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(52)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(46)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(67)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(84)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(85)  评论:(0)  加入收藏
站内最新
站内热门
站内头条