Composer更新缓慢的解决方案

来源:互联网 发布:淘宝外卖点麻辣烫 编辑:程序博客网 时间:2024/04/30 16:15

首先有三个问题

  • 1、composer更新为什么会慢?
  • 2、已经下载的包为什么不再下载?
  • 3、怎么改进速度?

要明白是什么影响了Composer的运行速度,必须先理解Composer的运行原理。Composer的大致运行步骤如下:

分析:

composer 执行update require命令时主要做了这些事情。

  • 1.载入composer.json文件,找到配置的需要安装的第三方软件信息(version)
  • 2.从localRepository缓存目录和CompoesrRepository服务器获取第三方软件packages详细信息,信息存储在一个json文件中,链接像https://packagist.com/p/all$hash.json 这样,如果安装的有第三方依赖管理插件如bower npm,此时也会从官方获取第三方软件的信息。
  • 3.很重要的一步,创建Installer根据输入的参数配置,获取包require和conflict的组件,整合一起分析依赖关系,判断是否执行安装更新等操作。最终得到了需要安装的第三方软件packages信息清单。
  • 4.然后根据配置信息和清单下载链接决定下载方式,source or dist,值得一说的是官方采用file_get_contents下载dist文件。
  • 5.将软件包缓存在composer配置的目录下,并将第三方软件解压安装到项目中的vendor目录,生成用于载入第三方软件的autoload.php等文件并在vendor/composer目录下生成installed.json文件。

解决方案:

总体来看,瓶颈在与2、3、4步,以下为每步的解决方案:
* 第2步: Composer会因为访问Packagist官方网站变慢,我们可以通过使用Composer镜像或者代理服务器。
* 第3步 限制于PHP的运行效率,解决依赖的算法,如果用的第三方软件特别多,rules相应的也会变的特别庞大,容易造成内存不足、超时。我们可以使用hhvm或者效率较高的php7。
* 第4步 主要是下载缓慢,composer默认下载dist依赖包时采用的是file_get_contents,会阻塞其他下载任务。有个plugin解决了这个问题。composer parallel install plugin(使用了curl的多线程下载)源码地址:https://github.com/hirak/prestissimo

0 0