Composer如何重新定义packagist repo工作?

时间:2015-11-19 13:07:08

标签: php configuration composer-php packagist

在问题(#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选项实际上做了什么?(这是什么"降级"意味着什么?有什么优点和缺点?)

2 个答案:

答案 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以获得可靠的结果。

EDIT //

如果我们查看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)

你真的清除了它们之间的缓存吗?因为这也会显着减少第二次运行的安装时间。

我无法通过更改配置和清除其间的缓存来创建如此大的差异。