statamic / ssg

The official Statamic Static Site Generator
234 stars 24 forks source link

Generate files concurrently #54

Closed jasonvarga closed 3 years ago

jasonvarga commented 3 years ago

This PR uses Spatie's fork package to split the content file generation into as many chunks as you request. Each chunk will run at the same time.

You must have spatie/fork installed, which requires PHP 8.

composer require spatie/fork

You can specify how many "workers" should be used with an option.

php please ssg:generate --workers=4

Each worker will spawn a separate PHP process, so you should only use as many workers as you have CPU cores.

The console output has been adjusted a little to cope with the concurrency. Rather than output each line, you get a single line that is constantly updating, and you will see all the errors right at the end.

image

If you don't have spatie/fork installed, it'll tell you:

image

If you use --workers=1 (for some reason) or don't specify the option at all, it'll happily just chug along without concurrency.

Fixes #16

jasonvarga commented 3 years ago

Ah spatie/fork requires php8. 🤔

duncanmcclean commented 3 years ago

Maybe it could just check if fork is installed (might need to be done separately) and if you're running PHP 8 when someone provides the additional param.

Although, I'm not sure if that would work....

jasonvarga commented 3 years ago

Yeah either we just bump the PHP requirement of ssg to 8, or do that.

jasonvarga commented 3 years ago

Okay I've made it so that you can only use concurrency if you manually install spatie/fork.