一、加速原理
Composer 安装时候回向国外的 Packagist 服务器发送请求,因为从所周知的原因,国内请求国外服务器,是有会出现不稳定甚至不可用的情况。
镜像加速就是把国外的数据缓存到国内的服务器上,Composer 客户端只需配置服务器为国内的服务器,即可从国内服务器上下载,稳定性会有很高的提升。
二、要点
要点一:全量与非全量镜像
Composer 安装扩展包的时候,一般会发起两种请求:
- JSON 请求 —— 扩展包元信息,包括 zip 包的下载链接;
- Zip 包请求 —— 扩展包源码压缩包。
全量镜像指的是以上两种请求都使用国内服务器加速。而非全量服务器一般只缓存 JSON 数据。
要点二、更新时间
当一个 PHP 扩展包从 GitHub 上发布新版本的时候,Packagist.org 上会接收到回调并记录新版本的信息。与 GitHub 的回调相比,国内镜像只能通过主动请求 Packagist.org 的方式来获取更新的扩展包版本。
更新时间指的是国内镜像服务器更新请求的频率,意味着当你在 GitHub 上发布了新版本,此新版本需要多长时间才能在国内的镜像服务器上出现。
故更新时间越短越好。
三、调用方式
全局模式(以阿里云为例,推荐):
$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
单独项目使用
$ composer config repo.packagist composer https://mirrors.aliyun.com/composer/
取消镜像
$ composer config -g --unset https://mirrors.aliyun.com/composer/
四、遇到问题
composer
命令后面加上 -vvv (是 3 个 v)可以打印出调错信息,命令如下:
$ composer -vvv create-project laravel/laravel blog
$ composer -vvv require psr/log
常见问题
1、已存在 composer.lock 文件,先删除,再运行 composer install
重新生成。
原因:composer.lock 缓存了之前的配置信息,从而导致新的镜像配置无效。
2、使用 laravel new
命令创建工程, 这个命令会从 这里 下一个 zip 包,里面自带了 composer.lock,和上面原因一样,也无法使用镜像加速,解决方法:
- 方法一 (推荐):
不使用 laravel new
,直接用 composer create-project laravel/laravel xxx
新建工程。
- 方法二:
运行 laravel new xxx
,当看见屏幕出现 - Installing doctrine/inflector 时,Ctrl + C
终止命令,cd xxx 进入,删除 composer.lock,再运行 composer install
。
3、缓存多久更新一次?
- 0 时 - 早上 7 时,这个时间段考虑使用人数不会太频繁,间隔为 15 分钟
- 其余时间,间隔为 5 分钟
正常更新速度可在 1 分内完成 ,但更新太快,会降低 CDN 命中率,如果总有新文件让 CDN 去缓存,反而拖慢了速度,所以故意加了些延迟。我们每次采集中还会删减掉数千个僵尸包,以加快传输速度。
五、常用命令
查看当前版本
$ composer -V
升级版本
$ composer selfupdate
注意 selfupdate 升级命令会连接官方服务器,速度很慢。建议直接下载我们的 composer.phar 镜像,每天都会更新到最新。
六、镜像源列表
1、阿里云 Composer 全量镜像(推荐)
镜像类型:全量镜像
更新时间:1 分钟
镜像说明:阿里云 CDN 加速,更新速度快,推荐使用
2、安畅网络镜像
镜像类型:全量镜像
更新时间:1 分钟
镜像说明:此 Composer 镜像由安畅网络赞助,目前支持元数据、下载包全量代理。
3、交通大学镜像
镜像类型:非全量镜像
镜像说明:上海交通大学提供的 composer 镜像,稳定、快速、现代的镜像服务,推荐使用。