Skip to content
No results
  • A JSBlogról
JSBlog
  • Winben blogja
  • CSS
  • Git
  • HTTP
  • Node.js
  • Teljesítmény
  • Web API-k
  • Webbiztonság
JSBlog
  • JavaScript

A Set.intersection() sorrendjét a kisebb halmaz dönti el

Két halmaz átfedése, a metszet elemeit sárga pontok jelölik

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.

  • winben
  • 2026.08.16.
  • Webbiztonság

A req.ip, amit a támadó tölt ki: az Express trust proxy csapdája

Diagram: az X-Forwarded-For fejléc két IP-vel; a trust proxy: true a bal szélső, kliens által írt címet választja, a trust proxy: 1 a jobb szélső, proxy által hozzáfűzött címet – ez lesz a req.ip

Bekapcsolod a trust proxy-t, mert proxy mögött vagy — és ezzel a req.ip-t a kliens X-Forwarded-For fejlécére bízod. Miért a true a legrosszabb beállítás, mit válassz helyette, és hogyan kerülhető meg vele az egész rate limited.

  • winben
  • 2026.08.16.
  • Git

git bisect run: a 125-ös exit kód megment egy rossz vádlottól

Git commitgráf feleződő keresési tartományokkal, egy kihagyott és egy hibás committal

A git bisect run automatizálja a regressziókeresést, de egy buildhiba könnyen hamis bűnöst gyárt. Így használd helyesen a 125-ös kilépési kódot.

  • winben
  • 2026.08.15.
  • JavaScript

A substring() nem másol: húsz karakter, ami 200 megabájtot tart életben

Diagram: fent összefűzött stringdarabokból épülő cons-fa, lent hosszú memóriasáv, amelynek kiemelt kis szeletére egy különálló slice-objektum mutat

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.

  • winben
  • 2026.08.15.
  • Web API-k

A true nem azt jelenti, hogy megérkezett: a sendBeacon() 64 KiB-os csapdája

Diagram a böngésző közös 64 KiB-os keepalive soráról: a sorba állítás sikeres lehet, miközben a szerveres kézbesítés még bizonytalan

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.

  • winben
  • 2026.08.14.
  • Node.js

Egy csomag, két példány: amikor az instanceof jogosan mond nemet

Diagram: egy npm csomag import és require ágon két külön példányként töltődik be, alul a module-sync feltétellel mindkét út ugyanabba az egy példányba fut

Ha egy npm csomag ESM-ként és CommonJS-ként is megjelenik, a Node mindkét buildet betölti: két osztály, két singleton, bukó instanceof. A dual package hazard anatómiája – és ahogy a require(esm) meg a module-sync feltétel pontot tesz a végére.

  • winben
  • 2026.08.14.
  • Web API-k

A Ctrl+F kinyithatja az accordionodat: hidden=”until-found” a gyakorlatban

A böngésző keresője egy összecsukott tartalmi panelt nyit ki

A hidden="until-found" kereshetővé teszi a becsukott tartalmat, a beforematch pedig szinkronban tartja a komponenst. A dobozmodell és egy régi CSS-reset viszont könnyen elrontja.

  • winben
  • 2026.08.13.
  • HTTP

A 206 nem félkész 200: Range kérések Node.js-ben

HTTP Range kérés útja a kliens, a szerver és egy nagy fájl között

A videók, PDF-ek és folytatható letöltések mögött álló HTTP Range kérés nem csak egy slice: a 206, 416, suffix range és If-Range apró részletei számítanak.

  • winben
  • 2026.08.13.
  • Adatbázis

Három szám, amit félreolvasol az EXPLAIN ANALYZE kimenetéből

Diagram egy Postgres EXPLAIN ANALYZE plan fáról: a Nested Loop szülő csomópont Buffers értéke a két gyermek csomópont (Seq Scan és Index Scan) összegzett buffer- és időadataiból áll össze, az Index Scan 1639 futásának átlagideje pedig a lekérdezés futásidejének több mint felét teszi ki

Az actual time egy átlag, nem összeg, a Buffers érték felfelé gyűlik a plan fában, és a sima EXPLAIN ANALYZE nem méri a szerializációt – három valós Postgres 17-es példával.

  • winben
  • 2026.08.12.
  • JavaScript

A regexed több emojit is egy karakternek nézheti: a Unicode v flag

Unicode-karakterhalmazok metszetét és több kódpontból álló emoji-sorozatot ábrázoló technikai diagram

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.

  • winben
  • 2026.08.11.
  • Node.js

A process.nextTick() nem mikrotask: a Node event loop külön VIP-sora

A Node.js eseményhurkának három várakozási sora, ahol a nextTick sor megelőzi a mikro- és a normál feladatokat.

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.

  • winben
  • 2026.08.08.
  • Docker

A konténered nem lusta leállni – csak nem hallja, hogy szóltál neki

