在问题(#3156)讨论中,composer GitHub页面上的"composer非常慢"建议
使用:在全局配置中使用https://url重新定义packagist repo
$ composer config --global repo.packagist composer https://packagist.org
这应该可以解决降级问题,但解决它当然会很有趣。
它确实带来了可观的速度提升我刚刚为ZendFramework2测试了这个(见下面的测试)。
它是如何工作的(为什么禁用allow_ssl_downgrade
选项会使进程更快?)
编辑
我运行composer create-project zendframework/zendframework
时结合了两个因素:缓存和通过关闭allow_ssl_downgrade
重新定义packagist repo。对于由此产生的四种情况,我得到了以下结果:
默认配置:
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
选项的实际作用是什么(这种"降级"意味着什么?优点和缺点是什么?)
因为第二次运行composer create-project zendframework/zendframework
时,它从composer的缓存中拿走了所有内容,而不是再次下载!
您可以看到,如果您第二次运行它,它会输出类似以下内容的Loading from cache
:
Installing zendframework/zendframework (2.5.2)
- Installing zendframework/zendframework (2.5.2)
Loading from cache
确保在测试之间运行composer clear-cache
以获得可靠的结果。
编辑//
如果我们查看Composer的源代码,我们可以找到这一行:
if ($this->allowSslDowngrade) {
$this->url = str_replace('https://', 'http://', $this->url);
}
如果allowSslDowngrade = true
主文件通过https检索(请参阅此处),其余文件通过http检索,因为这要快得多。通过sha256检查其他文件的完整性,这应该是对MITM攻击的充分保护。
如果allowSslDowngrade = false
所有内容都通过https 检索
测量结果的差异可能是由于不同的互联网速度或服务器cpu/网络负载或其他原因造成的。
您真的清除了中间的缓存吗?因为这也会显著减少第二次运行的安装时间。
我无法通过更改配置和清除两者之间的缓存来创建如此大的差异。