21CTO 导读:当今世界上几个AI 巨头急火火地规划着数据中心,然后运行数万亿行人工智能生成的“垃圾代码”时,一位软件工程师却另辟蹊径:构建一个全新的生态系统,用于编写和运行可在台式电脑上运行的微型或小型应用程序。
这款开源产品让我们仿佛回到了 1992 年。
一位自称id 为“万物创造者”的软件工程师Tarwin Stroh-Spijer创建了一个名为 TinyJS 的 JavaScript 运行时,用于为 macOS、Linux 或 Windows 开发小型或微型的应用程序(许多应用程序在磁盘上占用约 6MB 或更少)。
TinyJS的Logo 与官方网站地址:https://tinyjs.app/
需要先澄清的一点是,TinyJS 并非功能受限的“无代码”框架。
它不仅为开发者提供 JavaScript 的全部编程能力,还具备底层操作系统提供的视觉渲染跟通信能力。
TinyJS之所以如此精简,秘诀是什么?
在于它利用了各操作系统自带的WebView窗口,借助内置的浏览器引擎来渲染应用,而不是从零开始实现用户界面层。它在macOS上使用WebKit运行应用,在Windows上使用WebView2,在Linux上使用WebKitGTK。
它可以安全地写入操作系统凭据存储,使用 SQLite 数据库,甚至可以处理应用程序更新。
TinyJS 的方法与普遍使用的 Electron 框架也截然不同。
比如 Electron 框架会将Chromium开源浏览器内核与每个桌面应用程序捆绑在一起。但Electron承诺应用程序在所有平台上的外观和体验完全一致,而 TinyJS 应用程序在不同平台上运行时会存在细微的视觉差异,这是由于每个操作系统的渲染引擎工作方式略有不同导致。
Electron 应用为这种跨平台统一性付出了代价:使用 Electron,即使是最基本的应用程序的尺寸也可能达到 150MB。
Rust 也并非总是最佳的解决方案。
TinyJS 的核心是txiki.js,这是一个由 Saúl Ibarra Corretgé 编写的超紧凑型 JavaScript 运行时,相比之下,Deno和Bun都显得是一种庞然大物。TinyJS入门包大约 5.6MB,启动器也只占用大约 1MB 的空间。其余部分基本上都是开发者代码。
Stroh-Spijer 还利用操作系统进程间通信机制来处理数据传输,从而简化了开发过程,无需为每个应用程序捆绑 HTTP 服务器,也避免了由此带来的所有安全问题。
TinyJS 的所有代码都使用 JavaScript、CSS 和 HTML 编写,无需编译。由于网页设计能力近年来突飞猛进,这里面拥有广阔的创作空间。
Tauri项目的目标与 TinyJS 类似,都是创建小型应用程序,并且可以交付 10MB 的桌面应用程序。但正如 Stroh-Spijer在 TinyJS 网站上指出的那样,该框架也存在一些缺点。其中最主要的一点是,你必须使用 Rust 编写应用程序 ——这需要学习 Rust ,此外还存在其他一些缺点。
此外,TinyJS 将应用程序的许多底层功能(例如对话框、菜单、托盘、剪贴板、自动更新)交托给操作系统,而使用 Tauri 则必须一次导入一个插件。
开发者也不需要将Node.js作为依赖项,除非你想要运行需要 Node.js 的框架,例如 Vite。它还支持其他 JavaScript 框架,例如 React、Vue 和 Svelte。它也可以完全不依赖任何库运行。
还可以使用 TinyJS 来封装网页,只需将窗口指向一个 URL 即可。想象一下,你最喜欢的网站就像一个桌面应用一模一样。
下面我们测试,当安装完成后,可以使用以下命令在命令行中搭建脚手架:
tinyjs new appname默认情况下,它会生成一个“纯净”的应用程序,其中包含一些文件和文件夹——其中重要的(至少在测试和学习初期)是:
main.js 是一个“后端”文件,用于构建可供前端代码访问的服务。在这里,你可以处理前端 JavaScript 无法完成的“系统”操作。
例如,后端代码可以使用以下代码:
export const api: Record<string, TinyApiHandler> = {hello: async ({ name }: { name: string }) => 'hi ' + name + ' — from the backend',};
然后,它将在前端以如下形式提供:
await tiny.api.call('hello', {...}):运行此应用通过tinyjs dev命令完成,该命令会加载应用并启用热模块替换 (HMR)。
利用 TinyJS,Stroh-Spijer 还创建了一个“应用商店”,当然它可以完全在Windows/MacOS电脑桌面上运行。目前,该商店收录了他编写的 25 个示例应用。
而且这些示例应用全部免费,功能各异,而且趣味感十足。
大概看了一下应用列表,包括一个世界时钟(3.8MB 的 zip 文件)、一个剪贴板历史记录应用(3.7MB)、一个 Markdown 编辑器(4.9MB)、一个桌面精灵(3.8MB)、一个 SQLite 浏览器(4.1MB),还有一个最令人印象深刻的——经典Winamp音乐播放器的克隆版,它仅占用 7.4MB 的硬盘空间。
也有用户测试说,一些开始为 Mac 编写的应用程序在 Windows 系统上存在不少 bug,不过从初期看这都应该属于正常。
你也可以跳过这些示例,直接开发构建自己的应用程序。
通过TinyJS来看,当今的电脑性能虽然已经很强大了,但是即便以上世纪的标准来看,开发体积小巧的应用程序仍然有很多好处和需求。
不少应用程序和网页浏览器都是内存的消耗大户,因此在桌面上开发更多占用资源少的工具仍是一件好事情。比起臃肿庞大的应用程序,小型应用程序启动速度快,理论上在笔记本电脑上消耗的电量也更少。
用户可以把这些应用添加到桌面上,因为它们真的很轻,很小巧。
作者:洛逸
本篇文章为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 微信公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。
请扫描二维码,使用微信支付哦。