如果您碰巧使用了 Vercel(以前来自 Zeit.co 的 Now)和 docker-compose,则在启动多个在容器内运行now dev的组件时,有一个简单的调整可以减少启动时间。

version: "3"
services:
  next_frontend:
    context: ./next-app
    volumes:
      - now_cache:/root/.cache/co.zeit.now/dev/builders
  serverless_backend:
    context: ./now-app
    volumes:
      - now_cache:/root/.cache/co.zeit.now/dev/builders
volumes:
  now_cache:

这允许 docker 在构建组件的新版本时以类似于在 Vercel 平台上完成的方式重用已安装的构建器。

调整前的启动时间:

 ▾ ~/code/app
   docker-compose up | ts -s '%.S'
yarn run v1.22.4
$ /app/node_modules/.bin/now dev
02.670810 > Now CLI 19.0.0 — https://zeit.co/feedback
10.620778 > Ready! Available at http://localhost:3000

调整后的启动时间:

 ▾ ~/code/app
   docker-compose up | ts -s '%.S'
yarn run v1.22.4
$ /app/node_modules/.bin/now dev
02.580774 > Now CLI 19.0.0 — https://zeit.co/feedback
02.886081 > Ready! Available at http://localhost:3000

它不会帮助您第一次构建的启动时间,但会加快所有后续启动。

以下是关于为什么以及如何工作的简要说明。


now dev的工作方式是模拟一个构建“沙箱”,类似于在 Vercel 的云中构建您的项目。这个沙盒做了很多繁重的工作,例如将您的/api/public文件夹转换为可部署的无服务器应用程序,并通过 package.json 中的now-buildnow-start等钩子丰富您的开发体验,无论是否提供相同的零配置环境您正在本地或云中运行您的应用程序。

但是,其中一些功能在启动成本方面相当沉重。因此,像往常一样,涉及到缓存。无论 CLI 版本如何,缓存都集中用于您机器上使用now的所有项目。缓存本身包含一些有趣的东西:yarn可执行文件和构建器,之前已被nowCLI 检测到。

由于这个缓存是全局的,docker-compose对此一无所知,并且每个应用程序启动都是一个_冷_。将持久卷安装到该文件夹可以使缓存完全按预期运行。

也可以挂载您的~/.cache/co.zeit.now以为您当前登录的用户重用已经存在的缓存。不过,这可能不适用于您的 CI/CD 管道。

请注意,此构建器缓存未明确记录,因此该行为将来可能会发生变化。

Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