Faster-than-light composer on Mac with HHVM
September 11, 2015Tristan Roussel2 min read
Hello my dearest Mac geeks!
Time has passed, HHVM was still incredibly fast, but lost its compatibility with Mac.
A few days ago, after 2 years of intense work, a (too discreet in my opinion) announcement popped:
Awesomeness was back.
brew tap hhvm/hhvm brew install hhvm
A warning though, installation takes a long time (as in “can take more than 1 hour on slow computers”).
Awesome! Wait, what do I need HHVM for again?
Who has never had any performance problem with Composer?
composer update command can be very slow and eat a lot of memory if you have quite a few dependencies, which is often the case on a Symfony project.
I ran out of memory several times because of it, generally after a few minutes of intense computation.
Situation is considerably better than in the past thanks to some incredible tricks like this one.
And yet, 2GB of RAM is rarely sufficient, and it still takes more than 5 minutes on some computers to update the configuration.
First thing to speed up composer:
if you work in a virtual machine with file sharing with your Mac (with Vagrant for example), you should not try
composer update inside the machine, but in your Mac.
That leads us to HHVM:
hhvm $(brew --prefix)/bin/composer.phar update
should rock your world on your Mac!
Don’t like to type all this gibberish?
Make it an alias.
bash for example, add this to your
alias hcomposer='hhvm $(brew --prefix)/bin/composer.phar'
Another warning, when updating outside your environment with either your Mac PHP or HHVM, you should use the option
--ignore-platform-reqs to ignore the version differences in PHP and the extensions.
Benchmark with “oldie” PHP 5.6.12 on a naked Symfony Standard Edition (on a quite newish MacBook Pro, so it’s still really fast):
composer update --profile [8.0MB/0.07s] Loading composer repositories with package information [8.4MB/0.20s] Updating dependencies (including require-dev) [367.7MB/14.71s] - Installing symfony/symfony (2.8.x-dev 685a1cf) [367.7MB/14.71s] Cloning 685a1cf6f441459fb61a25acfe93853d016f46c2 …
With shiny bleeding edge HHVM:
hcomposer update --profile [8.0MB/1.16s] Loading composer repositories with package information [8.0MB/1.64s] Updating dependencies (including require-dev) [126.0MB/5.66s] - Installing symfony/symfony (2.8.x-dev 685a1cf) [126.0MB/5.84s] Cloning 685a1cf6f441459fb61a25acfe93853d016f46c2 …
Now, your biggest problem will be finding a way to spend all this free time left for you.