[{"data":1,"prerenderedAt":1129},["ShallowReactive",2],{"doc:\u002Fgame-engine\u002Fadvanced\u002Fperformance":3,"surround:\u002Fgame-engine\u002Fadvanced\u002Fperformance":878,"navigation":889},{"id":4,"title":5,"body":6,"description":871,"extension":872,"meta":873,"navigation":249,"path":874,"seo":875,"stem":876,"__hash__":877},"docs\u002F01.game-engine\u002F08.advanced\u002F04.performance.md","Wydajność i benchmarki",{"type":7,"value":8,"toc":863},"minimark",[9,14,60,64,127,143,146,191,222,317,321,353,359,400,406,410,486,490,856,859],[10,11,13],"h2",{"id":12},"zasady-gorącej-pętli","Zasady gorącej pętli",[15,16,17,30,36,46],"ul",{},[18,19,20,24,25,29],"li",{},[21,22,23],"strong",{},"Brak alokacji"," poza jedną kopią listy subskrybentów w ",[26,27,28],"code",{},"EventBus.emit"," i przebudową listy komponentów po zmianie struktury.",[18,31,32,35],{},[21,33,34],{},"Dirty sync"," — render dostaje tylko obiekty brudne. Scena z 79 obiektami wysyła w klatce zwykle 1–3.",[18,37,38,45],{},[21,39,40,41,44],{},"Odczyt ",[26,42,43],{},"world"," O(1)"," po przeliczeniu; zmiana transformacji unieważnia tylko poddrzewo.",[18,47,48,51,52,55,56,59],{},[21,49,50],{},"Profiler domyślnie wyłączony"," — ",[26,53,54],{},"begin","\u002F",[26,57,58],{},"end"," zwracają się natychmiast.",[10,61,63],{"id":62},"zmierzone-liczby","Zmierzone liczby",[65,66,67,80],"table",{},[68,69,70],"thead",{},[71,72,73,77],"tr",{},[74,75,76],"th",{},"Pomiar",[74,78,79],{},"Wynik",[81,82,83,92,100,108,116],"tbody",{},[71,84,85,89],{},[86,87,88],"td",{},"Aktualizacja komponentów, 20 000 obiektów",[86,90,91],{},"0,72 ms\u002Fklatkę",[71,93,94,97],{},[86,95,96],{},"Aktualizacja komponentów, 2 000 obiektów",[86,98,99],{},"~0,07 ms\u002Fklatkę",[71,101,102,105],{},[86,103,104],{},"Obiekty brudne w klatce (scena 79 obiektów)",[86,106,107],{},"zwykle 1–3",[71,109,110,113],{},[86,111,112],{},"Benchmarki Node",[86,114,115],{},"17 przypadków",[71,117,118,124],{},[86,119,120,121],{},"Próg regresji ",[26,122,123],{},"bench:check",[86,125,126],{},"40%",[128,129,132],"callout",{"title":130,"type":131},"Bez obietnic sprzętowych","info",[133,134,135,136,138,139,142],"p",{},"Liczby bezwzględne zależą od maszyny, dlatego ",[26,137,123],{}," porównuje wyniki z baseline ",[21,140,141],{},"na tej samej maszynie"," i używa progów względnych. Silnik nie publikuje limitów sprzętowych, których nie zmierzył.",[10,144,112],{"id":145},"benchmarki-node",[147,148,153],"pre",{"className":149,"code":150,"language":151,"meta":152,"style":152},"language-bash shiki shiki-themes github-light github-dark","npm run bench\nnpm run bench:check\nnpm run bench:baseline\n","bash","",[26,154,155,171,181],{"__ignoreMap":152},[156,157,160,164,168],"span",{"class":158,"line":159},"line",1,[156,161,163],{"class":162},"sScJk","npm",[156,165,167],{"class":166},"sZZnC"," run",[156,169,170],{"class":166}," bench\n",[156,172,174,176,178],{"class":158,"line":173},2,[156,175,163],{"class":162},[156,177,167],{"class":166},[156,179,180],{"class":166}," bench:check\n",[156,182,184,186,188],{"class":158,"line":183},3,[156,185,163],{"class":162},[156,187,167],{"class":166},[156,189,190],{"class":166}," bench:baseline\n",[133,192,193,194,197,198,197,201,197,204,197,207,210,211,214,215,217,218,221],{},"17 przypadków w kategoriach: ",[26,195,196],{},"objects",", ",[26,199,200],{},"queries",[26,202,203],{},"collisions",[26,205,206],{},"tilemap",[26,208,209],{},"assets",". Wyniki trafiają do ",[26,212,213],{},"benchmarks\u002Flatest.json",", a ",[26,216,123],{}," porównuje je z ",[26,219,220],{},"benchmarks\u002Fbaseline.json"," z progiem 40% — kod wyjścia 1 nadaje się do CI.",[147,223,227],{"className":224,"code":225,"language":226,"meta":152,"style":152},"language-ts shiki shiki-themes github-light github-dark","import { describe, bench } from 'vitest'\n\ndescribe('queries', () => {\n  bench('findByTag', () => {\n    scene.findByTag('enemy')\n  })\n})\n","ts",[26,228,229,245,251,271,288,305,311],{"__ignoreMap":152},[156,230,231,235,239,242],{"class":158,"line":159},[156,232,234],{"class":233},"szBVR","import",[156,236,238],{"class":237},"sVt8B"," { describe, bench } ",[156,240,241],{"class":233},"from",[156,243,244],{"class":166}," 'vitest'\n",[156,246,247],{"class":158,"line":173},[156,248,250],{"emptyLinePlaceholder":249},true,"\n",[156,252,253,256,259,262,265,268],{"class":158,"line":183},[156,254,255],{"class":162},"describe",[156,257,258],{"class":237},"(",[156,260,261],{"class":166},"'queries'",[156,263,264],{"class":237},", () ",[156,266,267],{"class":233},"=>",[156,269,270],{"class":237}," {\n",[156,272,274,277,279,282,284,286],{"class":158,"line":273},4,[156,275,276],{"class":162},"  bench",[156,278,258],{"class":237},[156,280,281],{"class":166},"'findByTag'",[156,283,264],{"class":237},[156,285,267],{"class":233},[156,287,270],{"class":237},[156,289,291,294,297,299,302],{"class":158,"line":290},5,[156,292,293],{"class":237},"    scene.",[156,295,296],{"class":162},"findByTag",[156,298,258],{"class":237},[156,300,301],{"class":166},"'enemy'",[156,303,304],{"class":237},")\n",[156,306,308],{"class":158,"line":307},6,[156,309,310],{"class":237},"  })\n",[156,312,314],{"class":158,"line":313},7,[156,315,316],{"class":237},"})\n",[10,318,320],{"id":319},"raport-rozmiaru-bundla","Raport rozmiaru bundla",[147,322,324],{"className":149,"code":323,"language":151,"meta":152,"style":152},"npm run bundle:report\nnpm run bundle:check\nnpm run bundle:baseline\n",[26,325,326,335,344],{"__ignoreMap":152},[156,327,328,330,332],{"class":158,"line":159},[156,329,163],{"class":162},[156,331,167],{"class":166},[156,333,334],{"class":166}," bundle:report\n",[156,336,337,339,341],{"class":158,"line":173},[156,338,163],{"class":162},[156,340,167],{"class":166},[156,342,343],{"class":166}," bundle:check\n",[156,345,346,348,350],{"class":158,"line":183},[156,347,163],{"class":162},[156,349,167],{"class":166},[156,351,352],{"class":166}," bundle:baseline\n",[133,354,355,358],{},[26,356,357],{},"dist\u002Frelease.json"," zawiera rozmiar, gzip, brotli i SHA-256 każdego pliku. Progi:",[65,360,361,371],{},[68,362,363],{},[71,364,365,368],{},[74,366,367],{},"Zakres",[74,369,370],{},"Próg",[81,372,373,381,389],{},[71,374,375,378],{},[86,376,377],{},"Suma gzip katalogu",[86,379,380],{},"+10% względem baseline",[71,382,383,386],{},[86,384,385],{},"Pojedynczy plik > 16 kB",[86,387,388],{},"+35%",[71,390,391,397],{},[86,392,393,396],{},[26,394,395],{},"playground.html"," (single-file)",[86,398,399],{},"+5%",[133,401,402,405],{},[26,403,404],{},"bundle:check"," kończy się kodem 1 przy przekroczeniu — działa jako bramka CI bez dodatkowego parsowania.",[10,407,409],{"id":408},"checklist-wydajnościowy-dla-gry","Checklist wydajnościowy dla gry",[411,412,413],"steps",{},[414,415,416,422,440,446,458,467,480],"ol",{},[18,417,418,421],{},[21,419,420],{},"Mierz, zanim optymalizujesz."," Włącz profiler i znajdź najdroższe znaczniki.",[18,423,424,427,428,431,432,435,436,439],{},[21,425,426],{},"Trzymaj logikę w komponentach z właściwą fazą."," ",[26,429,430],{},"input"," przed ",[26,433,434],{},"update",", fizyka w ",[26,437,438],{},"fixedUpdate",".",[18,441,442,445],{},[21,443,444],{},"Nie alokuj w pętli."," Współdziel wektory, tablice i deskryptory; używaj puli obiektów dla pocisków.",[18,447,448,427,451,453,454,457],{},[21,449,450],{},"Tagi zamiast skanowania.",[26,452,296],{}," korzysta z indeksu, ",[26,455,456],{},"find"," skanuje wszystko.",[18,459,460,463,464,439],{},[21,461,462],{},"Ogranicz dirty sync."," Zmieniaj tylko to, co naprawdę się rusza; HUD z ",[26,465,466],{},"setScrollFactor(0)",[18,468,469,427,472,475,476,479],{},[21,470,471],{},"Assety z budżetem.",[26,473,474],{},"sizeReport(limits)"," i ",[26,477,478],{},"diagnose()"," wyłapią nieużywane i za ciężkie pliki.",[18,481,482,485],{},[21,483,484],{},"WASM tylko z pomiarem."," Porównaj TS vs WASM na realnych danych.",[10,487,489],{"id":488},"przykład-pula-pocisków","Przykład: pula pocisków",[147,491,493],{"className":224,"code":492,"language":226,"meta":152,"style":152},"class BulletPool {\n  private pool: GameObject[] = []\n\n  constructor(private scene: Scene, size = 64) {\n    for (let i = 0; i \u003C size; i++) {\n      const bullet = scene.createRect(6, 6, { x: -100, y: -100, fill: '#ffd75e' })\n      bullet.setActive(false).setVisible(false)\n      this.pool.push(bullet)\n    }\n  }\n\n  fire(x: number, y: number, vx: number) {\n    const bullet = this.pool.find((b) => !b.active)\n    if (!bullet) return\n    bullet.setPosition(x, y).setActive(true).setVisible(true)\n    bullet.add(new TimedDestroy(2))\n  }\n}\n",[26,494,495,505,529,533,566,598,648,673,688,694,700,705,741,775,792,821,845,850],{"__ignoreMap":152},[156,496,497,500,503],{"class":158,"line":159},[156,498,499],{"class":233},"class",[156,501,502],{"class":162}," BulletPool",[156,504,270],{"class":237},[156,506,507,510,514,517,520,523,526],{"class":158,"line":173},[156,508,509],{"class":233},"  private",[156,511,513],{"class":512},"s4XuR"," pool",[156,515,516],{"class":233},":",[156,518,519],{"class":162}," GameObject",[156,521,522],{"class":237},"[] ",[156,524,525],{"class":233},"=",[156,527,528],{"class":237}," []\n",[156,530,531],{"class":158,"line":183},[156,532,250],{"emptyLinePlaceholder":249},[156,534,535,538,540,543,546,548,551,553,556,559,563],{"class":158,"line":273},[156,536,537],{"class":233},"  constructor",[156,539,258],{"class":237},[156,541,542],{"class":233},"private",[156,544,545],{"class":512}," scene",[156,547,516],{"class":233},[156,549,550],{"class":162}," Scene",[156,552,197],{"class":237},[156,554,555],{"class":512},"size",[156,557,558],{"class":233}," =",[156,560,562],{"class":561},"sj4cs"," 64",[156,564,565],{"class":237},") {\n",[156,567,568,571,574,577,579,581,584,587,590,593,596],{"class":158,"line":290},[156,569,570],{"class":233},"    for",[156,572,573],{"class":237}," (",[156,575,576],{"class":233},"let",[156,578,475],{"class":237},[156,580,525],{"class":233},[156,582,583],{"class":561}," 0",[156,585,586],{"class":237},"; i ",[156,588,589],{"class":233},"\u003C",[156,591,592],{"class":237}," size; i",[156,594,595],{"class":233},"++",[156,597,565],{"class":237},[156,599,600,603,606,608,611,614,616,619,621,623,626,629,632,635,637,639,642,645],{"class":158,"line":307},[156,601,602],{"class":233},"      const",[156,604,605],{"class":561}," bullet",[156,607,558],{"class":233},[156,609,610],{"class":237}," scene.",[156,612,613],{"class":162},"createRect",[156,615,258],{"class":237},[156,617,618],{"class":561},"6",[156,620,197],{"class":237},[156,622,618],{"class":561},[156,624,625],{"class":237},", { x: ",[156,627,628],{"class":233},"-",[156,630,631],{"class":561},"100",[156,633,634],{"class":237},", y: ",[156,636,628],{"class":233},[156,638,631],{"class":561},[156,640,641],{"class":237},", fill: ",[156,643,644],{"class":166},"'#ffd75e'",[156,646,647],{"class":237}," })\n",[156,649,650,653,656,658,661,664,667,669,671],{"class":158,"line":313},[156,651,652],{"class":237},"      bullet.",[156,654,655],{"class":162},"setActive",[156,657,258],{"class":237},[156,659,660],{"class":561},"false",[156,662,663],{"class":237},").",[156,665,666],{"class":162},"setVisible",[156,668,258],{"class":237},[156,670,660],{"class":561},[156,672,304],{"class":237},[156,674,676,679,682,685],{"class":158,"line":675},8,[156,677,678],{"class":561},"      this",[156,680,681],{"class":237},".pool.",[156,683,684],{"class":162},"push",[156,686,687],{"class":237},"(bullet)\n",[156,689,691],{"class":158,"line":690},9,[156,692,693],{"class":237},"    }\n",[156,695,697],{"class":158,"line":696},10,[156,698,699],{"class":237},"  }\n",[156,701,703],{"class":158,"line":702},11,[156,704,250],{"emptyLinePlaceholder":249},[156,706,708,711,713,716,718,721,723,726,728,730,732,735,737,739],{"class":158,"line":707},12,[156,709,710],{"class":162},"  fire",[156,712,258],{"class":237},[156,714,715],{"class":512},"x",[156,717,516],{"class":233},[156,719,720],{"class":561}," number",[156,722,197],{"class":237},[156,724,725],{"class":512},"y",[156,727,516],{"class":233},[156,729,720],{"class":561},[156,731,197],{"class":237},[156,733,734],{"class":512},"vx",[156,736,516],{"class":233},[156,738,720],{"class":561},[156,740,565],{"class":237},[156,742,744,747,749,751,754,756,758,761,764,767,769,772],{"class":158,"line":743},13,[156,745,746],{"class":233},"    const",[156,748,605],{"class":561},[156,750,558],{"class":233},[156,752,753],{"class":561}," this",[156,755,681],{"class":237},[156,757,456],{"class":162},[156,759,760],{"class":237},"((",[156,762,763],{"class":512},"b",[156,765,766],{"class":237},") ",[156,768,267],{"class":233},[156,770,771],{"class":233}," !",[156,773,774],{"class":237},"b.active)\n",[156,776,778,781,783,786,789],{"class":158,"line":777},14,[156,779,780],{"class":233},"    if",[156,782,573],{"class":237},[156,784,785],{"class":233},"!",[156,787,788],{"class":237},"bullet) ",[156,790,791],{"class":233},"return\n",[156,793,795,798,801,804,806,808,811,813,815,817,819],{"class":158,"line":794},15,[156,796,797],{"class":237},"    bullet.",[156,799,800],{"class":162},"setPosition",[156,802,803],{"class":237},"(x, y).",[156,805,655],{"class":162},[156,807,258],{"class":237},[156,809,810],{"class":561},"true",[156,812,663],{"class":237},[156,814,666],{"class":162},[156,816,258],{"class":237},[156,818,810],{"class":561},[156,820,304],{"class":237},[156,822,824,826,829,831,834,837,839,842],{"class":158,"line":823},16,[156,825,797],{"class":237},[156,827,828],{"class":162},"add",[156,830,258],{"class":237},[156,832,833],{"class":233},"new",[156,835,836],{"class":162}," TimedDestroy",[156,838,258],{"class":237},[156,840,841],{"class":561},"2",[156,843,844],{"class":237},"))\n",[156,846,848],{"class":158,"line":847},17,[156,849,699],{"class":237},[156,851,853],{"class":158,"line":852},18,[156,854,855],{"class":237},"}\n",[133,857,858],{},"Zero alokacji w trakcie strzelania — obiekty powstają raz, przy stworzeniu puli.",[860,861,862],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":152,"searchDepth":183,"depth":183,"links":864},[865,866,867,868,869,870],{"id":12,"depth":173,"text":13},{"id":62,"depth":173,"text":63},{"id":145,"depth":173,"text":112},{"id":319,"depth":173,"text":320},{"id":408,"depth":173,"text":409},{"id":488,"depth":173,"text":489},"Zasady gorącej pętli, dirty sync, benchmarki Node z progami regresji i raport rozmiaru bundla. Liczby z pomiarów, nie z obietnic.","md",{},"\u002Fgame-engine\u002Fadvanced\u002Fperformance",{"title":5,"description":871},"01.game-engine\u002F08.advanced\u002F04.performance","rqoL-5RhQB1z3KivU6k71mxU36iKlAA1i9IYjzAXEQc",[879,884],{"title":880,"path":881,"stem":882,"description":883,"children":-1},"Debugowanie","\u002Fgame-engine\u002Fadvanced\u002Fdebugging","01.game-engine\u002F08.advanced\u002F03.debugging","DebugOverlay, LogBuffer i LogPanel, DebugViews, Profiler i raport diagnostyczny JSON. Kompletny toolbox do diagnozowania gier.",{"title":885,"path":886,"stem":887,"description":888,"children":-1},"Wdrożenie","\u002Fgame-engine\u002Fdeployment","01.game-engine\u002F09.deployment","Dwie konfiguracje Vite, względne base, brak SPA fallback, CSP z hashem, cache immutable i gotowe konfiguracje hostingu.",[890,1001,1062],{"title":891,"path":892,"stem":893,"children":894},"2D Game Engine","\u002Fgame-engine","01.game-engine\u002F01.index",[895,897,901,905,909,935,964,977,992,993,997],{"title":896,"path":892,"stem":893},"Przegląd",{"title":898,"path":899,"stem":900},"Szybki start","\u002Fgame-engine\u002Fgetting-started","01.game-engine\u002F02.getting-started",{"title":902,"path":903,"stem":904},"Konfiguracja","\u002Fgame-engine\u002Fconfiguration","01.game-engine\u002F03.configuration",{"title":906,"path":907,"stem":908},"Architektura","\u002Fgame-engine\u002Farchitecture","01.game-engine\u002F04.architecture",{"title":910,"path":911,"stem":912,"children":913,"page":934},"Rdzeń","\u002Fgame-engine\u002Fcore","01.game-engine\u002F05.core",[914,918,922,926,930],{"title":915,"path":916,"stem":917},"Silnik i cykl życia","\u002Fgame-engine\u002Fcore\u002Fengine","01.game-engine\u002F05.core\u002F01.engine",{"title":919,"path":920,"stem":921},"Czas i pętla gry","\u002Fgame-engine\u002Fcore\u002Ftime","01.game-engine\u002F05.core\u002F02.time",{"title":923,"path":924,"stem":925},"Sceny","\u002Fgame-engine\u002Fcore\u002Fscenes","01.game-engine\u002F05.core\u002F03.scenes",{"title":927,"path":928,"stem":929},"Obiekty i komponenty","\u002Fgame-engine\u002Fcore\u002Fobjects","01.game-engine\u002F05.core\u002F04.objects",{"title":931,"path":932,"stem":933},"Zdarzenia i harmonogram","\u002Fgame-engine\u002Fcore\u002Fevents","01.game-engine\u002F05.core\u002F05.events",false,{"title":936,"path":937,"stem":938,"children":939,"page":934},"Systemy","\u002Fgame-engine\u002Fsystems","01.game-engine\u002F06.systems",[940,944,948,952,956,960],{"title":941,"path":942,"stem":943},"Zasoby (AssetManager)","\u002Fgame-engine\u002Fsystems\u002Fassets","01.game-engine\u002F06.systems\u002F01.assets",{"title":945,"path":946,"stem":947},"Wejście (InputManager)","\u002Fgame-engine\u002Fsystems\u002Finput","01.game-engine\u002F06.systems\u002F02.input",{"title":949,"path":950,"stem":951},"Fizyka (PhysicsManager)","\u002Fgame-engine\u002Fsystems\u002Fphysics","01.game-engine\u002F06.systems\u002F03.physics",{"title":953,"path":954,"stem":955},"Kamera (CameraManager)","\u002Fgame-engine\u002Fsystems\u002Fcamera","01.game-engine\u002F06.systems\u002F04.camera",{"title":957,"path":958,"stem":959},"Audio (AudioManager)","\u002Fgame-engine\u002Fsystems\u002Faudio","01.game-engine\u002F06.systems\u002F05.audio",{"title":961,"path":962,"stem":963},"Tweeny i easing","\u002Fgame-engine\u002Fsystems\u002Ftweens","01.game-engine\u002F06.systems\u002F06.tweens",{"title":965,"path":966,"stem":967,"children":968,"page":934},"Dane i zapisy","\u002Fgame-engine\u002Fdata","01.game-engine\u002F07.data",[969,973],{"title":970,"path":971,"stem":972},"Format projektu","\u002Fgame-engine\u002Fdata\u002Fproject-format","01.game-engine\u002F07.data\u002F01.project-format",{"title":974,"path":975,"stem":976},"Zapisy gry","\u002Fgame-engine\u002Fdata\u002Fsaves","01.game-engine\u002F07.data\u002F02.saves",{"title":978,"path":979,"stem":980,"children":981,"page":934},"Zaawansowane","\u002Fgame-engine\u002Fadvanced","01.game-engine\u002F08.advanced",[982,986,990,991],{"title":983,"path":984,"stem":985},"Pluginy","\u002Fgame-engine\u002Fadvanced\u002Fplugins","01.game-engine\u002F08.advanced\u002F01.plugins",{"title":987,"path":988,"stem":989},"WebAssembly","\u002Fgame-engine\u002Fadvanced\u002Fwasm","01.game-engine\u002F08.advanced\u002F02.wasm",{"title":880,"path":881,"stem":882},{"title":5,"path":874,"stem":876},{"title":885,"path":886,"stem":887},{"title":994,"path":995,"stem":996},"Przykłady","\u002Fgame-engine\u002Fexamples","01.game-engine\u002F10.examples",{"title":998,"path":999,"stem":1000},"Decyzje architektoniczne","\u002Fgame-engine\u002Fadr","01.game-engine\u002F11.adr",{"title":1002,"path":1003,"stem":1004,"children":1005},"Reverse Proxy","\u002Freverse-proxy","02.reverse-proxy\u002F01.index",[1006,1007,1010,1013,1034],{"title":896,"path":1003,"stem":1004},{"title":898,"path":1008,"stem":1009},"\u002Freverse-proxy\u002Fgetting-started","02.reverse-proxy\u002F02.getting-started",{"title":902,"path":1011,"stem":1012},"\u002Freverse-proxy\u002Fconfiguration","02.reverse-proxy\u002F03.configuration",{"title":1014,"path":1015,"stem":1016,"children":1017,"page":934},"Ruch i odporność","\u002Freverse-proxy\u002Ftraffic","02.reverse-proxy\u002F04.traffic",[1018,1022,1026,1030],{"title":1019,"path":1020,"stem":1021},"Load balancing","\u002Freverse-proxy\u002Ftraffic\u002Fload-balancing","02.reverse-proxy\u002F04.traffic\u002F01.load-balancing",{"title":1023,"path":1024,"stem":1025},"Health checks","\u002Freverse-proxy\u002Ftraffic\u002Fhealth-checks","02.reverse-proxy\u002F04.traffic\u002F02.health-checks",{"title":1027,"path":1028,"stem":1029},"Circuit breaker i retry","\u002Freverse-proxy\u002Ftraffic\u002Fresilience","02.reverse-proxy\u002F04.traffic\u002F03.resilience",{"title":1031,"path":1032,"stem":1033},"Rate limiting","\u002Freverse-proxy\u002Ftraffic\u002Frate-limiting","02.reverse-proxy\u002F04.traffic\u002F04.rate-limiting",{"title":1035,"path":1036,"stem":1037,"children":1038,"page":934},"Operacje i wdrożenie","\u002Freverse-proxy\u002Foperations","02.reverse-proxy\u002F05.operations",[1039,1043,1047,1051,1054,1058],{"title":1040,"path":1041,"stem":1042},"Admin API","\u002Freverse-proxy\u002Foperations\u002Fadmin-api","02.reverse-proxy\u002F05.operations\u002F01.admin-api",{"title":1044,"path":1045,"stem":1046},"Metryki i monitoring","\u002Freverse-proxy\u002Foperations\u002Fobservability","02.reverse-proxy\u002F05.operations\u002F02.observability",{"title":1048,"path":1049,"stem":1050},"Bezpieczeństwo","\u002Freverse-proxy\u002Foperations\u002Fsecurity","02.reverse-proxy\u002F05.operations\u002F03.security",{"title":885,"path":1052,"stem":1053},"\u002Freverse-proxy\u002Foperations\u002Fdeployment","02.reverse-proxy\u002F05.operations\u002F04.deployment",{"title":1055,"path":1056,"stem":1057},"Benchmarki","\u002Freverse-proxy\u002Foperations\u002Fbenchmarks","02.reverse-proxy\u002F05.operations\u002F05.benchmarks",{"title":1059,"path":1060,"stem":1061},"Troubleshooting","\u002Freverse-proxy\u002Foperations\u002Ftroubleshooting","02.reverse-proxy\u002F05.operations\u002F06.troubleshooting",{"title":1063,"path":1064,"stem":1065,"children":1066},"Vector Engine","\u002Fvector-engine","03.vector-engine\u002F01.index",[1067,1068,1071,1092,1105,1125],{"title":896,"path":1064,"stem":1065},{"title":898,"path":1069,"stem":1070},"\u002Fvector-engine\u002Fgetting-started","03.vector-engine\u002F02.getting-started",{"title":1072,"path":1073,"stem":1074,"children":1075,"page":934},"Scena","\u002Fvector-engine\u002Fscene","03.vector-engine\u002F03.scene",[1076,1080,1084,1088],{"title":1077,"path":1078,"stem":1079},"Format sceny 1.0","\u002Fvector-engine\u002Fscene\u002Fscene-format","03.vector-engine\u002F03.scene\u002F01.scene-format",{"title":1081,"path":1082,"stem":1083},"Obiekty sceny","\u002Fvector-engine\u002Fscene\u002Fobjects","03.vector-engine\u002F03.scene\u002F02.objects",{"title":1085,"path":1086,"stem":1087},"Gradienty i warstwy","\u002Fvector-engine\u002Fscene\u002Fgradients-layers","03.vector-engine\u002F03.scene\u002F03.gradients-layers",{"title":1089,"path":1090,"stem":1091},"Przykłady scen","\u002Fvector-engine\u002Fscene\u002Fexamples","03.vector-engine\u002F03.scene\u002F04.examples",{"title":1093,"path":1094,"stem":1095,"children":1096,"page":934},"Eksport","\u002Fvector-engine\u002Fexport","03.vector-engine\u002F04.export",[1097,1101],{"title":1098,"path":1099,"stem":1100},"Formaty eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-formats","03.vector-engine\u002F04.export\u002F01.export-formats",{"title":1102,"path":1103,"stem":1104},"Proces eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-workflow","03.vector-engine\u002F04.export\u002F02.export-workflow",{"title":1106,"path":1107,"stem":1108,"children":1109,"page":934},"Wnętrze silnika","\u002Fvector-engine\u002Finternals","03.vector-engine\u002F05.internals",[1110,1113,1117,1121],{"title":906,"path":1111,"stem":1112},"\u002Fvector-engine\u002Finternals\u002Farchitecture","03.vector-engine\u002F05.internals\u002F01.architecture",{"title":1114,"path":1115,"stem":1116},"WebAssembly i workery","\u002Fvector-engine\u002Finternals\u002Fwasm","03.vector-engine\u002F05.internals\u002F02.wasm",{"title":1118,"path":1119,"stem":1120},"Workspace i panele","\u002Fvector-engine\u002Finternals\u002Fworkspace","03.vector-engine\u002F05.internals\u002F03.workspace",{"title":1122,"path":1123,"stem":1124},"Breakpointy","\u002Fvector-engine\u002Finternals\u002Fbreakpoints","03.vector-engine\u002F05.internals\u002F04.breakpoints",{"title":1126,"path":1127,"stem":1128},"Wdrożenie na Vercel","\u002Fvector-engine\u002Fdeployment","03.vector-engine\u002F06.deployment",1793986307941]