Az Object.groupBy() nem olyan objektumot ad vissza, amilyenre számítasz

Az Object.groupBy() null-prototípusú szótárat ad, a Map.groupBy() pedig az objektumkulcsok azonosságát is megőrzi. A két API ugyan csoportosít, de más adatmodellhez való.

Az Object.groupBy() null-prototípusú szótárat ad, a Map.groupBy() pedig az objektumkulcsok azonosságát is megőrzi. A két API ugyan csoportosít, de más adatmodellhez való.
2019-ben 27 percre megállt a fél internet egy .*.*=.* miatt. Megmértem, mit művel a katasztrofális backtracking Node alatt, és kipróbáltam a V8 kísérleti lineáris regexmotorját, ami 6,2 másodpercből 0,01 ms-ot csinál – csak épp ki van kapcsolva.

A Set új halmazműveletei végre kiváltják a kézzel írt filtereket, de az intersection() sorrendjét a kisebb bemenet dönti el. Megnézzük, miért, és hogyan fér bele egy Map, miközben egy Array nem.

A V8 háromféle adatszerkezetet rejt egy JavaScript-string mögé: flat, cons és sliced. Ettől a += olcsóbb, mint a régi tanácsok állítják, a substring() viszont képes 200 megabájtot életben tartani húsz karakterért. Lemértem.
A sendBeacon() true értéke csak sikeres sorba állítást jelent. A 64 KiB ráadásul közös keepalive keret – és ettől még a szerver semmit sem kapott meg biztosan.

A JavaScript Unicode v flagje halmazműveleteket és több kódpontból álló emoji-sorozatokat hoz a regexekbe. A negált property escape-eknél azonban a jelentés is változhat.

A process.nextTick() nem ugyanaz, mint egy mikrofeladat: külön Node-sora van, és egy rossz rekurzióval elnémíthatja az I/O-t.

Lefuttattam a net kedvenc V8-rémtörténetét: a property-sorrend szinte semmit nem számított. Ami tényleg ötszörösére lassította a kódot, egy ártalmatlannak tűnő delete volt – és a V8 forráskódjában egy konkrét szám is előkerült közben.
setTimeout(0) nem enged előre semmit – a scheduler.yield() igen
A setTimeout(0) trükkel feldarabolt taskok folytatása a sor végére kerül. A natív scheduler.postTask és scheduler.yield API ugyanezt a problémát oldja meg prioritásokkal – és a yield folytatása nem esik hátrébb az újonnan érkező taskokhoz képest.

Az Iterator.prototype 2025 óta saját map/filter/take metódusokkal rendelkezik, ami a klasszikus tömbmetódusoktól eltérően lusta kiértékeléssel, köztes tömb nélkül dolgozik – akár végtelen generátorokon is.

A URLPattern API-val a böngésző natívan tud URL-eket komponensenként illeszteni és elnevezett paramétereket kiolvasni. Megmutatjuk, mikor tisztább a regexnél, és miért nem query parser.

A böngésző bfcache-e teljes oldalt állíthat vissza a vissza gombnál. Az unload, az élő kapcsolatok és az elavult állapot mégis könnyen elrontja ezt.

A JavaScript length értéke UTF-16-kódegységeket számlál, ezért egy emoji vagy kombinált ékezet több helyet foglalhat, mint amennyinek látszik. Az Intl.Segmenter grafémaklaszterekre bontja a szöveget: így a felhasználónak ígért karakterszámot lehet mérni és biztonságosan levágni.

Lebegő menük és panelek esetén a z-index gyakran a rossz eszköz. A Popover API a böngésző top layer rétegét használja, de nem váltja ki a tudatos fókusz- és pozíciókezelést.

A using és await using végre garantálja, hogy egy erőforrás felszabadítása lefusson – hiba, korai return esetén is. Node 24-en tökéletesen működik, Node 22 flag-elt verziója viszont némán elnyeli a dispose-hibákat.

A Response.clone() nem teljes másolatot készít: a lassan fogyó streamág korlátlan memóriapuffert építhet. Mikor veszélyes ez, és hogyan kerüld el?

Így akadályozhatod meg, hogy több böngészőfül egyszerre végezze ugyanazt a háttérmunkát a Web Locks API-val.

A structuredClone() megtartja a Date, Map, Set és körkörös hivatkozások szerkezetét is. Mutatjuk, mikor jobb a JSON-trükknél, és mikor érdemes transferről dönteni.

A fetchhez nincs szabványos timeout opció. Az AbortSignal.timeout() és az AbortSignal.any() a kérést is leállítja – nem csak a rá váró promise-t.