gik|iewicz

szukaj
pnpm 12 przepisany w Ruście — instalacje szybsze nawet o 90 procent

pnpm 12 przepisany w Ruście — instalacje szybsze nawet o 90 procent

pnpm 12 to pierwsza wersja tego menedżera pakietów z rdzeniem przepisanym w całości w Ruście. Pierwsze benchmarki pokazują skrócenie czasu instalacji o maksymalnie 90 procent, przy pełnej kompatybilności z workflow i lockfile’ami znanymi z pnpm 11. Zespół projektu porzucił JavaScript jako język implementacji, argumentując, że ECMAScript przestał nadążać za wymaganiami wydajnościowymi narzędzi deweloperskich tej klasy.

TL;DR: pnpm 12 przepisuje menedżer pakietów w Ruście, osiągając wzrosty wydajności do 90 procent w testach instalacji. Lockfile’i i przepływy pracy z pnpm 11 pozostają zachowane, więc migracja ma być niemal bezbolesna – również dla monorepo. Jednakże pełne korzyści wymagają przejścia na nowy format konfiguracji.

Dlaczego pnpm 12 zostało przepisane w Ruście?

Decyzja o przepisaniu silnika z JavaScriptu na Rust wynika bezpośrednio z ograniczeń ECMAScript. Jak relacjonuje The Register, twórcy pnpm stwierdzili, że język przestał nadążać za skalą problemów, które rozwiązuje współczesny menedżer pakietów. Operacje na plikach, rozwiązywanie zależności oraz parsowanie manifestów to zadania, w których narzut środowiska Node.js staje się wąskim gardłem. Rust oferuje natywne wykonanie bez warstwy interpretera, zatem zysk jest odczuwalny zwłaszcza na dużych projektach.

To nie pierwszy taki ruch w ekosystemie. Na przykład TypeScript 7.0 z natywnym kompilatorem w Go przyniósł dziesięciokrotnie szybsze budowanie, a npm 12 poszedł w stronę restrykcji bezpieczeństwa skryptów instalacyjnych. Trend jest jednoznaczny: narzędzia deweloperskie wracają do języków kompilowanych.

Jak duże są realne przyspieszenia instalacji?

Maksymalnie 90 procent krótszy czas instalacji – tyle wynoszą najlepsze wyniki benchmarków publikowanych po premierze. Heise online podkreśla, że dotyczy to konkretnych scenariuszy, przede wszystkim instalacji na Linuksie oraz operacji typu cold install, gdzie brakuje cache lokalnego. W codziennej pracy na mniejszych projektach przyrost będzie odpowiednio mniejszy. Mimo to sam kierunek zmian jest istotny dla zespołów utrzymujących monorepo z tysiącami zależności.

Benchmarki publikowane po wydaniu pnpm 12 pokazują skrócenie czasu instalacji o maksymalnie 90 procent w porównaniu z wersją 11, bez zmian w strukturze lockfile (Źródło: heise online, Socket).

Czy workflow z pnpm 11 nadal działa?

Tak, i jest to jeden z głównych argumentów sprzedażowych tej wersji. Zgodnie z analizą Socket przepisanie w Rust zachowuje lockfile’i oraz dotychczasowe przepływy pracy pnpm 11, dzięki czemu aktualizacja ma być bezobsługowa dla większości projektów. Deweloperzy nie muszą zmieniać skryptów CI/CD ani struktury workspace. Co więcej, The Register opisuje tę aktualizację jako zero-friction speedup – przyspieszenie bez tarcia – dla osób pracujących z monorepo.

Nie oznacza to jednak zeru zmian. Publikacje niemieckojęzyczne, na przykład ad-hoc-news, zwracają uwagę, że pełne wykorzystanie nowego silnika wymaga przejścia na zaktualizowany format konfiguracji. Podobnie jak przy zmianach bezpieczeństwa w npm 12, część organizacji będzie potrzebowała planu migracji.

