偶然看到 Google 官方在 B 站发的视频 https://www.bilibili.com/video/BV1Gp4y1A7RA?t=344.8 发现 WebAssembly 真好玩,特别提到了 fastText 这个基于 AI 模型的工具,一上头就打算试试把它搬到浏览器会怎样。
先在 npm 搜索了一下,基本都是只支持 Node 环境使用的,有一个包 fasttext.wasm 说是支持浏览器环境的,结果在 Next.js 中一试直接裂开,各种报错 😂
兴致上来了就一心想着搬到浏览器上,先在原仓库上各种魔改,始终解决不了问题,最后确定应该是要分离浏览器和 Node 环境的实现的,从而能方便的避免各种问题。
各种踩坑之后终于搞定了,现在已部署两个环境,欢迎体验:
这次实现涉及到的技术点汇总一下
按照 fastText 官方的流程无法编译,所幸 fasttext.wasm 有个基于 Xmake 的编译,刚安装怎么也编译不了,最后稀里糊涂把 Xmake 的路走通了 😂
能编译之后就是另一个问题,如何分环境编译,找 emcc 和 Xmake 各种文档研究怎么分环境打包,所幸官方对此早已实现,注入 xmake.lua 的参数也是连蒙带猜可算是注入进去了。
这一路都是靠玄学通关的,如果编译 wasm 的第一步失败的话,我大概就直接弃坑了。最后写了个简单的 benchmark 测试了一下,效果是真不错。
搞完之后就一个想法,关于 Xmake 如果要深入 WebAssembly 大概得入个门才行,现在全靠玄学想想都有点搞 😅 最后 fastText 的核心封装搞定了,应该可以方便扩展 fastText 支持的各种模型功能了,有时间逐步加上,未来可期 😄
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.