背景
最近引入一个开源的AI项目(使用的技术栈相对比较新)进行二次开发,在我的工作本上启动开发很正常,在我之前老工作本上得启动多次才能成功,在我的一个同事工作本上发现根本启动不起来。
js
"dependencies": {
"antd": "^5.12.7",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"i18next": "^23.7.16",
"umi": "^4.0.90",
"tailwindcss": "^3",
},
"engines": {
"node": ">=18.20.4"
}
问题分析
同时对依赖包版本、兼容性、node_modules
、npm cache
等可能涉及的因素排查了一遍,发现始终无法解决问题,又按照AI提出的一些方案进行插件配置也无法解决问题,折腾了两天也无法投入开发。
按照现象来看,node版本一致、依赖包版本一致、甚至下载的node_modules都是用我提供的压缩包,唯一区别就是工作本不一样。我的工作本是最近国补新买的电脑,之前老工作本用了五年性能有些跟不上,同事的工作本也相对比较老旧。错误日志提示generate failed after 5 second
,大概率是执行某个任务时超时了。
我猜想大概率是电脑性能跟不上导致的问题,于是我操作关了其它额外的所有应用程序,也暂停了火绒的自动检索,尝试把CPU、内存全部压到Vscode应用上,结果和我猜想的一致,启动成功了。
回溯开发
同事遇到的这个问题其实比较典型,在用老工作本时因为可能涉及前端项目、Java项目、Flutter项目等多个业务开发,多开编辑器的情况下就是很卡顿,不过并没有直接错误的场景。自从使用了新的工作本才发现,以前难以解决优化的问题已经消失了。
npm run build
曾经很长一段时间,我受控于前端项目启动、build、热更新都很慢,我还专门在webpack配置、插件性能分析、CPU多核利用(happyThreadPool
)等多维度进行优化,除过打的包由110Mb 降至 23MB
外,速度上基本没有明显提升。
js
const happyThreadPool = HappyPack.ThreadPool({ size: require('os').cpus().length });
config.plugin('HappyPack').use(HappyPack, [
{
id: 'js',
loaders: ['babel-loader'],
threadPool: happyThreadPool,
},
]);
因为happyThreadPool的使用,导致在执行npm run build
时,电脑很难在同步执行其它任务,同事曾经调笑到:咱们项目进入接水时间,因为build用时够来回去水房接水。
对比webpack5在不同环境的构建表现:
特性 | 旧设备 | 新设备 |
---|---|---|
持久缓存构建 | 78s | 14s |
并行压缩 | 45s | 7s |
模块热替换 | 9s | 0.3s |
通过对比webpack构建日志发现:
- 旧设备冷构建平均耗时4分28秒(含babel转译、css压缩、tree shaking)
- 新设备同样任务仅需47秒,热更新响应速度从8-12秒提升至<1秒
使用新工作本后,速度提升了一个维度,我之前绞尽脑汁想要优化的开发速度问题解决了。
复制粘贴
开发过程中,有一个很常见的场景就是文件夹复制粘贴,因为原始项目的问题,项目的依赖包经常安装失败。以这个项目为模板做新项目时经常涉及对node_modules
的复制粘贴。在大多数时候node_modules的依赖包不止文件大、文件数量多(4w+)、目录层级多,无论对其进行压缩、解压迁移,或者直接迁移都很慢,老工作本一般需要花费小半个小时。
自从使用新工作本后,发现以最耗时的直接复制粘贴方式也只需要最多3分钟就可以完成。曾经受控的搭建基本环境慢的问题竟然没了。
在迁移node_modules时:
- 旧SSD硬盘解压4.2万文件耗时26分钟
- NVMe SSD仅需2分15秒完成
实测证明,4K随机读写性能(旧设备87 IOPS vs 新设备580K IOPS)直接影响依赖安装效率
多开应用
曾经的开发,因为vscode本身集成了很多插件,应用占据内存一致很高,为了避免出现卡顿情况。开发基本都是单开工作项目,即使有协同项目也分次修改。更别提同时开发前后端,同时开启idea
、vscode
、chrome
了。同时开发电脑基本会被拉爆,打字都开始延迟。 当同时开启:
- IDEA运行Spring Boot微服务(占用4GB)
- VSCode调试React组件(占用3GB)
- Chrome运行E2E测试(占用2.5GB)
旧设备内存占用率持续>90%,触发频繁的swap交换,导致IDE输入延迟高达800ms
而现在idea (Java开发)、vscode (React开发)、Android Studio (Flutter开发)chrome、DevEco Studio(鸿蒙开发)的多开应用场景下也能开发自如。
开发视角
AI辅助开发
站在我开发的角度来看,随着AI辅助开发的不断接入,开发人员的多线程工作方式将变得越来越普遍,AI在分析需求生成业务代码的过程中本身也消耗大量电脑性能。AI辅助开发效率上的提升我已经能直观感受到了,因为我同时使用了ROO CODE 、MarsCode AI 、GitHub Copilot进行AI辅助开发,开发效率提升60%以上,但是电脑性能的瓶颈可能是影响我开发效率的一个关键因素。
使用GitHub Copilot时,代码建议响应时间:
- 旧设备:1200-1500ms
- 新设备:200-300ms
大语言模型的本地化部署(如CodeLlama 7B)需要至少24GB显存,这直接淘汰了仅配置4GB显存的旧显卡
第三方插件
另一方面,一些开发第三方库的插件因为版本的不断升级,在运行构建过程中对电脑性能也有了要求,回头看一下开头的问题也能发现这一现象。新的项目、新的技术的更迭,反向在推动硬件设备更迭升级。
开发全栈化
随着AI技术普及、企业降本增效,开发人数会减少,但对留下的开发人员来说,技术多趋向于全栈化。全栈意味着电脑上会下载更多的关联应用,同时运行的应用也会更多,对电脑性能也会提出新的挑战。
根据2024年StackOverflow调研,现代全栈开发推荐配置:
- CPU:12核/16线程以上(应对容器虚拟化)
- 内存:64GB DDR5(满足微服务+AI模型驻留)
- 存储:2TB PCIe4.0 SSD(4K随机读写>700K IOPS)
- GPU:12GB显存(支持本地AI训练)
后记
申明一下,不是想推广什么电脑,标题只是想醒目点,只是单纯根据自己最近换电脑经历总结的。