Reuse Cached Data For Rendering
Reusing Cached Data
Relayλ appμ΄ μ¬μ©λλ λμ λ°μν μ¬λ¬λ²μ 쿼리μ μν΄ λ°μμμ§ λ°μ΄ν°λ€μ μΆμ μν€κ³ μΊμ±ν΄λλ€. κ·Έλ¦¬κ³ μ’ μ’ μ°λ¦¬λ λ€νΈμν¬λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μλ‘ λ°μμ€μ§ μκ³ μ΄λ κ² μΊμ±λ λ°μ΄ν°λ₯Ό μ¬μ©νκΈΈ μν λκ° μλ€.
μλ μν©λ€μ΄ μ΄λ κ² βμΊμ±λ λ°μ΄ν°βλ₯Ό μ΄μ©ν λ§ν μμμ΄λ€.
μ± λ΄μ νλ€ μ¬μ΄λ₯Ό μ΄λν λ, κ·Έλ¦¬κ³ κ·Έ νλ€μ μ΄λν λ λ°μ΄ν°λ₯Ό λ°μμμΌ νλ κ²½μ°μ μ΄λ―Έ ν λ² λ°©λ¬Έν μ μ΄ μλ νμ μΊμ±λ λ°μ΄ν°λ₯Ό μ¬μ©νκΈ° λλ¬Έμ λ€μ λ€νΈμν¬ μμ²μ΄ λ°μνμ§ μμ.
νλ² νΌλμ λ λλ§λ μ μ΄ μλ ν¬μ€νΈμ λ€μ μ κ·Όνλ € νλ κ²½μ°, ν¬μ€νΈμ permalink νμ΄μ§λ μΊμλμ΄μκΈ° λλ¬Έμ μ¦μ λ λλ§ λ¨.
λ§μ½ ν¬μ€νΈμ permalink νμ΄μ§μμ μ§κΈ localμμ κ°κ³ μλ κ²λ³΄λ€ λ λ§μ λ°μ΄ν°λ₯Ό νμλ‘ νλλΌλ, λΉμ₯μ κ°κ³ μλ λ°μ΄ν°λ₯Ό μ¬μ©νκ³ λ λλ§μ blockμν€μ§ μμ.
Fetch Policies
μΊμλ λ°μ΄ν°λ₯Ό μ¬μ¬μ©νλ λ°©λ²μ loadQuery
ν¨μ λ΄λΆμ fetchPolicy
μ΅μ
μ μΆκ°νλ κ²μ΄λ€. (μ΄ loadQuery
ν¨μλ useQueryLoader
ν
μ μν΄ λ°νλ ν¨μλ₯Ό μλ―Έ)
useQueryLoader
ν μ μν΄ λ°νλloadQuery
ν¨μλ₯Ό νΈμΆν λ μ΅μ μΌλ‘fetchPolicy
λ₯Ό μΆκ°νλ€.store-or-network
μ΅μ μ 쀬기 λλ¬Έμ λ¨Όμ μΊμ λ°μ΄ν°λ₯Ό νμΈνκ³ , λ°μ΄ν°κ° μλ κ²½μ°μλ§ μλ‘μ΄ λ°μ΄ν°λ₯Ό fetchνλλ‘ νλ€.fetchPolicy
λ λ€μ λ΄μ©λ€μ κ²°μ νλ€.λ‘컬 μΊμμμ λ°μ΄ν°λ₯Ό μ¬μ©ν μ§
store(μΊμ)μ μλ λ°μ΄ν°μ κ°μ© μ¬λΆμ λ°λΌ μλ²μμ λ°μ΄ν°λ₯Ό fetchν μ§
κΈ°λ³Έμ μΌλ‘, Relayλ λ‘컬 μΊμμ μλ 쿼리λ₯Ό μ½μ΄ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ € νλ€. νμ§λ§ κ·Έ 쿼리μ λν λ°μ΄ν°κ° μκ±°λ μ
λ°μ΄νΈκ° νμν κ²½μ°μλ 쿼리λ₯Ό ν΅ν΄ λ€νΈμν¬ μμ²μ λ³΄λ΄ μ 체 λ°μ΄ν°λ₯Ό λ€μ κ°μ Έμ¨λ€. μμ μλ store-or-network
μ΅μ
μ μ¬μ€ Relayμ κΈ°λ³Έ μ΅μ
μ΄λ€.
μλμ κ°μ λ€λ₯Έ μ΅μ λ€λ μλ€.
store-and-network
: λ‘컬 μΊμμ λ°μ΄ν°λ₯Ό μΌλ¨ μ°μ§λ§, νμ λ€νΈμν¬ μμ²μ λ€μ 보λ. λ°μ΄ν°κ° μλ μλ , μ΅μ μ κ²μ΄λ μλλ μκ΄ μμ.network-only
: λ‘컬 μΊμμ λ°μ΄ν°λ₯Ό μ¬μ©νμ§ μκ³ νμ λ€νΈμν¬ μμ²μ ν΅ν΄ μλ‘ λ°μ λ°μ΄ν°λ₯Ό μ΄μ©.store-only
: μ€μ§ λ‘컬 μΊμμ λ°μ΄ν°λ§ μ¬μ¬μ©ν¨. λ€νΈμν¬ μμ²μ 보λ΄μ§ μμ. μ΄ λλ¬Έμ λ°μ΄ν° μΌκ΄μ±μ λν μ± μμ κ°λ°μμκ² μμ.
Availability of Data
Relayλ λ°μ΄ν°κ° βκ°μ©νμ§βμ λν΄ λκ°μ§ μ²λλ₯Ό ν΅ν΄ νλ¨νλ€.
Presence of Data
Staleness of Data
Presence of Data
Relay storeμ μλ λ°μ΄ν°λ μλͺ μ΄ μλλ°, μ΄ μλͺ μ λ°μ΄ν°κ° κ°μ©νμ§λ₯Ό νλ¨ν μ μλ μ€μν μ²λμ΄λ€. λ³΄ν΅ Relay store μμ μλ λ°μ΄ν°λ 첫 fetch μ΄ν κ³μ μ‘΄μ¬νλ€. λ§μ½ νλ²λ fetchν μ μ΄ μλ λ°μ΄ν°λΌλ©΄ storeμλ μ‘΄μ¬νμ§ μμ κ²μ΄λ€.
κ·ΈμΉλ§ μλ§μ 쿼리λ€μ ν΅ν΄ κ°μ Έμ¨ λ°μ΄ν°λ€μ μ λΆ λ©λͺ¨λ¦¬μ μ μ₯ν΄λ μλ μλ€. μ λΆ μ μ₯ν΄λλ€λ©΄ μ°λ¦¬λ λΆνμνκ² λ°©λνκ³ λ‘μ λ°μ΄ν°λ₯Ό μν΄ λ§μ λ©λͺ¨λ¦¬ 곡κ°μ λλΉνκ² λ κ²μ΄λ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ Relayλ Garbage CollectorλΌκ³ νλ νλ‘μΈμ€λ₯Ό λλ¦°λ€. κ·Έλ¬λ©΄ λ μ΄μ μ°μ§ μλ λ°μ΄ν°λ€μ μμ ν μ μκ² λλ€.
Garbage Collection in Relay
Relayλ νΉν λ‘컬 in-memory storeμμ Garbage Collectionμ μννλ€. μ΄λ€ μ»΄ν¬λνΈμκ²λ μ°Έμ‘°λμ§ μλ λ°μ΄ν°λ€μ μμ νλ€.
κ·ΈμΉλ§ λ°μ΄ν°λ₯Ό μ¬μ¬μ©ν κ°λ₯μ±λ μΌλμ λ¬μΌ νλ€. λ§μ½ λ°μ΄ν°κ° λ무 빨리 μμ λΌμ μ¬μ¬μ©νλ €κ³ λ³΄λ μλ κ²½μ°μ λ€νΈμν¬λ‘λΆν° λ€μ λ°μ΄ν°λ₯Ό λ°μμμΌ νκΈ° λλ¬Έμ λ°λ‘ μ¬μ¬μ©ν μ μκ² λλ€. κ·Έλμ μ¬μ¬μ©μ΄ μΌμ΄λ λ°μ΄ν°λ€μ νμ€νκ² βμ¬μ¬μ© ν κ±°λ€βλΌκ³ λ§ν΄μ£Όλ μμ μ΄ νμνλ€.
Query Retention
쿼리λ₯Ό μ μ§νλ€λ κ²μ Relayμκ² μΏΌλ¦¬μ 쿼리μ κ΄λ ¨λ λ°μ΄ν°λ₯Ό μ§μ°μ§ λ§μλ¬λΌκ³ μκΈ°νλκ²κ³Ό κ°λ€. νλ μ΄μμ callerκ° μλ€λ©΄ 쿼리λ storeμμ μ§μμ§μ§ μκ² λλ€.
κΈ°λ³Έμ μΌλ‘, 쿼리 μ»΄ν¬λνΈλ useQueryLoader
λ usePreloadQuery
, νΉμ λ€λ₯Έ APIλ₯Ό μ¬μ©νλ€. 쿼리 μ»΄ν¬λνΈλ mount λ μ΄ν 쿼리λ₯Ό μ μ§νκ³ , unmount λ μ΄ν 쿼리λ₯Ό λμμ€λ€. μ¦ unmount μ΄νμλ μΈμ λΌλ storeμμ 쿼리μ 쿼리 κ΄λ ¨ λ°μ΄ν°λ€μ΄ μμ λ μ μλ€.
λ§μ½ μ»΄ν¬λνΈ μλͺ
μ£ΌκΈ°μ κ΄κ³ μμ΄ μΏΌλ¦¬λ₯Ό μ μ§νκ³ μΆλ€λ©΄, retain
λ©μλλ₯Ό μ΄μ©νλ©΄ λλ€.
retain
λ©μλλ₯Ό ν΅ν΄ 쿼리 μ»΄ν¬λνΈμ μλͺ μ£ΌκΈ°μλ μκ΄ μμ΄ μΏΌλ¦¬λ₯Ό μ μ§ν μ μλ€. κ·Έλ¬λ©΄ μ΄νμ λ€λ₯Έ μ»΄ν¬λνΈκ° μ¬μ¬μ©νκ±°λ, μ§κΈμ μμ§λ§ λμ€μ μκΈΈ κ°μ μ»΄ν¬λνΈμ λ€λ₯Έ μΈμ€ν΄μ€κ° μ¬μ¬μ©ν μλ μλ€.dispose
λ©μλλ retain λ©μλμ λ°λλ‘ μλνλ€. μΈμ λ μ§ garbage collectionκ° μΏΌλ¦¬λ₯Ό μμ¨ μ μλ€.
Controlling Relayβs Garbage Collection Policy
νμ¬ Garbage Collectionμ 컨νΈλ‘€ ν μ μλ μ΅μ μ΄ λκ°μ§ μ λ μλ€.
GC Scheduler
gcScheduler
λΌλ ν¨μλ₯Ό Relay Storeμ λΆμ¬μ Garbage Collectionμ μ€μΌμ€λ§ ν μ μλ€.μλλ μ Storeλ₯Ό μμ±ν λ
gcScheduler
λ₯Ό κ°μ΄ μ£Όμ§ μλλ€. κ·Έλμ RelayλresolveImmediate()
ν¨μλ₯Ό ν΅ν΄ garbage collectionμ μν.resolveImmediateλ μ°Έμ‘°κ° λμ΄μ‘μ λ λ°λ‘ garbage collectionμ΄ μνλλλ‘ νλ μ μ± .
κ·Έλμ μΌλ¨ μ μ½λλ μ¬μ€μ
gcScheduler
μ΅μ μ μ£Όμ§ μμκ²κ³Ό κ°μ.
scheduler functionμ ν΅ν΄ garbage collectionμ΄ κΈ°λ³Έ μ΅μ λ³΄λ€ λ 곡격μ μΌλ‘ μνλλλ‘ μμ±ν μλ μμ. μκ°μ΄λ scheduler μμ±μ΄λ κ·Έ μΈμ λ€λ₯Έ ν΄λ¦¬μ€ν±λ€μ μ΄μ©νλ©΄ λ¨.
ν¨μμ ꡬνλΆμμ
run
μ½λ°±μ μ¦μ μ€ννλ©΄ μλ¨.
Garbage Collector Buffer Size
Relay Storeλ λ΄λΆμ μΌλ‘ release bufferλ₯Ό κ°κ³ μλ€. 쿼리 μ μ§λμ μκ΄ μμ΄ λͺ κ°μ 쿼리λ₯Ό μμλ‘ μ μ₯νλ€. (λͺ κ°μ 쿼리λ₯Ό μ μ₯ν μ§λ μ‘°μ μ΄ κ°λ₯) 쿼리λ₯Ό μλ μμ νλ 쿼리 μ»΄ν¬λνΈκ° unmount λλ λ±μ μ΄μ λ‘ μΏΌλ¦¬κ° μμ΄μ§λλΌλ μΌλ¨μ release bufferμ λ¨λλ€. μ΄λ κ² νλ©΄ μ΄μ νμ΄μ§λ‘ λμκ°κ±°λ μ΄μ νμΌλ‘ λμκ° λ λ°μ΄ν°λ₯Ό μ¬μ¬μ©ν μ μλ€.
Relay Storeμ gcReleaseBufferSize
μ΅μ
μ μ£Όλ©΄ release bufferμ μ¬μ΄μ¦λ₯Ό μ‘°μ ν μ μλ€.
μ μ½λλ ReleaseBufferμ ν¬κΈ°λ₯Ό 10μΌλ‘ νκ² λ€λ λ». κΈ°λ³Έκ°μ΄ 10μ΄κΈ° λλ¬Έμ μ¬κΈ°μλ μ¬μ€μ λ²νΌ ν¬κΈ°λ₯Ό λ°κΎΈμ§ μμμ.
λ²νΌ ν¬κΈ°λ₯Ό 0μΌλ‘ νλ©΄ release bufferλ₯Ό μμ°κ² λ€λ λ»κ³Ό κ°μ. 쿼리λ€μ μ¦μ release λκ³ μ¬μ¬μ©λ μ μμ κ².
Staleness of Data
κΈ°λ³Έμ μΌλ‘, Relayλ storeμ μλ λ°μ΄ν°κ° λ‘μμ κ²μ΄λΌλ κ°μ μ νμ§ μλλ€. λ°μ΄ν° 무ν¨ν APIλ₯Ό ν΅ν΄ λͺ μμ μΌλ‘ λ§νΉν΄μ£Όκ±°λ 쿼리 μΊμ λ§λ£ μκ°λ³΄λ€ μ€λ μ§λ κ²½μ°κ° μλλΌλ©΄ Relayλ λ°μ΄ν°λ₯Ό λ‘μλ€κ³ μκ°νμ§ μμ κ²μ΄λ€.
λ°μ΄ν°κ° λ‘μλ€λκ±Έ νμ€ν μ λλ λ§νΉμ ν΄μ£Όλκ² μ’λ€. λ μ΄μμ mutationμ΄ μΌμ΄λμ§ μμμ 보μ₯ν μ μμ λκ° κ·Έλ λ€.
Relayλ μλμ κ°μ APIλ€μ μ 곡νκ³ μ΄κ±Έ μ΄μ©ν΄ storeμ μλ λ°μ΄ν°κ° λ‘μμμ νμν μ μλ€.
Globally Invalidating the Relay Store
μ‘°κΈ κ³Όκ²©ν λ°©λ²μ storeμ μλ λͺ¨λ 쿼리 μΊμλ₯Ό 무ν¨ννλ κ²μ΄λ€. μ΄λ κ² μ λΆλ₯Ό 무ν¨ννλ©΄ Relayλ νμ¬ μΊμ±λ λ°μ΄ν°λ€μ μ λΆ λ‘μλ€κ³ μΈμνκ² λλ€.
μ΄λ κ² invalidateStore()
λ©μλλ₯Ό ν΅ν΄ μ 체 storeμ λ°μ΄ν°λ₯Ό 무ν¨ν ν μ μλ€.
무ν¨νλ λ°μ΄ν°λ€μ λ€μμ μ κ·Όν΄ νκ°νλ € ν λ λ€νΈμν¬λ‘λΆν° refetch.
updater ν¨μλ mutation, subscription, νΉμ λ‘컬 storeλ₯Ό μ λ°μ΄νΈνλ λ‘μ§μ μΌλΆλ‘ μ¬μ©ν μ μμ.
Invalidating Specific Data In The Store
μ‘°κΈ λ ꡬ체μ μΌλ‘, μ΄λ€ λ°μ΄ν°λ₯Ό 무ν¨ν νκ±°λ νΉμ storeμ μλ μ΄λ€ νΉμ ν λ μ½λλ§ λ¬΄ν¨ν νλ κ²λ κ°λ₯νλ€. λ°λ‘ μμ global invalidatingμ²λΌ store μ λΆλ₯Ό 무ν¨ννμ§ μκ³ μ§μ λ 쿼리λ€λ§ 무ν¨νλλ€.
invalidateRecord()
λ©μλλ₯Ό μ¬μ©. invalidateStoreκ³Όλ λ€λ₯΄κ² storeμ μΌλΆ λ°μ΄ν°(user
)λ§ λ¬΄ν¨ν. μ΄λ κ² λλ©΄user
λ μ½λλ λ‘μλ€κ³ λ§νΉλμ΄ λ€μμ μ κ·Όν΄ νκ°νλ € ν λλ λ€νΈμν¬λ‘λΆν° refetch λ κ².λ§μ°¬κ°μ§λ‘ updater ν¨μλ mutation, subscription, νΉμ λ‘컬 storeλ₯Ό μ λ°μ΄νΈνλ λ‘μ§μ μΌλΆλ‘ μ¬μ©ν μ μμ.
Subscribing to Data Invalidation
μμμ βλ§νΉνλ€βλ ννμ μ¬μ©νλλ°, λ§νΉμ νλ©΄ λ€μ νκ° μμ μ refetch νκ³ μ΄λ κ² λ€μ κ°μ Έμμ§ λ°μ΄ν°λ₯Ό μ¬μ©νλ€λ νΉμ§μ΄ μλ€. μλ₯Ό λ€μ΄ νμ΄μ§ λ€λ‘κ°κΈ°λ₯Ό νλ€λ©΄ λ‘μ 쿼리λ₯Ό λ λλ§νλ € ν κ²μ΄κ³ , Relayλ λ‘μ 쿼리λ₯Ό μ¬μ©νμ§ μκ³ λ€νΈμν¬λ‘λΆν° refetchν΄μ κ°μ Έμ¨ λ°μ΄ν°λ₯Ό μ¬μ©ν κ²μ΄λ€.
μ΄λ° λ§νΉμ λλΆλΆμ κ²½μ° μ μ©νμ§λ§, κ°λμ 무ν¨ν μ¬λΆλμ μκ΄μμ΄ μ¦μ refetchν΄μΌ ν λκ° μλ€.
λ§μ½ μ§κΈ μλ νμ΄μ§μ μΏΌλ¦¬κ° λ‘μ 쿼리λΌλ©΄, μΌλΆ λ°μ΄ν°λ μ λ°μ΄νΈκ° νμ. κ·Έλ₯ λ§νΉνλκ² λ§μΌλ‘λ μ¦μ μλ‘μ΄ λ°μ΄ν°λ₯Ό κ°μ Έμ€μ§λ μμκ±°κ³ λ‘μ λ°μ΄ν°λ₯Ό μλ‘μ΄ λ°μ΄ν°λ₯Ό 보μ¬μ€ μ μμ.
μ΄μ νμ΄μ§λ‘ μ΄λνκΈ΄ ν΄λ μ΄μ νμ΄μ§κ° unmountλμ§ μμλ€λ©΄ μ΄μ νμ΄μ§μ λ·°κ° λ€μ νκ°λμ§λ μμ κ²μ΄κ³ , λ°λΌμ λ‘μ λ°μ΄ν°λΌλ κ·Έλλ‘ μ¬μ©νκ² λ κ²μ΄λ€.
μ΄λ° μν©λ€μ΄ μκΈ° λλ¬Έμ Relayλ useSubscribeToInvalidationState
λΌλ ν
μ μ 곡νλ€.
μ¬κΈ°μ
useSubscribeInvalidationState
ν μ μΈμλ‘ idλ€μ΄ λ΄κΈ΄ λ°°μ΄μ λ°κ³ , μ½λ°±λ νλ λ°λλ€. μ λ°°μ΄μ λ΄κΈ΄ idλ€ μ€ νλλΌλ λ‘μ λ°μ΄ν°λΌκ³ λ§νΉλλ€λ©΄ μ½λ°±μ΄ νΈμΆλλ€.μ½λ°± μμμλ refetch νκ±°λ λ‘μ λ°μ΄ν°μ μμ‘΄νλ νμ¬μ λ·°λ₯Ό μ λ°μ΄νΈν μ μλ€. μλ₯Ό λ€λ©΄ top-levelμ μλ
usePreloadedQuery
λ₯Ό νΈμΆν΄ λ°μ΄ν°λ₯Ό μ΅μ μνλ‘ μ μ§ν μ μλ€.usePreloadedQuery
λ λ‘μ 쿼리λ₯Ό ν¬ν¨νκ³ μκΈ° λλ¬Έμ λΉμ°ν refetchλκ³ store μΊμλ μ λ°μ΄νΈ λ κ²μ΄λ€.
Query Cache Expiration Time
μΊμ±λ λ°μ΄ν°λ₯Ό κ°μ§κ³ μ΄λ€ operationμ μννλλ°λ β쿼리 μΊμ λ§λ£ μκ°βλ μν₯μ μ€λ€.
쿼리 μΊμ λ§λ£ μκ° μ΄νλ‘ μλ‘κ² fetchλμ§ μμ 쿼리μ΄κ±°λ
μΏΌλ¦¬κ° ν¬ν¨νλ λ μ½λλ€ μ€ μ μ΄λ νλκ° λ¬΄ν¨νλ λ μ½λμΌ κ²½μ°
κ·Έλ¦¬κ³ storeμ μλ λ μ½λλ€λ‘λ§ μΏΌλ¦¬λ₯Ό μνν μ μμ λ μ΄λ₯Ό μ€λλ 쿼리λΌκ³ νλ€.
μΏΌλ¦¬κ° λ‘μλμ§λ μλ‘μ΄ requestκ° λ§λ€μ΄μ‘μ λ νλ¨νλ€. loadQuery
λ₯Ό νΈμΆν λκ° κ·Έλ μ£ . μ€λλ λ°μ΄ν°λΌλ μ΄λ₯Ό μ°Έμ‘°νλ μ»΄ν¬λνΈμ μν΄ κ³μ λ λλ§λ μ μλ€. νμ§λ§ μ€λλ λ°μ΄ν°λ₯Ό μ΄μ©ν΄ λ§λ€μ΄μ§ μΆκ° μμ²μ λ€νΈμν¬λ₯Ό ν΅ν΄ μλ‘μ΄ λ°μ΄ν°λ₯Ό λ°μμ¨λ€.
쿼리 μΊμ λ§λ£μκ° μμ λ§μ°¬κ°μ§λ‘ Storeλ₯Ό μμ±ν λ μ΅μ μΌλ‘ μ€ μ μλ€.
쿼리 μΊμ λ§λ£μκ° μ΅μ μ λ°λ‘ μ£Όμ§ μμΌλ©΄ λ‘μ 쿼리μΈμ§ κ²μ¬νλ μμ μ μ°Έμ‘°λ λ μ½λκ° λ¬΄ν¨νλμλμ§ μ¬λΆλ§ 체ν¬νλ€. λ§λ£μκ°μ΄ λ°λ‘ μ§μ λμ§ μλλ€λ λ»μ΄λ€.
Last updated