Bun v1.3.12 带来了内置无头浏览器自动化、终端 Markdown 渲染、进程内定时任务等新特性,同时在性能优化和兼容性方面取得了显著进展。本文将通过示例代码和实战指南,帮助开发者快速上手这些新功能。
大家好,我是 iDao。10 年全栈开发,做过架构、运维,也在落地 AI 工程化。这里不搞虚的,只分享能直接跑、能直接用的代码、方案和经验。内容包括:全栈开发实战、系统搭建、可视化大屏、自动化部署、AI 应用、私有化部署等。关注我,一起写能落地的代码,做能上线的项目。
一、Bun.WebView:内置无头浏览器自动化
Bun v1.3.12 引入了 Bun.WebView,这是一个内置的无头浏览器自动化工具,支持 WebKit 和 Chrome 两种后端,提供类似 Playwright 的 API。
主要特性
- 原生事件模拟:所有输入均以操作系统级别事件分发,无法被网站检测为自动化。
- 自动等待:支持选择器操作的自动等待,确保元素可见、稳定后再执行。
- 跨平台支持:WebKit 默认用于 macOS,Chrome 后端支持所有平台。
示例代码
以下代码展示了如何使用 Bun.WebView 进行页面导航、点击和截图:
javascript
await using view = new Bun.WebView({ width: 800, height: 600 });
await view.navigate("https://bun.sh");
await view.click("a[href='/docs']"); // 等待元素可点击并执行点击
await view.scroll(0, 400); // 模拟滚轮事件
const title = await view.evaluate("document.title");
const png = await view.screenshot({ format: "jpeg", quality: 90 });
await Bun.write("page.jpg", png);
二、Markdown 渲染:终端直接预览
Bun v1.3.12 支持直接在终端渲染 Markdown 文件,提供了两种方式:
- 运行
bun ./file.md。 - 使用
Bun.markdown.ansi()API。
示例代码
以下代码展示了如何使用 Bun.markdown.ansi() 渲染 Markdown:
javascript
const out = Bun.markdown.ansi("# Hello\n\n**bold** and *italic*\n");
process.stdout.write(out);
// 启用超链接
const linked = Bun.markdown.ansi("[docs](https://bun.sh)", { hyperlinks: true });
process.stdout.write(linked);
三、Bun.cron:进程内定时任务
Bun.cron 新增了回调函数支持,适合长时间运行的服务和容器。
示例代码
以下代码展示了如何使用 Bun.cron 定时执行异步任务:
javascript
Bun.cron("* * * * *", async () => {
console.log("每分钟执行一次");
});
四、性能优化与新特性
URLPattern 性能提升
URLPattern.test() 和 URLPattern.exec() 的性能提升了最高 2.3 倍。
javascript
const pattern = new URLPattern({ pathname: "/api/users/:id/posts/:postId" });
pattern.test("https://example.com/api/users/42/posts/123");
Bun.stripANSI 和 Bun.stringWidth 的 SIMD 优化
Bun.stripANSI 和 Bun.stringWidth 的性能显著提升,处理速度最高提升 11 倍。
bun build 构建优化
修复了线程池问题,使低核机器上的构建速度提升了 1.43 倍。
五、Bug 修复与兼容性改进
- 修复了多个 Node.js 兼容性问题,例如
process.env在某些情况下为空的问题。 - 改进了
Bun.serve的 TCP_DEFER_ACCEPT 支持,降低了 HTTP 请求延迟。
六、升级指南与验证步骤
升级到 v1.3.12
运行以下命令升级到最新版本:
bash
bun upgrade
验证新功能
验证 Bun.WebView 是否正常工作:
javascript
await using view = new Bun.WebView();
await view.navigate("https://example.com");
console.log(await view.title);
七、总结
Bun v1.3.12 带来了众多令人兴奋的新特性和性能优化,尤其是 Bun.WebView 和 Bun.cron 的引入,为开发者提供了更多可能性。通过本文的示例代码和实战指南,相信你已经掌握了这些新功能的使用方法。
关注 【iDao技术魔方】,获取更多全栈到AI可落地的实战干货。