Co nowego przynosi pnpm 12 poza prędkością?

Rewrite w Rust to fundament, jednakże wydanie zawiera też elementy funkcjonalne. Wersja 12.1, opisana na oficjalnym blogu pnpm, przenosi do CLI w Ruście nowy scheduler zadań dla workspace’ów oraz wprowadza trwałe zapisywanie pewnych danych, co dodatkowo skraca kolejne uruchomienia. Dla porządku warto zestawić najważniejsze obszary zmian:

  • natywny silnik instalacji w Rust zastępujący implementację JavaScriptową,
  • zachowana kompatybilność lockfile’ów z pnpm 11,
  • nowy scheduler zadań dla monorepo (od wersji 12.1),
  • trwałe przechowywanie danych przyspieszające powtórne operacje,
  • zaktualizowany format konfiguracji wymagany do pełnych korzyści,
  • poprawa wydajności szczególnie widoczna na Linuksie,
  • brak konieczności przepisywania skryptów CI/CD,
  • trwałe cache’owanie danych między uruchomieniami.
Aspektpnpm 11pnpm 12
Język implementacjiJavaScriptRust
Czas instalacjipunkt odniesieniado 90% krócej
Lockfileoryginalny formatzachowany
Scheduler zadaństarynowy, w CLI Rust

Najbardziej rekomendowanym źródłem aktualności pozostaje repozytorium projektu – to tam najszybciej pojawią się łaty ewentualnych problemów kompatybilności po pierwszej fali wdrożeń.

Jak wygląda migracja z pnpm 11 do pnpm 12 w praktyce?

Migracja ma być bezobsługowa dla większości projektów, ponieważ lockfile’i oraz przepływy pracy pnpm 11 pozostają zachowane (Źródło: Socket). Deweloperzy mogą zatem wykonać aktualizację bez przepisywania skryptów CI/CD oraz bez zmian w strukturze workspace. Jedyny wymagany krok to dostosowanie konfiguracji – ad-hoc-news wskazuje, że przejście na zaktualizowany format konfiguracji warunkuje dostęp do pełnej wydajności nowego silnika. W monorepo warto jednak przetestować instalację na gałęzi przed wdrożeniem na produkcję. Prosta zasada działa tu najlepiej.

Zespół pnpm opisuje tę aktualizację jako zero-friction speedup dla pracujących z monorepo (Źródło: The Register). W praktyce oznacza to, że największe zespoły – te z tysiącami zależności – zyskują najwięcej bez konieczności zmian czegokolwiek w pipeline’ach.

Czy pnpm 12 różni się wydajnościowo na Linuksie i Windowsie?

Tak, jednak różnice mają charakter ilościowy, nie jakościowy. Publikacje heise online wskazują, że przyrosty do 90 procent dotyczą przede wszystkim instalacji na Linuksie, zwłaszcza operacji cold install bez lokalnego cache. Na innych platformach zyski będą odpowiednio mniejsze, choć sam silnik w Ruście działa wszędzie tak samo. Ponadto wersja 12.1 dodaje trwałe zapisywanie pewnych danych, co skraca także kolejne uruchomienia niezależnie od systemu. Zatem wybór platformy nie blokuje migracji – wpływa jedynie na skalę przyspieszenia.

Dla zespołów utrzymujących kontenery CI na Linuksie to szczególnie korzystna wiadomość. Na przykład pipeline’y budujące obrazy Docker od zera, bez cache, korzystają dokładnie ze scenariusza, w którym benchmarki pokazują największe różnice.

Co oznacza przepisanie pnpm dla ekosystemu narzędzi JavaScript?

Decyzja zespołu pnpm wpisuje się w szerszy trend odchodzenia od ECMAScript w narzędziach deweloperskich. Zatem pnpm 12 nie jest wyjątkiem, lecz kolejnym potwierdzeniem kierunku.

