001. Composer 加速—— hirak&prestissimo

Composer 加速——hirak/prestissimo

有的时候会因为各种原因,我们使用 Composer 的时候回感觉安装的特别慢,网络问题是一个方面,我们可以使用一些国内的镜像来解决网络的问题,但是依然有些慢,因为 Composer 是单进程方式下载的,也就是说 Composer 安装完一个依赖,才回去下载并安装另一个依赖,任何网络问题都会让这个进程卡主。那么有没有一种方法让 Composer 并发下载所有依赖呢,这样整体安装速度不就会快很多吗?

hirak/prestissimo 就是利用这个思路来加速 Composer 的,看一下这个包的描述——composer parallel install plugin (Composer 并行安装插件)。

补充一点英语词汇: prestissimo  英 [pres'tɪsɪməʊ] 美 [pres'tɪsəˌmoʊ]     n. 最快速度; adj. 最快的,极快的;

安装

首先我们来安装这个扩展包:

$ composer global require hirak/prestissimo

file

注意我们这次使用了 global 这个参数,意思是全局安装某个依赖,因为 hirak/prestissimo 是一个加速 Composer 安装的扩展包,所有的项目或者依赖在安装的时候都可以利用这个扩展包,所以安装在全局是最合适的。

全局的依赖会被安装在 ~/.composer 目录中,.composer 同普通的 Composer 项目一样,有 composer.jsoncomposer.lock 文件,依赖会被安装在 vendor 目录下。使用 cat 命令查看 composer.json 会看到我们全局安装的 hirak/prestissimo 依赖。

file

同项目依赖相同,我们可以方便的更新和移除全局的依赖,只需要增加 global 参数即可。

更新某个全局依赖:

$ composer global update hirak/prestissimo

移除某个全局依赖:

$ composer global remove hirak/prestissimo

使用对比

这个包的安装非常简单,没有什么特殊的使用方法,原来怎么使用 Composer 现在就怎么使用。那么我们来对比一下安装速度,看看是否真的加速了 Composer 的安装。

因为我们平时使用的是 Homestead,但是 Hmoestead 默认只是用了 1 个 Cpu,所以在加速效果并不明显,接下来我会在本地电脑中进行测试,使用我们的 LaraBBS 项目。

首先我们需要知道 Composer 会将下载过的文件,缓存到 ~/.composer/cache 目录下。我们先将这个目录删除,同时删除 LaraBBS 的 vendor 目录:

> rm -rf ~/.composer/cache/*
> cd ~/Code/larabbs
> rm -rf vendor

最后使用 composer install --profile 命令安装依赖,--profile 是显示时间和内存使用信息。

file 省略一些细节 file

可以看到最终的时间为 27.2s

接下来我们卸载 hirak/prestissimo,同时删除刚才安装好的 vendor 目录,删除 Composer 缓存。

> composer global remove remove hirak/prestissimo
> rm -rf vendor
> rm -rf ~/.composer/cache/*

file

同样的执行 composer install --profile 安装依赖:

file 省略一些细节 file

最终的时间为 342.95s,这个时间真的非常久,不过这是已经有缓存了,我们再次删除 vendor 目录,并执行 composer install --profile

file

时间为 16.09s

对比结果

观察一下上述实验,理一下 Composer 安装的流程:

  1. 整理出项目需要的所有依赖,并确定依赖的版本;
  2. 查询缓存,如果有则直接从缓存安装;
  3. 如果没有缓存,则去下载项目并安装;
  4. 重复前两步安装下一个依赖。

hirak/prestissimo 则是在上面的步骤 1 后增加了异步,并发地从仓库中将项目依赖的 Zip 包下载到本地,这样之后的流程就都会直接通过缓存安装,而这个过程是非常快的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注