pnpm-ന്റെ കോർ ടീം v12-നായി Rust അടിസ്ഥാനമാക്കിയുള്ള ഒരു റീറൈറ്റ് (rewrite) അവതരിപ്പിക്കുന്നു; ഇത് warm install സമയങ്ങൾ 381 ms-ൽ നിന്ന് 12 ms ആയും, clean install സമയങ്ങൾ 6.5 s-ൽ നിന്ന് 2.2 s ആയും കുറയ്ക്കുന്നു. ഓരോ സെക്കൻഡും വിലപ്പെട്ടതായ continuous-integration (CI) പൈപ്പ്‌ലൈനുകളിൽ പാക്കേജുകൾ പ്രവർത്തിപ്പിക്കുന്ന ഡെവലപ്പർമാർക്കാണ് ഈ വേഗത വർദ്ധനവ് ഏറ്റവും കൂടുതൽ പ്രയോജനപ്പെടുന്നത്.

എന്തുകൊണ്ടാണ് ഈ റീറൈറ്റ് ഇപ്പോൾ പ്രധാനമാകുന്നത്

വേഗതയുടെ കാര്യത്തിൽ pnpm ഇതിനകം തന്നെ പല എതിരാളികളെക്കാളും മുന്നിലാണ്, എന്നാൽ ഇത് Node.js-ലാണ് പ്രവർത്തിക്കുന്നത്. ഇത് ഓരോ തവണ കമാൻഡ് പ്രവർത്തിക്കുമ്പോഴും ഒരു സ്റ്റാർട്ടപ്പ് കോസ്റ്റ് (startup cost) ഉണ്ടാക്കുന്നു. ആവർത്തിച്ച് ഡിപെൻഡൻസികൾ ഫെച്ച് ചെയ്യുന്നതിനും ലിങ്ക് ചെയ്യുന്നതിനും CI ജോബുകളിൽ ഈ കാലതാമസം ഒരു വലിയ തടസ്സമായി മാറുന്നു. പ്രധാനപ്പെട്ട ജോലികൾ ഒരു നേറ്റീവ് Rust ബൈനറിയിലേക്ക്—pacquet എന്ന് പേരിട്ടിരിക്കുന്ന—മാറ്റുന്നതിലൂടെ, Node.js ബൂട്ട്‌സ്‌ട്രാപ്പ് ഒഴിവാക്കാനും ഫയൽ സിസ്റ്റത്തിലെ വലിയ മാറ്റങ്ങൾ ഒരു സിംഗിൾ ത്രെഡിലൂടെ കൈകാര്യം ചെയ്യാനും ടീമിന് സാധിക്കുന്നു.

ഈ റീറൈറ്റ് ഒരു പോർട്ട് (port) ആണ്, പുനർരൂപകൽപ്പന (redesign) അല്ല. എല്ലാ ഫ്ലാഗുകൾ (flags), ലോക്ക് ഫയൽ ഫോർമാറ്റുകൾ, പരിചിതമായ node_modules ലേഔട്ട് എന്നിവ മാറ്റമില്ലാതെ തുടരുന്നു, അതിനാൽ നിലവിലുള്ള സ്ക്രിപ്റ്റുകളിലും വർക്ക്ഫ്ലോകളിലും മാറ്റങ്ങൾ വരുത്തേണ്ടതില്ല. v11-ൽ തന്നെ നിങ്ങൾക്ക് pacquet ബാക്കെൻഡ് ഉപയോഗിക്കാൻ സാധിക്കും; v12-ൽ ഫെച്ചിംഗിനും ലിങ്കിംഗിനും ഇത് ഡിഫോൾട്ട് ആയിരിക്കും.

അളക്കാവുന്ന പ്രകടന മെച്ചങ്ങൾ

മെയിന്റനർമാർ നൽകിയ ബെഞ്ച്മാർക്കുകൾ പ്രകാരം:

  • Warm install (ക്യാഷെ ഉപയോഗിച്ചുള്ള ആവർത്തന റൺ): 381 ms → 12 ms, അതായത് 30 മടങ്ങ് മെച്ചം.
  • Clean install (ക്യാഷെ ഇല്ലാതെ): 6.5 s → 2.2 s, പകുതിയിലധികം സമയം ലാഭിക്കാം.

റിസ്കുകളും വിട്ടുവീഴ്ചകളും

