文章预览
less 文件编译是每个前端通用打包工具必备的能力。在 Mako 中,对于 less 文件的编译并没有基于 rust 实现,而是通过 napi 将 less 文件交给 nodejs 的 less loader ,编译好后,再返回给 rust。 Mako 的 rust 部分会根据机器配置启动线程池,将所有 cpu 都利用上,而在遇到 less 文件时,这些线程都会阻塞式等待 less loader 返回,使得在打包大量使用 less 的项目时,可能存在一定性能瓶颈。 我们在使用 mako 构建一个蚂蚁内部的大型项目时,整个构建耗时约为 21s ,而 less 文件的处理约占了 5s 。我们开始研究怎么给 less 编译提速。 我们考虑过两种方案: 用 rust 重新实现 less 编译。这就需要从 0 开始构建一个 less 编译器,成本巨大; 基于 nodejs 的 worker_threads 并行编译 less。对于早期接触 nodejs 的开发者来说,可能对它的印象是:单线程,不适合做并行计算。但
………………………………