Composer has had a great impact on PHP development - while it wasn't the first package/dependency manager for PHP, it has become the mainstay since it was released 8 years ago. When used regularly, it can take away the pain of dealing with intersecting dependencies of dependencies, and do it pretty quickly.
That's not to say that it isn't without its frustrations, though. Perhaps the biggest one I have experienced (and have heard other developers gripe about from time to time) is when it starts to churn away when you're updating your project's dependencies - especially when you've become accustomed to its normally speedy process. Sometimes it just seems to stop completely - or at least get stuck long enough for you to drink the coffee you went to make while waiting for it to be done.
Here's a few things you can do to help if you should ever find yourself thinking about making a second cup of coffee during a composer update.
Keep Composer up to date
Simple things first - Composer is updated fairly regularly, and these updates can often include code that optimises the resolution and download of dependencies.
Tighten up your project dependencies specifications
As projects get older, dependencies (hopefully) get updated. You might have started the project with
"laravel/framework": "^6.1" in your
composer.json file, but that was months ago, and the framework is currently at
By leaving your old version constraints in your composer.json file, you're potentially asking Composer to check on every version between now and then, of every package you've required into your project. Then it has to check on every version of each package they depend on.
So, it's a good idea to update your constraints every once in a while.
You can see what versions are currently installed with
composer info --direct, while
composer outdated --direct will let you know which packages have newer versions available.
Some code editors, such as PhpStorm, can also help identify outdated specifications in your
composer.json file by showing the currently installed version alongside the current specification.
Clear your cache, remove the vendor directory and lockfile, and do a composer update.
composer cc rm -r composer.lock vendor composer update
Speed up the download
By default, Composer will download everything serially. This can end up being slow if you're creating or cloning a project and running Composer for the first time, even though Composer does cache package data.
prestissimo is a plugin for Composer that enables parallel downloads.
Generally, though, my experience has been that most of the time Composer is slow during the resolution phase rather than when it is downloading.
Get under the hood
This is not so much a way to speed up Composer, but it is important to be able to see what is going on and diagnosing any issues you might encounter with Composer.
composer update -vvv (three v's) will tell Composer to be extra verbose - and you will see everything it's doing. This will help you pick up if Composer is spinning its wheels trying to resolve a dependency or has encountered some other problem.
Composer 2 is around the corner, and will be bringing a bunch of improvements.