This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Диагностика повторного client fetch после SSR</title>
|
||||
<desc id="desc">Схема начинает с повторного client fetch после hydrate и разделяет четыре причины: snapshot отсутствует, snapshot совпадает, но игнорирован, версии markup и snapshot не совпадают, либо fetch вызван явным пользовательским действием. Для mismatch показано сохранение версий и остановка до mutation.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#516579"/>
|
||||
</marker>
|
||||
<marker id="arrow-red" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#bd3d4b"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#f7fafc"/>
|
||||
<rect x="42" y="34" width="1116" height="78" rx="18" fill="#102a43"/>
|
||||
<text x="78" y="74" fill="#ffffff" font-family="Arial, sans-serif" font-size="30" font-weight="700">Повторный client fetch: сначала классифицируйте переход</text>
|
||||
<text x="78" y="99" fill="#cbd8e6" font-family="Arial, sans-serif" font-size="18">Одинаковый запрос в DevTools может означать четыре разные причины и четыре разных действия.</text>
|
||||
|
||||
<rect x="365" y="148" width="470" height="100" rx="16" fill="#fff8df" stroke="#c99b2d" stroke-width="3"/>
|
||||
<text x="402" y="189" fill="#785900" font-family="Arial, sans-serif" font-size="24" font-weight="700">После hydrate начался client fetch</text>
|
||||
<text x="432" y="220" fill="#243b53" font-family="Arial, sans-serif" font-size="17">Сначала собрать owner, trigger, markup version и snapshot version.</text>
|
||||
|
||||
<line x1="600" y1="249" x2="600" y2="298" stroke="#516579" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<line x1="126" y1="300" x2="1074" y2="300" stroke="#516579" stroke-width="4"/>
|
||||
<line x1="150" y1="300" x2="150" y2="338" stroke="#516579" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<line x1="436" y1="300" x2="436" y2="338" stroke="#516579" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<line x1="764" y1="300" x2="764" y2="338" stroke="#bd3d4b" stroke-width="5" marker-end="url(#arrow-red)"/>
|
||||
<line x1="1050" y1="300" x2="1050" y2="338" stroke="#516579" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="52" y="348" width="196" height="220" rx="16" fill="#e6f0fb" stroke="#6b9fd1" stroke-width="3"/>
|
||||
<text x="76" y="387" fill="#164a78" font-family="Arial, sans-serif" font-size="20" font-weight="700">1. No snapshot</text>
|
||||
<text x="76" y="423" fill="#243b53" font-family="Arial, sans-serif" font-size="16">Bootstrap starts</text>
|
||||
<text x="76" y="447" fill="#243b53" font-family="Arial, sans-serif" font-size="16">with empty state.</text>
|
||||
<line x1="76" y1="472" x2="224" y2="472" stroke="#bfd2e6" stroke-width="2"/>
|
||||
<text x="76" y="505" fill="#164a78" font-family="Arial, sans-serif" font-size="16" font-weight="700">Action</text>
|
||||
<text x="76" y="530" fill="#243b53" font-family="Arial, sans-serif" font-size="15">Pass named initial</text>
|
||||
<text x="76" y="551" fill="#243b53" font-family="Arial, sans-serif" font-size="15">snapshot to bootstrap.</text>
|
||||
|
||||
<rect x="280" y="348" width="312" height="220" rx="16" fill="#e7f7f0" stroke="#16805c" stroke-width="3"/>
|
||||
<text x="305" y="387" fill="#0f5c42" font-family="Arial, sans-serif" font-size="20" font-weight="700">2. Versions match</text>
|
||||
<text x="305" y="423" fill="#243b53" font-family="Arial, sans-serif" font-size="16">Snapshot exists, but</text>
|
||||
<text x="305" y="447" fill="#243b53" font-family="Arial, sans-serif" font-size="16">a hook ignores it.</text>
|
||||
<line x1="305" y1="472" x2="563" y2="472" stroke="#b9e6d5" stroke-width="2"/>
|
||||
<text x="305" y="505" fill="#0f5c42" font-family="Arial, sans-serif" font-size="16" font-weight="700">Action</text>
|
||||
<text x="305" y="530" fill="#243b53" font-family="Arial, sans-serif" font-size="15">Use accepted snapshot</text>
|
||||
<text x="305" y="551" fill="#243b53" font-family="Arial, sans-serif" font-size="15">as initial state; skip fetch.</text>
|
||||
|
||||
<rect x="624" y="332" width="282" height="252" rx="16" fill="#fdecef" stroke="#bd3d4b" stroke-width="4"/>
|
||||
<text x="650" y="373" fill="#8d2636" font-family="Arial, sans-serif" font-size="20" font-weight="700">3. Mismatch</text>
|
||||
<text x="650" y="409" fill="#6e2530" font-family="Arial, sans-serif" font-size="16">markup: entry-r8</text>
|
||||
<text x="650" y="433" fill="#6e2530" font-family="Arial, sans-serif" font-size="16">snapshot: entry-r7</text>
|
||||
<line x1="650" y1="455" x2="878" y2="455" stroke="#efb4bc" stroke-width="2"/>
|
||||
<text x="650" y="488" fill="#8d2636" font-family="Arial, sans-serif" font-size="16" font-weight="700">Action before mutation</text>
|
||||
<text x="650" y="514" fill="#6e2530" font-family="Arial, sans-serif" font-size="15">record both versions</text>
|
||||
<text x="650" y="536" fill="#6e2530" font-family="Arial, sans-serif" font-size="15">keep client fetch stopped</text>
|
||||
<text x="650" y="558" fill="#6e2530" font-family="Arial, sans-serif" font-size="15">choose recovery explicitly</text>
|
||||
|
||||
<rect x="938" y="348" width="210" height="220" rx="16" fill="#eef2ff" stroke="#727ac9" stroke-width="3"/>
|
||||
<text x="963" y="387" fill="#353e87" font-family="Arial, sans-serif" font-size="20" font-weight="700">4. New trigger</text>
|
||||
<text x="963" y="423" fill="#243b53" font-family="Arial, sans-serif" font-size="16">User changes a</text>
|
||||
<text x="963" y="447" fill="#243b53" font-family="Arial, sans-serif" font-size="16">filter or refreshes.</text>
|
||||
<line x1="963" y1="472" x2="1122" y2="472" stroke="#cfd1ef" stroke-width="2"/>
|
||||
<text x="963" y="505" fill="#353e87" font-family="Arial, sans-serif" font-size="16" font-weight="700">Action</text>
|
||||
<text x="963" y="530" fill="#243b53" font-family="Arial, sans-serif" font-size="15">Keep fetch, name the</text>
|
||||
<text x="963" y="551" fill="#243b53" font-family="Arial, sans-serif" font-size="15">trigger and new input.</text>
|
||||
|
||||
<line x1="764" y1="586" x2="764" y2="640" stroke="#bd3d4b" stroke-width="5" marker-end="url(#arrow-red)"/>
|
||||
<rect x="468" y="654" width="592" height="84" rx="16" fill="#ffffff" stroke="#bd3d4b" stroke-width="3"/>
|
||||
<text x="500" y="691" fill="#8d2636" font-family="Arial, sans-serif" font-size="21" font-weight="700">Do not hide mismatch with an automatic fetch</text>
|
||||
<text x="500" y="718" fill="#6e2530" font-family="Arial, sans-serif" font-size="16">Diagnostic first; recovery is a separate project decision and test.</text>
|
||||
|
||||
<rect x="52" y="654" width="352" height="84" rx="16" fill="#102a43"/>
|
||||
<text x="76" y="690" fill="#ffffff" font-family="Arial, sans-serif" font-size="18" font-weight="700">Fixture boundary</text>
|
||||
<text x="76" y="716" fill="#cbd8e6" font-family="Arial, sans-serif" font-size="15">No DOM, network, trace or framework runtime.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.1 KiB |
@@ -0,0 +1,70 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 780" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Переход SSR к CSR с проверкой версии snapshot</title>
|
||||
<desc id="desc">Server request читает source версии entry-r7, создаёт HTML и serialized snapshot. Hydrate сравнивает version разметки и snapshot. Совпадение пропускает client fetch, а mismatch записывается до mutation и требует отдельного recovery path.</desc>
|
||||
<defs>
|
||||
<marker id="arrow-slate" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#516579"/>
|
||||
</marker>
|
||||
<marker id="arrow-green" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#16805c"/>
|
||||
</marker>
|
||||
<marker id="arrow-red" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#bd3d4b"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<rect width="1200" height="780" fill="#f7fafc"/>
|
||||
<rect x="42" y="34" width="1116" height="78" rx="18" fill="#102a43"/>
|
||||
<text x="78" y="74" fill="#ffffff" font-family="Arial, sans-serif" font-size="30" font-weight="700">SSR → serialized snapshot → hydrate</text>
|
||||
<text x="78" y="99" fill="#cbd8e6" font-family="Arial, sans-serif" font-size="18">Версия связывает первый HTML и initial state; client fetch остаётся отдельным действием.</text>
|
||||
|
||||
<text x="70" y="160" fill="#526779" font-family="Arial, sans-serif" font-size="18" font-weight="700">SERVER</text>
|
||||
<text x="712" y="160" fill="#526779" font-family="Arial, sans-serif" font-size="18" font-weight="700">BROWSER</text>
|
||||
<line x1="645" y1="144" x2="645" y2="694" stroke="#d4dee8" stroke-width="3" stroke-dasharray="8 10"/>
|
||||
|
||||
<rect x="62" y="192" width="246" height="178" rx="16" fill="#e6f0fb" stroke="#6b9fd1" stroke-width="3"/>
|
||||
<text x="88" y="230" fill="#164a78" font-family="Arial, sans-serif" font-size="22" font-weight="700">1. SSR/source</text>
|
||||
<text x="88" y="268" fill="#243b53" font-family="Arial, sans-serif" font-size="18">owner: server-request</text>
|
||||
<text x="88" y="298" fill="#243b53" font-family="Arial, sans-serif" font-size="18">read-versioned-source</text>
|
||||
<rect x="88" y="318" width="192" height="34" rx="8" fill="#ffffff"/>
|
||||
<text x="106" y="341" fill="#164a78" font-family="Arial, sans-serif" font-size="18" font-weight="700">entry-r7</text>
|
||||
|
||||
<rect x="354" y="192" width="246" height="178" rx="16" fill="#eef2ff" stroke="#727ac9" stroke-width="3"/>
|
||||
<text x="380" y="230" fill="#353e87" font-family="Arial, sans-serif" font-size="22" font-weight="700">2. Server response</text>
|
||||
<text x="380" y="268" fill="#243b53" font-family="Arial, sans-serif" font-size="18">HTML marker: entry-r7</text>
|
||||
<text x="380" y="298" fill="#243b53" font-family="Arial, sans-serif" font-size="18">serialized snapshot: entry-r7</text>
|
||||
<rect x="380" y="318" width="191" height="34" rx="8" fill="#ffffff"/>
|
||||
<text x="398" y="341" fill="#353e87" font-family="Arial, sans-serif" font-size="17" font-weight="700">version + payload</text>
|
||||
|
||||
<line x1="309" y1="280" x2="351" y2="280" stroke="#516579" stroke-width="4" marker-end="url(#arrow-slate)"/>
|
||||
<line x1="602" y1="280" x2="699" y2="280" stroke="#516579" stroke-width="4" marker-end="url(#arrow-slate)"/>
|
||||
|
||||
<rect x="718" y="192" width="420" height="178" rx="16" fill="#fff8df" stroke="#c99b2d" stroke-width="3"/>
|
||||
<text x="746" y="230" fill="#785900" font-family="Arial, sans-serif" font-size="22" font-weight="700">3. Hydrate comparison</text>
|
||||
<text x="746" y="268" fill="#243b53" font-family="Arial, sans-serif" font-size="18">markup version = snapshot version?</text>
|
||||
<rect x="746" y="291" width="164" height="46" rx="10" fill="#ffffff" stroke="#e3c364" stroke-width="2"/>
|
||||
<text x="778" y="321" fill="#785900" font-family="Arial, sans-serif" font-size="20" font-weight="700">MATCH</text>
|
||||
<rect x="930" y="291" width="176" height="46" rx="10" fill="#ffffff" stroke="#e3c364" stroke-width="2"/>
|
||||
<text x="952" y="321" fill="#785900" font-family="Arial, sans-serif" font-size="20" font-weight="700">MISMATCH</text>
|
||||
|
||||
<path d="M 828 372 C 828 438 779 454 689 454" fill="none" stroke="#16805c" stroke-width="5" marker-end="url(#arrow-green)"/>
|
||||
<text x="713" y="423" fill="#16805c" font-family="Arial, sans-serif" font-size="18" font-weight="700">same version</text>
|
||||
<rect x="408" y="468" width="372" height="160" rx="16" fill="#e7f7f0" stroke="#16805c" stroke-width="3"/>
|
||||
<text x="436" y="507" fill="#0f5c42" font-family="Arial, sans-serif" font-size="23" font-weight="700">4a. Accept snapshot</text>
|
||||
<text x="436" y="546" fill="#1f4d3c" font-family="Arial, sans-serif" font-size="18">state owner: serialized-snapshot</text>
|
||||
<text x="436" y="578" fill="#1f4d3c" font-family="Arial, sans-serif" font-size="18">client fetch: skipped</text>
|
||||
<text x="436" y="605" fill="#1f4d3c" font-family="Arial, sans-serif" font-size="16">No second request in the teaching model.</text>
|
||||
|
||||
<path d="M 1018 372 C 1018 430 1018 442 1018 466" fill="none" stroke="#bd3d4b" stroke-width="5" marker-end="url(#arrow-red)"/>
|
||||
<text x="1033" y="424" fill="#bd3d4b" font-family="Arial, sans-serif" font-size="18" font-weight="700">different version</text>
|
||||
<rect x="822" y="468" width="316" height="160" rx="16" fill="#fdecef" stroke="#bd3d4b" stroke-width="3"/>
|
||||
<text x="850" y="507" fill="#8d2636" font-family="Arial, sans-serif" font-size="23" font-weight="700">4b. Stop and record</text>
|
||||
<text x="850" y="546" fill="#6e2530" font-family="Arial, sans-serif" font-size="18">diagnostic: r8 ≠ r7</text>
|
||||
<text x="850" y="578" fill="#6e2530" font-family="Arial, sans-serif" font-size="18">mutation: not-started</text>
|
||||
<text x="850" y="605" fill="#6e2530" font-family="Arial, sans-serif" font-size="16">Choose a project recovery path.</text>
|
||||
|
||||
<rect x="62" y="672" width="1076" height="64" rx="14" fill="#ffffff" stroke="#d4dee8" stroke-width="2"/>
|
||||
<circle cx="100" cy="704" r="10" fill="#16805c"/>
|
||||
<text x="122" y="710" fill="#243b53" font-family="Arial, sans-serif" font-size="17">Green: the snapshot is accepted; automatic client fetch is skipped.</text>
|
||||
<circle cx="706" cy="704" r="10" fill="#bd3d4b"/>
|
||||
<text x="728" y="710" fill="#243b53" font-family="Arial, sans-serif" font-size="17">Red: mismatch stays visible before mutation.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.5 KiB |
@@ -0,0 +1,78 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 780" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Владение данными на границе SSR и CSR</title>
|
||||
<desc id="desc">Временная шкала показывает: server request владеет source, server response — HTML и serialized snapshot, hydrate проверяет их version, затем snapshot становится owner initial state. Client fetch является отдельной новой операцией. Прямая передача server source в client state перечёркнута.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#516579"/>
|
||||
</marker>
|
||||
<marker id="arrow-green" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#16805c"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<rect width="1200" height="780" fill="#f7fafc"/>
|
||||
<rect x="42" y="34" width="1116" height="78" rx="18" fill="#102a43"/>
|
||||
<text x="78" y="74" fill="#ffffff" font-family="Arial, sans-serif" font-size="30" font-weight="700">Кто владеет состоянием в каждой фазе</text>
|
||||
<text x="78" y="99" fill="#cbd8e6" font-family="Arial, sans-serif" font-size="18">Source, HTML, serialized snapshot и client state живут в разное время и не являются одним cache.</text>
|
||||
|
||||
<text x="70" y="164" fill="#526779" font-family="Arial, sans-serif" font-size="18" font-weight="700">TIME →</text>
|
||||
<line x1="164" y1="157" x2="1120" y2="157" stroke="#aebdcb" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="60" y="208" width="210" height="184" rx="16" fill="#e6f0fb" stroke="#6b9fd1" stroke-width="3"/>
|
||||
<text x="84" y="248" fill="#164a78" font-family="Arial, sans-serif" font-size="22" font-weight="700">SSR/source</text>
|
||||
<text x="84" y="283" fill="#243b53" font-family="Arial, sans-serif" font-size="18">owner</text>
|
||||
<text x="84" y="313" fill="#164a78" font-family="Arial, sans-serif" font-size="19" font-weight="700">server-request</text>
|
||||
<text x="84" y="350" fill="#243b53" font-family="Arial, sans-serif" font-size="17">version: entry-r7</text>
|
||||
<text x="84" y="375" fill="#243b53" font-family="Arial, sans-serif" font-size="15">Lives for one server read.</text>
|
||||
|
||||
<rect x="312" y="208" width="248" height="184" rx="16" fill="#eef2ff" stroke="#727ac9" stroke-width="3"/>
|
||||
<text x="338" y="248" fill="#353e87" font-family="Arial, sans-serif" font-size="22" font-weight="700">Server response</text>
|
||||
<text x="338" y="283" fill="#243b53" font-family="Arial, sans-serif" font-size="17">HTML marker</text>
|
||||
<text x="338" y="310" fill="#353e87" font-family="Arial, sans-serif" font-size="18" font-weight="700">entry-r7</text>
|
||||
<text x="338" y="342" fill="#243b53" font-family="Arial, sans-serif" font-size="17">serialized snapshot</text>
|
||||
<text x="338" y="369" fill="#353e87" font-family="Arial, sans-serif" font-size="18" font-weight="700">version + payload</text>
|
||||
|
||||
<rect x="602" y="208" width="240" height="184" rx="16" fill="#fff8df" stroke="#c99b2d" stroke-width="3"/>
|
||||
<text x="628" y="248" fill="#785900" font-family="Arial, sans-serif" font-size="22" font-weight="700">Hydrate</text>
|
||||
<text x="628" y="283" fill="#243b53" font-family="Arial, sans-serif" font-size="17">owner</text>
|
||||
<text x="628" y="310" fill="#785900" font-family="Arial, sans-serif" font-size="18" font-weight="700">browser-transition</text>
|
||||
<text x="628" y="345" fill="#243b53" font-family="Arial, sans-serif" font-size="16">Compare markup version</text>
|
||||
<text x="628" y="370" fill="#243b53" font-family="Arial, sans-serif" font-size="16">with snapshot version.</text>
|
||||
|
||||
<rect x="884" y="208" width="256" height="184" rx="16" fill="#e7f7f0" stroke="#16805c" stroke-width="3"/>
|
||||
<text x="910" y="248" fill="#0f5c42" font-family="Arial, sans-serif" font-size="22" font-weight="700">Initial client state</text>
|
||||
<text x="910" y="283" fill="#243b53" font-family="Arial, sans-serif" font-size="17">owner after match</text>
|
||||
<text x="910" y="310" fill="#0f5c42" font-family="Arial, sans-serif" font-size="18" font-weight="700">serialized-snapshot</text>
|
||||
<text x="910" y="345" fill="#243b53" font-family="Arial, sans-serif" font-size="16">No automatic second fetch.</text>
|
||||
<text x="910" y="370" fill="#243b53" font-family="Arial, sans-serif" font-size="16">Later updates are new work.</text>
|
||||
|
||||
<line x1="271" y1="300" x2="308" y2="300" stroke="#516579" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<line x1="561" y1="300" x2="598" y2="300" stroke="#516579" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<line x1="843" y1="300" x2="880" y2="300" stroke="#16805c" stroke-width="5" marker-end="url(#arrow-green)"/>
|
||||
<text x="847" y="276" fill="#16805c" font-family="Arial, sans-serif" font-size="16" font-weight="700">versions match</text>
|
||||
|
||||
<rect x="60" y="466" width="520" height="192" rx="16" fill="#ffffff" stroke="#d4dee8" stroke-width="3"/>
|
||||
<text x="88" y="506" fill="#243b53" font-family="Arial, sans-serif" font-size="22" font-weight="700">Правильная передача initial state</text>
|
||||
<text x="88" y="545" fill="#526779" font-family="Arial, sans-serif" font-size="18">source → HTML + snapshot → version check → client state</text>
|
||||
<rect x="90" y="572" width="148" height="48" rx="9" fill="#e6f0fb"/>
|
||||
<text x="112" y="603" fill="#164a78" font-family="Arial, sans-serif" font-size="18" font-weight="700">source</text>
|
||||
<line x1="239" y1="596" x2="288" y2="596" stroke="#516579" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<rect x="294" y="572" width="164" height="48" rx="9" fill="#eef2ff"/>
|
||||
<text x="317" y="603" fill="#353e87" font-family="Arial, sans-serif" font-size="18" font-weight="700">snapshot</text>
|
||||
<line x1="459" y1="596" x2="510" y2="596" stroke="#16805c" stroke-width="4" marker-end="url(#arrow-green)"/>
|
||||
<text x="102" y="645" fill="#526779" font-family="Arial, sans-serif" font-size="15">Snapshot is a hand-off, not a long-lived cache.</text>
|
||||
|
||||
<rect x="642" y="466" width="498" height="192" rx="16" fill="#fdecef" stroke="#bd3d4b" stroke-width="3"/>
|
||||
<text x="670" y="506" fill="#8d2636" font-family="Arial, sans-serif" font-size="22" font-weight="700">Неверное сокращение границы</text>
|
||||
<text x="670" y="545" fill="#6e2530" font-family="Arial, sans-serif" font-size="18">source → client state без snapshot и version check</text>
|
||||
<rect x="674" y="572" width="146" height="48" rx="9" fill="#e6f0fb"/>
|
||||
<text x="696" y="603" fill="#164a78" font-family="Arial, sans-serif" font-size="18" font-weight="700">source</text>
|
||||
<line x1="824" y1="596" x2="1002" y2="596" stroke="#bd3d4b" stroke-width="6"/>
|
||||
<line x1="865" y1="570" x2="950" y2="622" stroke="#bd3d4b" stroke-width="7"/>
|
||||
<line x1="950" y1="570" x2="865" y2="622" stroke="#bd3d4b" stroke-width="7"/>
|
||||
<rect x="1005" y="572" width="112" height="48" rx="9" fill="#fdecef"/>
|
||||
<text x="1021" y="603" fill="#8d2636" font-family="Arial, sans-serif" font-size="17" font-weight="700">state</text>
|
||||
<text x="674" y="645" fill="#6e2530" font-family="Arial, sans-serif" font-size="15">The browser cannot own a completed server request.</text>
|
||||
|
||||
<rect x="60" y="700" width="1080" height="42" rx="12" fill="#102a43"/>
|
||||
<text x="84" y="728" fill="#ffffff" font-family="Arial, sans-serif" font-size="17">Project decision: choose the marker and recovery path. Documentation fact: server markup and client render must agree.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.5 KiB |
Reference in New Issue
Block a user