在问题(#3156)讨论" composer is very slow"在Composer GitHub页面上suggested到
使用以下命令在全局配置中使用https:// url重新定义packagist repo:
$ composer config --global repo.packagist composer https://packagist.org
这应该可以解决降级问题,但当然解决这个问题会很有意思。
它确实带来了明显的速度提升。我刚刚为Zend Framework 2测试了这个(参见下面的测试)。
它是如何运作的?(为什么禁用 allow_ssl_downgrade
选项会使流程更快?)
修改
我运行composer create-project zendframework/zendframework
结合了两个因素:缓存和重新定义packagist repo并关闭allow_ssl_downgrade
。我得到了以下四个案例的结果:
默认配置:
config: default ([repositories.packagist.url] https?://packagist.org, [repositories.packagist.allow_ssl_downgrade] true)
cache: empty (composer clear-cache)
result: 3m38s
config: default ([repositories.packagist.url] https?://packagist.org, [repositories.packagist.allow_ssl_downgrade] true)
cache: not empty
result: 54s
config: changed ([repositories.packagist.url] https://packagist.org)
cache: empty (composer clear-cache)
result: 3m34s
config: changed ([repositories.packagist.url] https://packagist.org)
cache: not empty
result: 56s
总结:"技巧"禁用allow_ssl_downgrade
会带来速度提升。
然而,很高兴知道: allow_ssl_downgrade
选项实际上做了什么?(这是什么"降级"意味着什么?有什么优点和缺点?)
答案 0 :(得分:1)
因为第二次运行composer create-project zendframework/zendframework
它会从作曲家的缓存中取出所有内容,而不是再次下载!
如果您再次运行它,您可以看到它输出的内容如下所示Loading from cache
:
Installing zendframework/zendframework (2.5.2)
- Installing zendframework/zendframework (2.5.2)
Loading from cache
确保在测试之间运行composer clear-cache
以获得可靠的结果。
如果我们查看Composer的源代码,我们可以找到this line:
if ($this->allowSslDowngrade) {
$this->url = str_replace('https://', 'http://', $this->url);
}
如果allowSslDowngrade = true
主文件通过https(see here)检索,其余部分通过http检索,因为这样会更快。通过sha256检查其他文件的完整性,这应该足以防止MITM攻击。
如果allowSslDowngrade = false
通过https检索所有内容
测量结果的差异可能是因为Internet速度或服务器CPU /网络负载不同而导致的。
答案 1 :(得分:0)
你真的清除了它们之间的缓存吗?因为这也会显着减少第二次运行的安装时间。
我无法通过更改配置和清除其间的缓存来创建如此大的差异。