Rust എൻജിൻ ഇപ്പോഴും ആൽഫ (alpha) ഘട്ടത്തിലാണ്. ഇത് പ്രീ-റിലീസ് ഘട്ടത്തിൽ നിന്ന് പൂർണ്ണമായും പുറത്തുവരുന്നത് വരെ പ്രൊഡക്ഷനിൽ v12 ഉപയോഗിക്കരുതെന്ന് ടീം നിർദ്ദേശിക്കുന്നു.

ഇത് ഇന്ന് എങ്ങനെ പരീക്ഷിക്കാം

ഡെവലപ്പർമാർക്ക് pnpm self-update next-12 എന്ന കമാൻഡ് റൺ ചെയ്തുകൊണ്ട് പുതിയ ബാക്കെൻഡ് പരീക്ഷിക്കാവുന്നതാണ്, ഇത് ഏറ്റവും പുതിയ പ്രീ-റിലീസ് ബൈനറി ഡൗൺലോഡ് ചെയ്യുന്നു. പ്രോജക്റ്റിന്റെ pnpm-lock.yaml അല്ലെങ്കിൽ node_modules ലേഔട്ടിൽ മാറ്റം വരുത്താതെ തന്നെ ഈ കമാൻഡ് JavaScript എൻജിന് പകരം Rust എൻജിൻ ഉപയോഗിക്കുന്നു. തങ്ങളുടെ CI പൈപ്പ്‌ലൈനുകളിൽ ഇതിന്റെ സ്വാധീനം വിലയിരുത്താൻ ആഗ്രഹിക്കുന്ന ടീമുകൾ ഒരു ഡിസ്പോസബിൾ റണ്ണർ (disposable runner) ഉപയോഗിച്ച്, pacquet ബാക്കെൻഡ് എനേബിൾ ചെയ്ത്, നിലവിലെ സെറ്റപ്പുമായി ബിൽഡ് സമയങ്ങൾ താരതമ്യം ചെയ്യേണ്ടതാണ്.

വിപുലമായ പ്രവണത

pnpm-ന്റെ ഈ നീക്കം കംപൈൽഡ് ഭാഷകളിലേക്കുള്ള (compiled languages) ടൂളിംഗ് മൈഗ്രേഷനുകളുടെ ഒരു വലിയ തരംഗത്തെയാണ് പ്രതിഫലിപ്പിക്കുന്നത്. Biome, Oxc, Deno തുടങ്ങിയ പ്രോജക്റ്റുകൾ ഡെവലപ്പർ വർക്ക്ഫ്ലോയിലെ ലേറ്റൻസി (latency) കുറയ്ക്കുന്നതിനായി തങ്ങളുടെ പ്രകടനത്തിന് നിർണ്ണായകമായ ഘടകങ്ങൾ Rust അല്ലെങ്കിൽ Go ഉപയോഗിച്ച് പുനർനിർമ്മിച്ചിട്ടുണ്ട്.

ഇനി ശ്രദ്ധിക്കേണ്ട കാര്യങ്ങൾ

  • സ്റ്റെബിലിറ്റി മൈൽസ്റ്റോണുകൾ (Stability milestones): പ്രൊഡക്ഷൻ ആവശ്യങ്ങൾക്കായി ഇത് എപ്പോൾ സുരക്ഷിതമാകുമെന്ന് റിലീസുകൾ നിരീക്ഷിക്കുക.
  • ഫീച്ചർ പാരറ്റി (Feature parity): എന്തെങ്കിലും കുറവുകൾ ഉണ്ടോ എന്ന് അറിയാൻ ചേഞ്ച്‌ലോഗ് (changelog) ശ്രദ്ധിക്കുക.

ചുരുക്കത്തിൽ: pnpm-ന്റെ Rust റീറൈറ്റ്, നിലവിൽ വേഗതയുള്ള ഒരു പാക്കേജ് മാനേജറിനെ ആവർത്തന ഇൻസ്റ്റാളുകൾക്കായി പ്രായോഗികമായി ഉടനടിയുള്ള ഒന്നാക്കി മാറ്റുന്നു, കൂടാതെ ഫ്രഷ് ഇൻസ്റ്റാളുകൾക്കായി പകുതിയിലധികം സമയം കുറയ്ക്കുകയും ചെയ്യുന്നു. എല്ലാ രാത്രിയിലും ഡിപെൻഡൻസി റെസല്യൂഷനായി (dependency resolution) മിനിറ്റുകൾ ചിലവഴിക്കുന്ന ടീമുകൾക്ക്, വർക്ക്ഫ്ലോയിൽ വലിയ മാറ്റങ്ങൾ വരുത്താതെ തന്നെ CI ചിലവ് കുറയ്ക്കാൻ ഈ അപ്‌ഗ്രേഡ് സഹായിക്കും.