TensorArt

2024-09企业项目

AI 内容创作平台与分享社区
查看

项目简介

TensorArt 是一个免费的 AI 生图/视频平台和模型分享社区。

我们由一群热爱 AI 技术的小伙伴组成,致力于打造全球最大的 AI 模型分享社区。

我们希望每个人能体验到 AI 创作的乐趣,AI 并不会代替创作,而是会大幅度提升创作的效率,降低创作表达的门槛。

我们搭建了大规模云端 GPU 计算集群,把所有模型都放在云端,让每个人只需通过网页就能使用最先进的 AI 生图/视频模型。

主要贡献

我主要负责前端的日常维护和新功能迭代,并对构建过程进行了深度优化:

大幅提升了开发与部署效率。

优化背景与原理

这是一个经典的 Nuxt 3 + Vite + Nitro 项目,构建流程分为两阶段:

在第一阶段 Vite 构建时,底层 Rollup 默认开启 output.hoistTransitiveImports 优化策略,会将所有依赖提升至顶层作用域。 该策略在浏览器环境中可避免瀑布式加载、提升解析速度。

但在 Nitro 构建阶段,被提升的依赖会被重复包含在每个入口模块中,导致循环依赖解析复杂度上升,显著增加构建耗时。

// input
// main.js
import value from './other-entry.js';
console.log(value);

// other-entry.js
import externalValue from 'external';
export default 2 * externalValue;

// output
// main.js
import 'external'; // this import has been hoisted from other-entry.js
import value from './other-entry.js';
console.log(value);

// other-entry.js
import externalValue from 'external';
var value = 2 * externalValue;
export default value;

解决方案

关闭 Server 端首次 Vite 构建时的 output.hoistTransitiveImports 优化策略,让模块依赖保留在原始作用域中。 因为 Server 端 Node 环境的模块加载/解析方式与浏览器不同,无需考虑瀑布式加载问题, 关闭该策略可避免依赖重复提升,从而在第二阶段 Nitro 构建时,降低依赖解析复杂度,减少构建时长。

除了构建策略上的优化之外,我还进行了 Docker 镜像构建方面的优化:

通过上述优化措施,成功将项目构建时长从 10 多分钟缩短到 3 分钟,同时将 Docker 镜像体积从 2 GB 压缩到 200 MB,显著提升了开发与部署效率。