WEB / WEB-10.04
Resource, script ve request loading
Download, execution ve application sonucu farklı anlarda oluşur. Parser’ın kaynak keşfi, script scheduling ve Fetch/XHR completion’ı somut bir loading defteriyle ayır.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
defer A→B
- A/B keşfedildi
Document parser A/B script’lerini defer ile keşfetmiştir; fetch başlatılması ve request’lerin origin’e ulaşması bu başlangıçta verilidir. Seçilen kesit B/A response arrival’ını izler; henüz hiçbir script evaluate edilmedi.
- Document / Duru
- A/B declared; parser running
- Resource loader
- A/B fetch initiated
- Origin / Atlas
- A/B requests supplied arrived
- Execution / API state
- Executed=[]
- B resource ulaştı
Bu senaryoda B response’u loader’a önce ulaşır; parser henüz tamamlanmamıştır.
- Document / Duru
- Parser running
- Resource loader
- B ready; A pending
- Origin / Atlas
- B200 complete; A pending
- Execution / API state
- Executed=[]
- B execution kararı
defer B A/parsing’i bekler; async branch B’yi hazır olduğunda execute eder.
- Document / Duru
- Parser running
- Resource loader
- B ready; A pending
- Origin / Atlas
- A response pending
- Execution / API state
- Executed=[]
- Parsing tamamlandı
Document parsing tamamlanır; A henüz pending olduğundan defer execution kuyruğu yine bekler.
- Document / Duru
- Parser complete
- Resource loader
- B ready; A pending
- Origin / Atlas
- A response pending
- Execution / API state
- Executed=[]
- A resource ulaştı
A response loader’a şimdi ulaşır; resource-ready order B/A olarak tamamlanmıştır.
- Document / Duru
- Parser complete
- Resource loader
- A/B ready
- Origin / Atlas
- A200/B200 complete
- Execution / API state
- Executed=[]
- Local evaluation
defer ordered queue A sonra B evaluate eder; local execution yeni network response değildir.
- Document / Duru
- Parser complete
- Resource loader
- A/B ready
- Origin / Atlas
- Exchange complete
- Execution / API state
- Executed=[A,B]
- Event sınırını koru
Duru execution sonucunu okur; image yüklemesi veya bütün application async işleri bu listede ölçülmez.
- Document / Duru
- DOM/execution observation complete
- Resource loader
- A/B ready
- Origin / Atlas
- Exchange complete
- Execution / API state
- Executed=[A,B]
async B→A
- A/B keşfedildi
Document parser A/B script’lerini async ile keşfetmiştir; fetch başlatılması ve origin receipt başlangıçta verilidir. Response’ların B/A hazır olma sırası bu örneğin seçimidir; declaration sırası evaluation garantisi sağlamaz.
- Document / Duru
- A/B declared; parser running
- Resource loader
- A/B fetch initiated
- Origin / Atlas
- A/B requests supplied arrived
- Execution / API state
- Executed=[]
- B resource ulaştı
Bu senaryoda B response’u loader’a önce ulaşır; parser henüz tamamlanmamıştır.
- Document / Duru
- Parser running
- Resource loader
- B ready; A pending
- Origin / Atlas
- B200 complete; A pending
- Execution / API state
- Executed=[]
- B execution kararı
async branch B’yi hazır olduğunda execute eder; bu declaration order garantisi değildir.
- Document / Duru
- Parser running
- Resource loader
- B ready; A pending
- Origin / Atlas
- A response pending
- Execution / API state
- Executed=[B]
- Parsing tamamlandı
Document parsing tamamlanır. B bu async dalında zaten çalışmıştır, A’nın response’u hâlâ beklenir. Bu adım defer kuyruğunu işletmez ve A’nın daha önce çalıştığını varsaymaz.
- Document / Duru
- Parser complete
- Resource loader
- B ready; A pending
- Origin / Atlas
- A response pending
- Execution / API state
- Executed=[B]
- A resource ulaştı
A response loader’a şimdi ulaşır; resource-ready order B/A olarak tamamlanmıştır.
- Document / Duru
- Parser complete
- Resource loader
- A/B ready
- Origin / Atlas
- A200/B200 complete
- Execution / API state
- Executed=[B]
- Local evaluation
Async A şimdi evaluate edilir. Bu senaryoda tamamlanmış execution sırası B/A’dır; başka hazır olma sıraları da mümkündür.
- Document / Duru
- Parser complete
- Resource loader
- A/B ready
- Origin / Atlas
- Exchange complete
- Execution / API state
- Executed=[B,A]
- Event sınırını koru
Duru execution sonucunu okur; image yüklemesi veya bütün application async işleri bu listede ölçülmez.
- Document / Duru
- DOM/execution observation complete
- Resource loader
- A/B ready
- Origin / Atlas
- Exchange complete
- Execution / API state
- Executed=[B,A]
404 completion
- Fetch GET hazır
Duru harmless missing note ister; başlangıçta Response ve consumed body yoktur.
- Document / Duru
- GET /notes/missing ready
- Resource loader
- Request pending
- Origin / Atlas
- No request yet
- Execution / API state
- Promise pending; body absent
- Request ulaştı
GET origin’e ulaşır; public missing-resource outcome’u seçilmek üzere hazırdır.
- Document / Duru
- Waiting response
- Resource loader
- Request dispatched
- Origin / Atlas
- GET received; missing note
- Execution / API state
- Promise pending; body absent
- 404 hazır
Origin 404 Not found content’i hazırlar; bu normal HTTP response network error değildir.
- Document / Duru
- Waiting response
- Resource loader
- Waiting headers
- Origin / Atlas
- 404 ready; Not found
- Execution / API state
- Promise pending; body absent
- 404 headers ulaştı
Loader status ve headers’i alır; Response exposed olabilir ama body consumption ayrı kalır.
- Document / Duru
- Response available
- Resource loader
- 404 headers received
- Origin / Atlas
- 404 body delivery pending
- Execution / API state
- Promise fulfilled; status404; ok=false
- Content tamamlandı
Not found content loader’a ulaşır; ayrı body read operation’ı şimdi complete olabilir.
- Document / Duru
- Response available
- Resource loader
- 404 body complete
- Origin / Atlas
- 404 fully delivered
- Execution / API state
- Promise fulfilled; body read pending
- Local outcome kontrol
Client text’i tüketir; status 404 olduğu için HTTP success false’dur. XHR load sonucu da ayrıca status kontrolü gerektirir.
- Document / Duru
- Show missing note outcome
- Resource loader
- 404 body complete
- Origin / Atlas
- Exchange complete
- Execution / API state
- Body=Not found; accepted=false
Abort after headers
- Cancellable GET
Duru public slow note GET’ini default AbortController signal ile başlatır.
- Document / Duru
- GET /notes/slow ready
- Resource loader
- Request pending
- Origin / Atlas
- No request yet
- Execution / API state
- Promise pending; body absent
- GET ulaştı
Origin GET’i alır; bu arrival serverNeverProcessed iddiasını zaten sınırlar.
- Document / Duru
- Waiting response
- Resource loader
- Request dispatched
- Origin / Atlas
- GET received; benign read
- Execution / API state
- Promise pending; body absent
- 200 headers ulaştı
200 status ve headers loader’a ulaşır; bu senaryoda body henüz tamamlanmamıştır.
- Document / Duru
- Response available
- Resource loader
- 200 headers; body incomplete
- Origin / Atlas
- 200 headers sent; body pending
- Execution / API state
- Promise fulfilled; body incomplete
- Local abort
Duru abort() çağırır; bu model cancellation wire veya server rollback message’ı uydurmaz.
- Document / Duru
- Abort called
- Resource loader
- Client operation cancelled
- Origin / Atlas
- GET observed; rollback not proven
- Execution / API state
- Response exists; body unavailable
- Body read reject
Incomplete body text() read’i default AbortError ile reject olur; fulfilled Response geri alınmaz.
- Document / Duru
- Abort outcome shown
- Resource loader
- Client operation cancelled
- Origin / Atlas
- GET observed; rollback not proven
- Execution / API state
- bodyRead=AbortError; server outcome bounded
ROLLER · STATE · VERİ AKIŞI
Resource keşfi execution değildir
Duru’nun Atlas sayfası HTML’den CSS, image ve script URL’leri keşfeder; JavaScript ayrıca Fetch veya XMLHttpRequest başlatabilir. Browser scheduling, cache lookup, network ve decode/execute farklı işlerdir. Bir URL’nin Network tablosunda görünmesi onun body’sinin tamamlandığını veya script’in çalıştığını söylemez. Preload/scanner erken keşif yapabildiğinden bütün request sırasını DOM parser’ın yürüdüğü sıra diye okumak da doğru değildir.
External parser-inserted classic script async/defer yoksa parsing’i fetch/evaluation tamamlanana kadar durdurur; browser’ın diğer her işinin durduğu anlamına gelmez. Inline classic script için external download yoktur. Bu ders normal JavaScript MIME type ve same-origin kaynakları seçer; stylesheet blocking, policy refusal ve dynamically inserted script’in force-async kuralları bu fixture’ın dışında kalır.
Download sırası ile execute sırası farklıdır
İki external classic script defer ile A sonra B yazılmış olsun. Fetch parsing ile paralel ilerleyebilir; B önce hazır olsa bile bu parser-inserted deferred pair A sonra B olarak, document parsing bittikten sonra execute edilir. DOMContentLoaded bu deferred execution’ın tamamlanmasını bekler. Bu event bütün image’lerin yüklenmesini veya application’ın bütün async işlerini bitirmesini garanti etmez.
async classic pair declaration order garantisi vermez; script hazır olduğunda execute edilebilir ve parser completion’dan önce çalışabilir. Artifact seçilmiş B-ready-before-A branch’ini gösterir; “async her zaman ters sıra çalışır” kuralı değildir. Birbirine bağımlı A/B’yi bu sıra garantisi olmayan contract’a bağlamak availability/state hatası yaratabilir.
type=module default olarak parsing sonrasına ertelenir ve static dependency graph’ını yükler; defer attribute module üzerinde ek etki yapmaz. async module graph hazır olduğunda daha erken evaluation seçebilir. Module evaluation, klasik global script ile aynı scope contract’ı değildir. Top-level await içeren graph’larda async evaluation completion ayrı nüans taşır; fixture await içermeyen küçük bir graph kullanır ve bütün async module işlerinin DOMContentLoaded öncesi bitmesini iddia etmez.
Response, body ve status ayrı kapılardır
Fetch Promise status ve headers kullanılabilir olduğunda Response ile fulfill olabilir; body henüz streaming olabilir. response.text()/json() ayrı async consumption’dır. Body disturbed/locked olduğunda tekrar kullanımı sınırlandırılır; ikinci kez aynı body’yi okumayı varsayma. json() parse failure da HTTP status failure’dan ayrıdır. GET fixture’ında request body yoktur; Fetch GET/HEAD için non-null request body kabul etmez.
404 gelmesi Fetch Promise’ını genellikle reject etmez; status 404 ve ok=false olan Response gelir. XHR load event’i de transfer completion yoludur; status ayrıca okunmalıdır ve 404 için load gelebilir. readyState DONE tek başına HTTP veya business success değildir. XHR error/abort ile Fetch rejection farklı API yüzeyleridir; hepsini tek success boolean’ına indirgeme.
AbortController yalnız client operation’ın cancellation sınırını anlatır. Headers sonrası abort edilmiş Fetch’in fulfill edilmiş Promise’ı geri alınmaz; body read AbortError ile reject olabilir. Request server’a ulaştıysa cancellation server’ın hiç işlem yapmadığını veya rollback’i kanıtlamaz. Native örnek benign GET’tir; action retry semantics WEB-07.02’de ayrı ele alınır.
Browser HTTP cache Request.cache ile ilgili seçime katılabilir. default normal eligibility/freshness kurallarını kullanır; no-cache uygun entry olsa da validation yolunu ister, no-store browser HTTP cache’e bakmadan network kullanır ve response’u bu cache’e yazmaz. Bu API seçimi bütün ara shared cache’leri veya Service Worker Cache API’yi temizleyen komut değildir. Ayrıntılı HTTP cache kuralları WEB-09.02–03 ile birlikte okunmalıdır.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Async dependency
- Declaration ve readiness iki ayrı sıra oldu
Script declaration A,B iken readyOrder B,A’dır. Parser-inserted external classic context ve CSS blocking yokluğu verilmiştir. B downloaded olması A’nın gerekli state’i kurduğu anlamına gelmez.
- Resource/API record
- Declared A,B / ready B,A
- Dependency/completion gate
- Gate bekliyor
- Application state
- Outcome yok
- Async execution dependency’yi garanti etmedi
Seçilmiş async execution B,A’dır; asyncOrderGuaranteed false’tur. A önce gerekli state’i kuruyorsa declaration order’a güvenmek yanlış acceptance koşuludur. Explicit dependency veya ordered execution gerekir.
- Resource/API record
- Declared A,B / ready B,A
- Dependency/completion gate
- Selected async B,A / order not guaranteed
- Application state
- Outcome yok
- Loaded label initialized state sayılmadı
Resource-ready, script evaluated ve application state initialized farklı milestones’dır. Yanlış sıra undefined dependency veya yarım UI state doğurabilir. Bu harmless fixture yalnız names’i order ledger’a ekler; gerçek protected action çalıştırmaz.
- Resource/API record
- Declared A,B / ready B,A
- Dependency/completion gate
- Selected async B,A / order not guaranteed
- Application state
- Ready ≠ evaluated or application initialized
- Defer normal karşılaştırma branch’i oldu
deferredExecution A,B olur ve DOMContentLoaded öncesidir. Defer burada parsing sonrası ordered execution sağlar. Bu loading contract authentication, schema veya server-side business gate’lerini çözmez.
- Resource/API record
- Defer A,B / before DOMContentLoaded
- Dependency/completion gate
- Selected async B,A / order not guaranteed
- Application state
- Ready ≠ evaluated or application initialized
- Module graph kendi qualification’ıyla seçildi
main.mjs dependency helper.mjs taşır; defaultDeferred true, deferAttributeAddsEffect false’tur. Top-level await yokluğu verilmiştir. Bu seçilmiş graph’ın sırası bütün async module/TLA durumlarına genellenmez.
- Resource/API record
- Defer A,B / before DOMContentLoaded
- Dependency/completion gate
- Explicit helper.mjs→main.mjs / no TLA supplied
- Application state
- Ready ≠ evaluated or application initialized
- Control doğru dependency boundary’sinde kaldı
Kontrol source yükleme ile gereken state’in initialization’ını açıkça ilişkilendirmektir. Exact latency veya bütün module graph davranışı ölçülmez. Ordered local evaluation sonucu broader business success diye sunulmaz.
- Resource/API record
- Defer A,B / before DOMContentLoaded
- Dependency/completion gate
- Explicit helper.mjs→main.mjs / no TLA supplied
- Application state
- Explicit initialization dependency required
HTTP/body gates
- 404 fulfilled Response olarak ayrı kaydedildi
fetch404 fulfilled-response verir; status 404, ok false ve body Not found’dur. XHR load ve readyState 4 ile yine 404 verir. API completion label’ı HTTP success veya successful action değildir.
- Resource/API record
- Fetch fulfilled / XHR load / HTTP404
- Dependency/completion gate
- Gate bekliyor
- Application state
- Outcome yok
- Status gate successful action’ı withheld bıraktı
acceptedAsHttpSuccess false’tur. Client, status range ve expected content contract’ını ayrı kontrol eder. Normal 404 rejection, attack attribution veya server never received sonucu değildir.
- Resource/API record
- Fetch fulfilled / XHR load / HTTP404
- Dependency/completion gate
- 404 not accepted as HTTP success
- Application state
- Outcome yok
- UI complete iş sonucunu fazla yorumlamadı
Body consumption complete-text olsa bile 404 result uygulamanın beklediği successful content değildir. Response varlığı ve parsed data validation başka gate’lerdir. Status ile content outcome tek done label’a indirgenmez.
- Resource/API record
- Fetch fulfilled / XHR load / HTTP404
- Dependency/completion gate
- 404 not accepted as HTTP success
- Application state
- Body read complete / business success not inferred
- Abort headers receipt’i geriye çevirmedi
abortAfterHeaders fulfilled Response ve status 200 sağlar; bodyCompleteBeforeAbort false’tur. Default abort reason AbortError ve bodyReadOutcome AbortError olur. Headers alınmışken body’nin tamamlanmaması mümkündür.
- Resource/API record
- Response200 exists / body read AbortError
- Dependency/completion gate
- 404 not accepted as HTTP success
- Application state
- Body read complete / business success not inferred
- Cancellation server rollback kanıtı olmadı
requestReachedOriginSupplied true ve serverNeverProcessedProven false’tur. Abort client consumption’ı durdurabilir; server’ın request’i hiç görmediği veya action’ı geri aldığı sonucu çıkmaz. Retry için product reconciliation ayrı gerekir.
- Resource/API record
- Response200 exists / body read AbortError
- Dependency/completion gate
- Client abort / server processing not disproven
- Application state
- Body read complete / business success not inferred
- Failure sınırı public GET scope’unda kapandı
Bu public GET ledger’ı status, Response ve body state’i ayırır. Mutating transaction, current authorization veya server rollback ölçülmez. Correct UI handling, hangi completion’ın gerçekleşmediğini açıkça söylemelidir.
- Resource/API record
- Response200 exists / body read AbortError
- Dependency/completion gate
- Client abort / server processing not disproven
- Application state
- Status/body/cancellation distinct / mutation unmeasured
VARSAYIM · SINIR · KONTROL
Yüklenmiş kaynak trusted sonuç değildir
Loading order bir dependency contract’ıdır. A’nın B’den önce gerekli state’i kurması gerekiyorsa async pair ile request’lerin declaration sırasına güvenmek yanlış kabul koşuludur. Etki undefined dependency, eksik DOM update veya yarım UI state olabilir. Script downloaded observation’ı state initialization’ın tamamlandığını kanıtlamaz.
Kontrol bağımlılığı explicit module graph veya appropriate ordered execution ile kurmak, async completion’ın nerede beklendiğini ayrıca belirlemektir. defer DOM parsing sonrasını sağlar; backend policy, identity veya business validation sağlamaz. Loading event’i uygulama invariant’ının yerine geçirilmemelidir. Sahnede script’ler yalnız harmless sıra defterine isim ekler.
Cancellation ve completion’ı fazla yorumlama
404 için fulfilled Promise’ı successful action sayan client yanlış UI kararına gider. Diğer uçta aborted request’i server hiç görmedi diye kabul etmek gözlem sınırını aşar. Condition response status, body state ve client outcome’un ayrı tutulmamasıdır; impact uygulamanın operation’ına bağlıdır.
Kontrol status range, expected content format, complete consumption ve action contract’ını ayrı değerlendirmektir. Abort sonrası received headers durabilir ama body unavailable olabilir. Retry server outcome unknown ise method semantics ve product reconciliation gerektirir. Bu lesson’in public GET fixture’ı authorization veya mutating transaction test etmez.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Loading order
- Downloaded B evaluation kanıtı olmadı
Loading kayıtlarının üreticileri parser’ın declaration’ı, loader’ın ready bilgisi ve script’in evaluation sonucudur. API kayıtlarında Fetch/XHR status ile body reader’ın tamamlanması ayrı tutulur. Selector ise yalnız authored status/acceptedAsHttpSuccess satırlarını okur; gerçek Browser log’u veya server commit ölçümü değildir. Ready B,A ve declaration A,B ayrı arrays’dir. B ready observation’ında executed list’in boş kalabilmesi normaldir. Download kaynak bytes’ını sağlar; evaluation dependency ve parser context başka koşullardır.
- Loading observations
- Declared A,B / ready B,A / evaluation separate
- Order/body comparison
- Gate bekliyor
- Evidence verdict
- Outcome yok
- Ordered ve async sonuçlar aynı input context’iyle karşılaştırıldı
Defer A,B; seçilmiş async B,A verir. Async B,A possible fakat bütün possible sonuçlar değildir. Cache path source loading’i etkileyebilir; network bytes gözlenmeden executed source capture diye sunulmaz.
- Loading observations
- Declared A,B / ready B,A / evaluation separate
- Order/body comparison
- Defer A,B / selected async B,A
- Evidence verdict
- Outcome yok
- Module qualification dependency isimleriyle korundu
Module helper.mjs ve main.mjs graph’ı default deferred’dır; defer ek effect taşımaz. Top-level await yokluğu ve normal MIME verilmiştir. Bu qualifiers tutulmadan module readiness timestamp’i broad guarantee sayılmaz.
- Loading observations
- Module graph qualified / no TLA
- Order/body comparison
- Defer A,B / selected async B,A
- Evidence verdict
- Outcome yok
- Lifecycle events aynı timestamp sayılmadı
Parser complete, DOMContentLoaded ve window load farklı causal milestones’dır. Bu fixture deferBeforeDOMContentLoaded true sağlar; exact latency benchmark değildir. Evaluation ile visible UI outcome’unu ayrıca ilişkilendirmek gerekir.
- Loading observations
- Module graph qualified / no TLA
- Order/body comparison
- Defer before DCL / exact latency unknown
- Evidence verdict
- Outcome yok
- Dependency verdict gerçek browser genellemesi olmadı
Bu seçilmiş context’te order açıklanabilir. CORS/policy refusal, arbitrary modules veya device timing ölçülmez. Source attribute ve dependency graph görünmeden tek load event’i order correctness kanıtı değildir.
- Loading observations
- Module graph qualified / no TLA
- Order/body comparison
- Defer before DCL / exact latency unknown
- Evidence verdict
- Selected order known / broader loader unmeasured
- Regression iki sıra ve required state’i birlikte kontrol etti
Declaration, readiness, evaluation ve required initialization state’i ayrı kayıtlarla tekrar kontrol edilir. Sensitive source veya full application data gerekmez. Normal async reordering, source dependency varsa açıkça ele alınır.
- Loading observations
- Module graph qualified / no TLA
- Order/body comparison
- Defer before DCL / exact latency unknown
- Evidence verdict
- Recheck attributes/readiness/evaluation/initialization
Partial body
- Partial response iki milestone ile seçildi
Loading kayıtlarının üreticileri parser’ın declaration’ı, loader’ın ready bilgisi ve script’in evaluation sonucudur. API kayıtlarında Fetch/XHR status ile body reader’ın tamamlanması ayrı tutulur. Selector ise yalnız authored status/acceptedAsHttpSuccess satırlarını okur; gerçek Browser log’u veya server commit ölçümü değildir. Headers sonrası status 200 ve fulfilled Response bulunur, fakat complete body yoktur. AbortError content read’e aittir. HTTP status başarılı aralıkta olabilirken body consumption başarısız olabilir.
- Loading observations
- Headers200 / Response fulfilled / body incomplete
- Order/body comparison
- Gate bekliyor
- Evidence verdict
- Outcome yok
- Body outcome ikinci success field’ından ayrıldı
Body read AbortError’ı, ok true olabilecek Response’un varlığını yok etmez. Review body ownership/consumption state’ini ayrıca kaydeder. Absent content JSON document olarak yorumlanmaz; ikinci read için ownership de göz önünde tutulur.
- Loading observations
- Headers200 / Response fulfilled / body incomplete
- Order/body comparison
- Response retained / body read failed separately
- Evidence verdict
- Outcome yok
- Status oracle ayrı positive control’e bağlandı
Normal XML 404 acceptedAsHttpSuccess false verir; count sıfırdır. Positive XML 404 true verir ve count bir olur. Bu oracle API completion’ı HTTP success’a yükselten observation’ı seçer; gerçek browser event log’u değildir.
- Loading observations
- 404 acceptance oracle normal0 / positive1
- Order/body comparison
- Response retained / body read failed separately
- Evidence verdict
- Outcome yok
- Missing content event normal completion olmadı
Alternatif trace’te body consumption sonucu eksikse fulfilled Response complete body kanıtı olmaz. Normal complete-text outcome’u missing event’e kopyalanmaz. Network interruption, abort ve logging gap causes farklı evidence ister.
- Loading observations
- 404 acceptance oracle normal0 / positive1
- Order/body comparison
- Consumption coverage missing / do not infer complete
- Evidence verdict
- Outcome yok
- Server state verdict unknown kaldı
Client abort kaydı server’ın neyi işlediğini tek başına açıklamaz. Bu fixture origin-reached şartını sağlar fakat transaction veya rollback ölçmez. Server outcome UNKNOWN kalabilir; retry bu boşluğu otomatik çözmez.
- Loading observations
- 404 acceptance oracle normal0 / positive1
- Order/body comparison
- Consumption coverage missing / do not infer complete
- Evidence verdict
- UNKNOWN: unobserved server processing/rollback
- Yeni evidence status/body/action scope’unda tutuldu
Review status, content type, consumed body outcome ve gerekiyorsa scoped server result ister. Credential veya full private body gerekmez. HTTP cache choice, Cache API veya proxy policy ile karıştırılmadan ayrıca kaydedilir.
- Loading observations
- 404 acceptance oracle normal0 / positive1
- Order/body comparison
- Consumption coverage missing / do not infer complete
- Evidence verdict
- Needed: response/body outcome plus scoped server result
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Loading defterinde iki sıra tut
Loading kayıtlarının üreticileri parser’ın declaration’ı, loader’ın ready bilgisi ve script’in evaluation sonucudur. API kayıtlarında Fetch/XHR status ile body reader’ın tamamlanması ayrı tutulur. Selector ise yalnız authored status/acceptedAsHttpSuccess satırlarını okur; gerçek Browser log’u veya server commit ölçümü değildir. Artifact’ta declarationOrder A/B, readyOrder B/A ve deferredExecution A/B alanları ayrıdır. Manual exercise’de hangi script attribute’unun execution sırasını koruduğunu söyle; B downloaded adımında executed list’inin hâlâ boş olduğunu kontrol et. Async branch’te seçilen B/A execution mümkündür ama normal sonuçların tamamı değildir.
Parser complete, DOMContentLoaded ve window load event’lerini aynı timestamp kabul etme. Native fixture yalnız selected causal events’in sırasını ölçebilir; artifactual sıra bir latency benchmark değildir. Module graph’ın dependency names’i ayrı olmalıdır. Source loading aynı resource URL için cache path kullanabileceğinden network bytes ile executed source eşitliğini varsayma.
B, A’nın hazırladığı veriye bağımlıysa iki parser-inserted external classic script’i async olarak sıraya koymak dependency’yi korumaz. Bu durumda declaration sırasıyla defer kullan veya module graph’ta bağımlılığı import ile açıkça belirt. Örnekte B önce ready olduğunda bile deferred A/B evaluation sırası korunmalıdır. Bağımsız script için async seçimi başka bir karardır; yalnız dosyaların HTML’deki sırası bunu bağımlı script için güvenli hale getirmez.
API sonucu üç alanda anlat
404 Fetch için promise=fulfilled-response, status404/okfalse ve body consumption outcome’unu ayrı yaz. XHR row’da event=load ile status404 beraber bulunur. Abort-after-headers row’unda Response var ama bodyRead=AbortError’dır. Selector status>=400 olduğu halde acceptedAsHttpSuccess=true olan inconsistent observation’ı seçer; normal0, positive1 ve missing0 sonucunun evidence sınırını açık tut.
Manual inceleme benign fixture’ın GET target’ı üzerinde read-only olsun. Body ikinci kez okunmak istenirse ownership/consumption state’ini düşün; absent content’i JSON document sanma. Cache path için Request.cache ve HTTP response policy’yi beraber kaydet. Console’da görülen “done” metni bu alanların yerine geçmez; uygulamanın ürettiği log bağlamı gerekir.
Fetch consumer önce status/ok kararını, sonra gerekli body okumasını tamamlamalı; ancak bu işlemler başarılıysa UI’ı yeni content ile ilerletmelidir. Bu örnekte fulfilled 404, HTTP success değildir. Headers sonrası abort edilmiş 200 response da okunmuş content sağlamaz; body reader’ın AbortError sonucunu işleyip başarılı yükleme state’ini üretme. Normal text receipt ile bu iki dalın UI sonuçlarını ayrı karşılaştır; request’in client’ta iptal edilmesi server’da hiçbir işlem yapılmadığını kanıtlamaz.
ŞİMDİ VAKAYA UYGULA
Script order, fulfilled Response ve cancellation hangi ayrı kararları gerektirir?
A,B declaration’ında B önce ready olabilir: defer A,B sırasını korur, seçilmiş async branch B,A çalışır. Public missing note 404 ile fulfilled Response verebilir. Headers sonrası abort ise Response’u bırakır fakat body read AbortError olur.
Vakadaki response receipt, parsing, callback ve görünür DOM sonucunu sıraya koy. Eski başlığın kalmasını bu dersteki browser state ayrımlarıyla açıklamayı dene.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Loading order ve API outcome defteri
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"scriptContext": {
"parserInsertedExternalClassic": true,
"cssBlockingAbsentSupplied": true,
"normalSameOriginMimeSupplied": true,
"moduleTopLevelAwaitAbsentSupplied": true
},
"scriptPair": {
"declarationOrder": [
"A",
"B"
],
"readyOrderSupplied": [
"B",
"A"
],
"deferredExecution": [
"A",
"B"
],
"asyncSelectedExecution": [
"B",
"A"
],
"asyncOrderGuaranteed": false,
"deferBeforeDOMContentLoaded": true
},
"module": {
"dependency": "helper.mjs",
"entry": "main.mjs",
"defaultDeferred": true,
"deferAttributeAddsEffect": false,
"graphWithoutTopLevelAwait": true
},
"fetch404": {
"path": "/notes/missing",
"promiseOutcome": "fulfilled-response",
"status": 404,
"ok": false,
"body": "Not found",
"bodyReadOutcome": "complete-text",
"acceptedAsHttpSuccess": false
},
"xhr404": {
"path": "/notes/missing",
"event": "load",
"readyState": 4,
"status": 404,
"body": "Not found",
"acceptedAsHttpSuccess": false
},
"abortAfterHeaders": {
"path": "/notes/slow",
"requestReachedOriginSupplied": true,
"promiseOutcome": "fulfilled-response",
"status": 200,
"bodyCompleteBeforeAbort": false,
"defaultAbortReason": "AbortError",
"bodyReadOutcome": "AbortError",
"serverNeverProcessedProven": false
},
"cacheChoices": [
{
"value": "default",
"selection": "normal HTTP cache eligibility/freshness"
},
{
"value": "no-cache",
"selection": "matching response requires validation"
},
{
"value": "no-store",
"selection": "bypass and do not write browser HTTP cache"
}
],
"selector": {
"language": "XPath",
"xml": "<observations><result status=\"404\" acceptedAsHttpSuccess=\"false\"/></observations>",
"xpath": "count(/observations/result[number(@status)>=400 and @acceptedAsHttpSuccess=\"true\"])",
"expected": 0,
"positiveFixtureXml": "<observations><result status=\"404\" acceptedAsHttpSuccess=\"true\"/></observations>",
"positiveExpected": 1,
"scope": "Only authored protocol-decision observations, not product log field names or a live HTTP capture.",
"missingFieldBehavior": "Missing observation is insufficient evidence; zero matches is not proof of correct runtime behavior."
}
}- readyOrder / execution
- Resource availability ile JavaScript evaluation iki ayrı sıra.
- fetch404 / xhr404
- API completion ile HTTP success ayrı; load/fulfilled 404 mümkündür.
- abortAfterHeaders
- Headers arrival korunur; incomplete body read abort olabilir.
- cacheChoices
- Browser HTTP cache seçimi; Cache API veya bütün proxy policy’si değil.
Selected resource-ready order, parser context ve full/partial response events supplied. Exact latency, general module/TLA graph, CORS/policy refusal veya server rollback ölçülmez.
İki yanlış kanı
defer script’ler declaration sırasıyla download olur; async her zaman ters sıradır.
defer execution sırasını korur, ready order farklı olabilir. async order garantisi yoktur; B/A yalnız selected fixture’dır.
Fetch fulfill/XHR load geldiğinde HTTP başarılıdır; abort server’i rollback eder.
404 normal completion yolunda gelebilir. Abort client operation’ı keser, server’ın işlem yapmadığını veya rollback’i kanıtlamaz.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
B önce ready oldu; A önce tanımlandı. Bu defer script’ler hangi sırada çalışır?
- A, B. Tanımlanma sırası korunur.
- B, A. defer her zaman download bitiş sırasını izler.
Gerekçeli cevabı oku
A, B. Tanımlanma sırası korunur. — Bu context’te defer script’ler sıralı olarak DOMContentLoaded’dan önce çalışır. Ready sırası bunu tersine çevirmez.
200 headers alındıktan sonra abort, body read sonucunu nasıl etkiler?
Dersten seçilen artifact alanları; öğretim örneği
- abortAfterHeaders
- {"path":"/notes/slow","requestReachedOriginSupplied":true,"promiseOutcome":"fulfilled-response","status":200,"bodyCompleteBeforeAbort":false,"defaultAbortReason":"AbortError","bodyReadOutcome":"AbortError","serverNeverProcessedProven":false}
- Abort, server’ın hiç request almadığını kanıtlar.
- Response fulfilled kalabilir; body read AbortError verir.
Gerekçeli cevabı oku
Response fulfilled kalabilir; body read AbortError verir. — Bu örnekte promiseOutcome=fulfilled-response, bodyReadOutcome=AbortError. Origin işlemi daha önce gerçekleşmiş olabilir.
Fetch 404 ve XHR 404 neden network failure ile aynı sonuç değildir? no-cache ve no-store farkını da açıkla.
Gerekçeli cevabı oku
Fetch 404 için fulfilled Response ve ok=false verir. XHR 404 load ve readyState=4 ile tamamlanır. İkisi HTTP başarı sonucu değildir, fakat yalnız 404 nedeniyle network failure da sayılmaz. no-cache matching cached response için validation ister. no-store bu örnekte browser HTTP cache’i bypass eder ve yeni entry yazmaz. Bu seçenekler application cache veya business rollback garantisi değildir.
□ API completion’ı HTTP başarı sonucu saymadım.
□ Validation gerekliliğini cache saklama yasağından ayırdım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- WHATWG HTML — script element4.12.1 The script element · 4.12.1.1 Processing model
- WHATWG — Fetch Standard1 Preface · 4.6 HTTP-network-or-cache fetch · 5.3 Body mixin · 5.6 Fetch methods
- WHATWG — XMLHttpRequest Standard3.5.6 The send() method · 3.5.7 The abort() method · 3.6.2 The status getter
- MDN — script elementasync and defer · Notes
- MDN — Using the Fetch APICanceling a request · Handling the response · Checking response status · Reading the response body
- MDN — Request: cache propertyValue