Asynchroniczność zadań w Gulp
Należy rozumieć, że wszystkie zadania Gulp - są asynchroniczne. Co to oznacza, spójrzmy na przykład. Załóżmy, że wewnątrz zadania publicznego wywoływane są dwa zadania prywatne:
function taskD(cb) {
task1(cb);
task2(cb);
cb();
}
Asynchroniczność oznacza, że zadanie task2
nie będzie czekało na zakończenie wykonania
zadania task1, a będzie wykonywane
równolegle z nim.
Przeanalizujmy to na bardziej praktycznym przykładzie. Niech pierwsze zadanie przekształca LESS na CSS, a drugie zadanie - minimalizuje otrzymany CSS.
W takim przypadku napotkamy problem: przecież nie można zminimalizować pliku CSS zanim trafi do niego wynik kompilacji LESS!
Jednakże, gdyby zadania wykonywały się synchronicznie - sekwencyjnie jedno za drugim, napotkalibyśmy inny problem: zadania, które można wykonać równolegle, wykonywałyby się jedno za drugim, spowalniając pracę Gulp. Przeanalizujmy to również na przykładzie.
Niech pierwsze zadanie minimalizuje pliki CSS, a drugie zadanie - minimalizuje pliki JavaScript. Oczywiste jest, że te dwie niezwiązane operacje można wykonywać jednocześnie.
Na szczęście Gulp dostarcza narzędzia, pozwalające wyraźnie wskazać, które zadania mają być wykonane równolegle, a które - sekwencyjnie. Te narzędzia przeanalizujemy w następnej lekcji.
Wymyśl przykład dwóch zadań, które powinny wykonywać się tylko sekwencyjnie.
Wymyśl przykład dwóch zadań, które powinny wykonywać się tylko równolegle.