Diagram: fent egy piros sávban a szignál egy PID 1 dobozba ütközik, majd óra és kényszerleállás-jel következik; lent egy zöld sávban a szignál egy init dobozon át simán eljut az alkalmazásdobozhoz, amit egy pipa zár le sikeres leállásként

Tíz másodperc néma csend minden konténerleállításnál, aztán egy erőszakos kilövés. Ez nem lassú cleanup, hanem a Linux PID 1 különleges viselkedése — és egy gyors kernel-szintű teszttel pontosan megmérhető, mekkora a különbség.

  • winben
  • 2026.08.07.
  • CSS

A CSS @scope nem CSS Modules: a közelebbi komponens felülírhatja a későbbi szabályt

Egymásba ágyazott CSS scope-ok sematikus ábrája, amelyen a belső scope közelebb van a cél elemhez

A CSS @scope nem izolál teljesen, viszont a kaszkádba beemeli a DOM-beli közelséget. Ezért egy belső komponens szabálya ugyanazzal a specifikációval is nyerhet.

  • winben
  • 2026.08.06.
  • JavaScript

A delete obj.prop ötször lassabbá tette a kódomat: a V8 hidden class-ok valódi ára

Diagram: felül négy hatszög egy láncban, egyre több ponttal, nyilakkal összekötve – ez a hidden class transition chain. Alul két doboz: a zöldben egy egyenes nyíl közvetlenül a property értékéhez, a narancssárgában egy összekuszált, szétszórt vonalháló jelzi a lassú dictionary-lookupot.

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.

  • winben
  • 2026.08.05.
  • Web API-k

A Cache API nem HTTP-cache: így marad nálad örökre a tegnapi válasz

A böngésző HTTP-cache-e és az alkalmazás Cache API-tára közti különbséget ábrázoló technikai diagram

A Service Worker Cache API-ja nem tartja be helyetted a Cache-Control szabályait. A no-store, a Vary, a lejárat és a cache-verziózás gyakorlati csapdái.

  • winben
  • 2026.07.31.
  • Webbiztonság

A SameSite=Lax nem böngésző-egyezmény: a Firefox kipróbálta, aztán visszavonta

Három sorompó három eltérő nyitási állásban, mellettük egy-egy csokis keksz sütit szimbolizálva: az egyik átjut, a másik félig, a harmadik el van torlaszolva

A Chrome négy éve úgy állítja be a sütiket, mintha SameSite=Lax lenne rajtuk – de a Firefox ezt kipróbálta, aztán dokumentáltan visszavonta, és a Safari sosem is akarta ugyanazt. Amikor az express-session cookie.sameSite alapértéke false, a CSRF-védelmed pontosan attól függ, melyik böngészőt használja a felhasználód.

  • winben
  • 2026.07.30.
  • Web API-k

Az IndexedDB-tranzakció nem vár rád: egy rossz await és már bezárt

Az IndexedDB-tranzakció életciklusa: egy hálózati várakozás után lezárt, illetve rövid, sikeresen végrehajtott írási szakasz sematikus ábrája.

Az IndexedDB-tranzakciót nem lehet hálózati várakozással nyitva tartani. Egy rossz helyre tett await miatt a következő írás már inaktív tranzakcióra érkezhet.

  • winben
  • 2026.07.28.
  • Web API-k

A setTimeout(0) nem enged előre semmit – a scheduler.yield() igen

Diagram: két időzített sáv. A felsőn a zöld feladat folytatása szaggatott, elhalványuló dobozként a sor végére kerül két narancssárga feladat mögé; az alsón a zöld folytatás azonnal, kiemelve követi az első blokkot, a narancssárga feladatok csak utána futnak.

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.

  • winben
  • 2026.07.26.
  • Node.js

Az AsyncLocalStorage nem a requestet követi – csak az async láncot

Sematikus adatfolyam két kérés AsyncLocalStorage kontextusával: egy EventEmitter-listenernél megszakad, kötött callbackkel megmarad.

Az AsyncLocalStorage request contextet ad a Node.js-ben, de nem az eseményre feliratkozást, hanem az aszinkron láncot követi. Megnézzük, miért tűnik el egy megosztott EventEmitter listenerében a request ID, és mikor segít a bind().

  • winben
  • 2026.07.25.
  • Adatbázis

A SKIP LOCKED: job queue egy sima Postgres táblából – de nem ingyen

Diagram: egy háttérfolyamat nyíllal átlépi a Postgres sorban a lakattal jelölt, más workerek által már lezárt sorokat, és a legelső szabad, zöld pipával jelölt sort foglalja le.

A FOR UPDATE SKIP LOCKED tíz éve ott van a Postgresben, és simán kiválthatja a Kafkát egy sima háttérmunka-sorhoz – csak épp nem ingyen jön: a valódi ára nem a tábla méretével, hanem a konkurrenciával nő.

  • winben
  • 2026.07.22.
1 2 3 4
Next
Copyright © 2026 - WordPress Theme by CreativeThemes