ES2024 nu stabilește ce browsere trebuie să susțineți
Adoptați funcțiile JavaScript după browserele și mediile de execuție susținute. ES2024 și Baseline oferă dovezi utile, dar nu înlocuiesc cerințele produsului.
Întrebarea utilă despre o funcție JavaScript nouă este dacă funcționează în mediile pe care produsul promite să le susțină. Anul scris pe specificație nu răspunde la această întrebare. ES2024 a consemnat progresul limbajului într-o ediție anuală; nu a actualizat browserul de pe telefonul clientului sau mediul de execuție de pe server.
Privind din noiembrie 2026, lecția practică este să adoptați fiecare funcție separat. Folosiți dovezi de compatibilitate precum Baseline, raportați-le la mediile susținute de produs și verificați rezultatul acolo. O asemenea regulă permite folosirea noutăților fără să transforme fiecare ediție anuală într-un proiect obligatoriu de migrare.
Aprobarea și disponibilitatea au date diferite
Anunțul Ecma din 3 iulie 2024 precizează că Adunarea Generală a aprobat ediția a cincisprezecea a ECMA-262 la 26 iunie. Distincția contează pentru istorie: aprobarea a avut loc în iunie, iar acest anunț public a apărut în iulie.
Disponibilitatea în browsere are alt calendar. Evidențele MDN pentru Object.groupBy() și Promise.withResolvers() datează disponibilitatea comună în browsere din martie 2024. Paginile actuale le descriu drept larg disponibile. Eticheta de astăzi nu trebuie proiectată asupra lunii iunie 2024, ca și cum nimic nu s-ar fi schimbat între timp.
Procesul TC39 explică succesiunea. Propunerile trec prin etape care cer o specificație și implementări tot mai mature. Etapa 4 include cerințe privind implementările și testele de acceptare înaintea includerii în standard. Publicarea unei ediții nu este, așadar, o lansare simultană pentru toate implementările. Nici existența unei implementări experimentale nu oferă unei propuneri garanțiile unui standard finalizat.
Simplificările mici cer și verificarea comportamentului
Două noutăți ES2024 arată de ce adoptarea trebuie decisă separat. Specificația din 2024 definește Object.groupBy() pentru gruparea valorilor dintr-un obiect iterabil și Promise.withResolvers() pentru obținerea unei promisiuni împreună cu funcțiile resolve și reject asociate. Pot înlocui cod repetitiv de pregătire. Rezolvă însă probleme diferite, iar absența lor produce consecințe diferite.
Într-un ecran ilustrativ de raportare, gruparea comenzilor după stare poate exprima intenția mai clar decât o buclă scrisă manual. Înlocuirea funcției auxiliare cere totuși verificarea obiectului întors și a cheilor folosite de aplicație. Object.groupBy() întoarce un obiect cu prototip nul; codul care presupune existența unor metode moștenite trebuie verificat. MDN documentează comportamentul pe pagina metodei.
La legătura dintre o componentă bazată pe evenimente și cod bazat pe promisiuni, Promise.withResolvers() poate elimina preluarea manuală a funcțiilor resolve și reject. Nu stabilește ce eveniment înseamnă finalizare, nu organizează anularea și nu împiedică uitarea unei operații în așteptare. Acestea rămân decizii ale aplicației. Reducerea codului de pregătire justifică luarea în considerare a funcției, nu dovedește corectitudinea întregii logici asincrone.
Exemplele sunt conceptuale, nu fragmente executabile. Pentru articol nu au fost efectuate teste în browser sau într-un mediu de execuție. O modificare pentru producție ar necesita verificări pe versiunile exacte din politica de compatibilitate a produsului.
Baseline oferă dovezi într-un domeniu delimitat
Prezentarea Baseline descrie un indicator comun de compatibilitate pentru setul său principal de browsere. Ajută la evaluarea unei funcții web pentru utilizare largă. Nu reprezintă o declarație despre fiecare browser încorporat, dispozitiv vechi sau mediu JavaScript de pe server pe care l-ar putea întâlni aplicația.
Pe o pagină publică de rezervări, lipsa compatibilității poate opri clientul înaintea plății. Pentru un instrument intern, folosit în browsere administrate central, populația susținută poate fi mult mai restrânsă. Aceeași funcție poate fi potrivită în al doilea produs și poate necesita o alternativă în primul. Diferența privește angajamentele de compatibilitate, nu cât de modern scrie cod fiecare echipă.
Notați angajamentul înainte să modificați configurația de compilare. Includeți versiunile relevante de browser sau de mediu de execuție, tratarea excepțiilor și persoana care poate aproba renunțarea la un mediu vechi. Datele despre utilizarea produsului pot orienta alegerea, dacă există. Nu inventați un procent de clienți afectați când nu aveți măsurători.
Configurația nu furnizează automat fiecare API lipsă
Sintaxa limbajului și funcțiile disponibile la execuție cer atenție separată. Transformarea unei sintaxe noi într-una mai veche nu creează, prin ea însăși, o metodă integrată care lipsește. Procesul de construire a aplicației poate fi configurat să adauge suport de compatibilitate, dar rezultatul trebuie verificat în fișierele produse și în mediul real. O țintă ES2024 în configurație nu este o dovadă suficientă.
Regula propusă este să evaluați o metodă integrată nouă când devine pentru prima dată o dependență. Dacă toate mediile susținute o au, folosiți-o. Dacă unele nu o au, alegeți explicit între o implementare de compatibilitate testată, o alternativă locală și amânarea adoptării. O bibliotecă partajată trebuie să țină cont și de mediile celor care o folosesc, nu doar de calculatorul dezvoltatorului.
Stabiliți un responsabil și o condiție de eliminare pentru codul de compatibilitate. Altfel, o soluție provizorie poate rămâne în întreținere după dispariția cerinței inițiale. Costul trebuie văzut când decideți dacă merită o mică reducere a codului repetitiv.
Când se justifică o regulă pentru întreaga ediție
O organizație poate prefera o țintă anuală conservatoare, fiindcă este ușor de explicat și verificat. Alegerea se justifică atunci când consecvența contează mai mult decât accesul timpuriu. Are totuși nevoie de definirea mediilor și de o cale pentru excepții; numărul ediției rămâne insuficient.
Și listele de noutăți cer precizie. await la nivelul superior al unui modul apare deja în specificația din 2022. Temporal lipsește din ediția 2024. Niciuna dintre aceste funcții nu trebuie prezentată ca noutate introdusă de ES2024. Documentația ulterioară nu poate modifica retrospectiv ediția.
Pentru un produs software la comandă, conveniți mediile susținute ca parte a livrării. Noutățile JavaScript devin astfel alegeri mici, verificabile, legate de oamenii care folosesc produsul. Standardul anual oferă context; cerințele de compatibilitate stabilesc ce puteți livra.
Paul