Paralelnie bezpieczeństwo ekosystemu npm zaostrza się z innej strony – npm 12 domyślnie wyłączył skrypty instalacyjne. Wydajność i bezpieczeństwo to obecnie dwie główne osie rozwoju infrastruktury pakietów w JavaScript:

  • przepisywanie silników w językach kompilowanych (Rust, Go),
  • restrykcje wykonywania kodu z pakietów w trakcie instalacji,
  • zachowywanie kompatybilności lockfile’ów między wersjami,
  • trwałe cache’owanie danych między uruchomieniami (pnpm 12.1),
  • natywne CLI zastępujące skrypty JavaScript.

Jak pnpm 12 wpływa na pracę z monorepo?

Nowy scheduler zadań dla workspace’ów, trafiający do CLI w Ruście w wersji 12.1, to najważniejsza zmiana dla monorepo. Zgodnie z oficjalnym blogiem pnpm dodatkowo wprowadzono trwałe zapisywanie danych, dzięki czemu powtórne uruchomienia zadań w dużych repozytoriach odbywają się szybciej. W połączeniu z zachowaną kompatybilnością lockfile’ów oznacza to, że zespoły mogą od razu skorzystać z przyspieszenia bez reorganizacji projektu. Mimo to warto monitorować repozytorium projektu pod kątem łatek kompatybilności po pierwszej fali wdrożeń. Duże repozytoria zawsze znajdą przypadki brzegowe.

Często zadawane pytania

O ile procent szybszy jest pnpm 12 względem pnpm 11?

Pierwsze benchmarki pokazują skrócenie czasu instalacji o maksymalnie 90 procent (Źródło: heise online, Socket) – zacznij migrację od projektu z największą liczbą zależności, tam zysk będzie najłatwiejszy do zmierzenia.

Czy muszę zmienić lockfile po przejściu na pnpm 12?

Nie, lockfile’i z pnpm 11 pozostają zachowane (Źródło: Socket), jednak pełne korzyści wydajnościowe wymagają przejścia na zaktualizowany format konfiguracji (Źródło: ad-hoc-news).

Czy pnpm 12 wymaga zmian w CI/CD?

Nie – The Register opisuje aktualizację jako zero-friction speedup dla monorepo, bez konieczności przepisywania skryptów CI/CD. Warto jednak wykonać testową instalację na gałęzi przed wdrożeniem.

Na której platformie pnpm 12 przyspiesza najbardziej?

Na Linuksie, zwłaszcza przy cold install bez lokalnego cache (Źródło: heise online) – zespoły z pipeline’ami kontenerowymi powinny zmierzyć zysk jako pierwsze.

Podsumowanie

pnpm 12 to pierwsza wersja menedżera z rdzeniem w całości napisanym w Ruście. Przynosząca do 90 procent szybsze instalacje w benchmarkach, zachowuje jednocześnie lockfile’i i przepływy pracy pnpm 11, dzięki czemu migracja sprowadza się głównie do aktualizacji formatu konfiguracji. Wersja 12.1 dodatkowo wzbogaca CLI o nowy scheduler zadań dla workspace’ów oraz trwałe przechowywanie danych. Największe zyski odnotowano na Linuksie w scenariuszach cold install, zatem zespoły utrzymujące kontenery CI powinny przyjrzeć się wydaniu w pierwszej kolejności. Ten ruch potwierdza ponadto trwały trend: narzędzia deweloperskie wracają do języków kompilowanych, co wcześniej pokazał już TypeScript 7.0 z kompilatorem w Go.

Jeśli utrzymujesz monorepo albo pipeline CI, w którym czas instalacji rzutuje na długość całego builda – zaktualizuj pnpm do wersji 12 na testowej gałęzi i zmierz różnicę na własnym projekcie. Śledź również oficjalny blog pnpm, bo łaty kompatybilności po pierwszej fali wdrożeń pojawią się właśnie tam.