MĂ©lyrehatĂł elemzĂ©s a React experimental_useSubscription horogjárĂłl, feltárva a feliratkozás feldolgozásának többletterhĂ©t, teljesĂtmĂ©nybeli következmĂ©nyeit Ă©s optimalizálási stratĂ©giáit a hatĂ©kony adatlekĂ©rĂ©shez Ă©s renderelĂ©shez.
React experimental_useSubscription: A teljesĂtmĂ©nyre gyakorolt hatás megĂ©rtĂ©se Ă©s csökkentĂ©se
A React experimental_useSubscription horga egy erĹ‘teljes Ă©s deklaratĂv mĂłdszert kĂnál kĂĽlsĹ‘ adatforrásokra valĂł feliratkozásra a komponenseken belĂĽl. Ez jelentĹ‘sen leegyszerűsĂtheti az adatlekĂ©rĂ©st Ă©s -kezelĂ©st, kĂĽlönösen valĂłs idejű adatok vagy összetett állapotok esetĂ©n. Azonban, mint minden erĹ‘teljes eszköznek, ennek is lehetnek teljesĂtmĂ©nybeli következmĂ©nyei. Ezen következmĂ©nyek megĂ©rtĂ©se Ă©s a megfelelĹ‘ optimalizálási technikák alkalmazása kulcsfontosságĂş a nagy teljesĂtmĂ©nyű React alkalmazások Ă©pĂtĂ©sĂ©hez.
Mi az experimental_useSubscription?
Az experimental_useSubscription, amely jelenleg a React kĂsĂ©rleti API-jainak rĂ©sze, egy mechanizmust biztosĂt a komponensek számára, hogy feliratkozzanak kĂĽlsĹ‘ adattárakra (mint pĂ©ldául a Redux store-ok, a Zustand vagy egyĂ©ni adatforrások), Ă©s automatikusan ĂşjrarenderelĹ‘djenek, amikor az adatok megváltoznak. Ez szĂĽksĂ©gtelennĂ© teszi a manuális feliratkozáskezelĂ©st, Ă©s egy tisztább, deklaratĂvabb megközelĂtĂ©st biztosĂt az adatszinkronizáciĂłhoz. Gondoljon rá Ăşgy, mint egy dedikált eszközre, amely zökkenĹ‘mentesen köti össze a komponenseit a folyamatosan frissĂĽlĹ‘ informáciĂłkkal.
A horog két fő argumentumot fogad el:
dataSource: Egy objektum, amely rendelkezik egysubscribe(hasonlĂłan ahhoz, amit az observable könyvtárakban találunk) Ă©s egygetSnapshotmetĂłdussal. AsubscribemetĂłdus egy visszahĂvást fogad el, amely akkor hĂvĂłdik meg, amikor az adatforrás megváltozik. AgetSnapshotmetĂłdus visszaadja az adatok aktuális Ă©rtĂ©kĂ©t.getSnapshot(opcionális): Egy fĂĽggvĂ©ny, amely kinyeri a komponens számára szĂĽksĂ©ges specifikus adatokat az adatforrásbĂłl. Ez kulcsfontosságĂş a felesleges ĂşjrarenderelĂ©sek megelĹ‘zĂ©sĂ©ben, amikor az általános adatforrás megváltozik, de a komponens által igĂ©nyelt specifikus adatok ugyanazok maradnak.
Itt egy egyszerűsĂtett pĂ©lda, amely bemutatja a használatát egy hipotetikus adatforrással:
import { experimental_useSubscription as useSubscription } from 'react';
const myDataSource = {
subscribe(callback) {
// Logic to subscribe to data changes (e.g., using WebSockets, RxJS, etc.)
// Example: setInterval(() => callback(), 1000); // Simulate changes every second
},
getSnapshot() {
// Logic to retrieve the current data from the source
return myData;
}
};
function MyComponent() {
const data = useSubscription(myDataSource);
return (
<div>
<p>Data: {data}</p>
</div>
);
}
A feliratkozás feldolgozásának többletterhe: A központi probléma
Az experimental_useSubscription horoggal kapcsolatos elsĹ‘dleges teljesĂtmĂ©nyaggodalom a feliratkozás feldolgozásával járĂł többletterhelĂ©sbĹ‘l fakad. Minden alkalommal, amikor az adatforrás megváltozik, a subscribe metĂłduson keresztĂĽl regisztrált visszahĂvás meghĂvĂłdik. Ez a horogot használĂł komponens ĂşjrarenderelĂ©sĂ©t váltja ki, ami potenciálisan befolyásolhatja az alkalmazás reszponzivitását Ă©s általános teljesĂtmĂ©nyĂ©t. Ez a többletterhelĂ©s több mĂłdon is megnyilvánulhat:
- Megnövekedett renderelĂ©si gyakoriság: A feliratkozások termĂ©szetĂĽknĂ©l fogva gyakori ĂşjrarenderelĂ©sekhez vezethetnek, kĂĽlönösen, ha az alapul szolgálĂł adatforrás gyorsan frissĂĽl. Gondoljunk egy tĹ‘zsdei árfolyamokat megjelenĂtĹ‘ komponensre – az állandĂł árváltozások szinte folyamatos ĂşjrarenderelĂ©seket jelentenĂ©nek.
- Felesleges ĂşjrarenderelĂ©sek: MĂ©g ha egy adott komponens számára releváns adatok nem is változtak, egy egyszerű feliratkozás akkor is ĂşjrarenderelĂ©st válthat ki, ami pazarlĂł számĂtási műveletekhez vezet.
- Kötegelt frissĂtĂ©sek bonyolultsága: Bár a React megprĂłbálja kötegelni a frissĂtĂ©seket az ĂşjrarenderelĂ©sek minimalizálása Ă©rdekĂ©ben, a feliratkozások aszinkron termĂ©szete nĂ©ha zavarhatja ezt az optimalizálást, ami a vártnál több egyedi ĂşjrarenderelĂ©shez vezet.
TeljesĂtmĂ©ny szűk keresztmetszetek azonosĂtása
MielĹ‘tt belemerĂĽlnĂ©nk az optimalizálási stratĂ©giákba, elengedhetetlen az experimental_useSubscription horoggal kapcsolatos potenciális teljesĂtmĂ©ny szűk keresztmetszetek azonosĂtása. ĂŤme egy ĂştmutatĂł, hogyan közelĂtheti meg ezt:
1. React Profiler
A React Profiler, amely a React DevToolsban Ă©rhetĹ‘ el, az elsĹ‘dleges eszköze a teljesĂtmĂ©ny szűk keresztmetszetek azonosĂtására. Használja a következĹ‘kre:
- Komponens interakciĂłk rögzĂtĂ©se: Profilozza az alkalmazást, miközben aktĂvan használja az
experimental_useSubscriptionhoroggal ellátott komponenseket. - RenderelĂ©si idĹ‘k elemzĂ©se: AzonosĂtsa azokat a komponenseket, amelyek gyakran renderelĹ‘dnek, vagy amelyek renderelĂ©se hosszĂş idĹ‘t vesz igĂ©nybe.
- Az ĂşjrarenderelĂ©sek forrásának azonosĂtása: A Profiler gyakran kĂ©pes pontosan meghatározni, hogy mely adatforrás-frissĂtĂ©sek váltanak ki felesleges ĂşjrarenderelĂ©seket.
FordĂtson kĂĽlönös figyelmet azokra a komponensekre, amelyek az adatforrás változásai miatt gyakran ĂşjrarenderelĹ‘dnek. Vizsgálja meg alaposabban, hogy az ĂşjrarenderelĂ©sek valĂłban szĂĽksĂ©gesek-e (azaz, hogy a komponens propjai vagy állapota jelentĹ‘sen megváltozott-e).
2. TeljesĂtmĂ©nyfigyelĹ‘ eszközök
Éles környezetben fontolja meg teljesĂtmĂ©nyfigyelĹ‘ eszközök (pl. Sentry, New Relic, Datadog) használatát. Ezek az eszközök betekintĂ©st nyĂşjthatnak a következĹ‘kbe:
- ValĂłs teljesĂtmĂ©nymutatĂłk: Kövesse nyomon a metrikákat, mint pĂ©ldául a komponens renderelĂ©si idĹ‘k, az interakciĂłs kĂ©sleltetĂ©s Ă©s az alkalmazás általános reszponzivitása.
- LassĂş komponensek azonosĂtása: Határozza meg azokat a komponenseket, amelyek valĂłs helyzetekben következetesen rosszul teljesĂtenek.
- FelhasználĂłi Ă©lmĂ©nyre gyakorolt hatás: Értse meg, hogyan befolyásolják a teljesĂtmĂ©nyproblĂ©mák a felhasználĂłi Ă©lmĂ©nyt, pĂ©ldául a lassĂş betöltĂ©si idĹ‘k vagy a nem reagálĂł interakciĂłk.
3. Kódellenőrzés és statikus elemzés
A kĂłdellenĹ‘rzĂ©sek során fordĂtson kĂĽlönös figyelmet arra, hogyan használják az experimental_useSubscription horgot:
- Feliratkozás hatókörének felmérése: A komponensek túl tág adatforrásokra iratkoznak fel, ami felesleges újrarenderelésekhez vezet?
- Review
getSnapshotimplementáciĂłk áttekintĂ©se: AgetSnapshotfĂĽggvĂ©ny hatĂ©konyan nyeri ki a szĂĽksĂ©ges adatokat? - Potenciális versenyhelyzetek keresĂ©se: GyĹ‘zĹ‘djön meg arrĂłl, hogy az aszinkron adatforrás-frissĂtĂ©sek helyesen vannak kezelve, kĂĽlönösen a párhuzamos renderelĂ©s esetĂ©n.
A statikus elemzĹ‘ eszközök (pl. ESLint megfelelĹ‘ bĹ‘vĂtmĂ©nyekkel) szintĂ©n segĂthetnek azonosĂtani a potenciális teljesĂtmĂ©nyproblĂ©mákat a kĂłdban, mint pĂ©ldául a hiányzĂł fĂĽggĹ‘sĂ©gek a useCallback vagy useMemo horgokban.
Optimalizálási stratĂ©giák: A teljesĂtmĂ©nyre gyakorolt hatás minimalizálása
Miután azonosĂtotta a potenciális teljesĂtmĂ©ny szűk keresztmetszeteket, több optimalizálási stratĂ©giát is alkalmazhat az experimental_useSubscription hatásának minimalizálására.
1. SzelektĂv adatlekĂ©rĂ©s a getSnapshot segĂtsĂ©gĂ©vel
A legfontosabb optimalizálási technika a getSnapshot függvény használata, hogy csak a komponens által igényelt specifikus adatokat nyerje ki. Ez létfontosságú a felesleges újrarenderelések megelőzésében. Ahelyett, hogy a teljes adatforrásra iratkozna fel, csak az adatok releváns részhalmazára iratkozzon fel.
Példa:
TegyĂĽk fel, hogy van egy adatforrása, amely a felhasználĂłi informáciĂłkat tartalmazza, beleĂ©rtve a nevet, e-mail cĂmet Ă©s profilkĂ©pet. Ha egy komponensnek csak a felhasználĂł nevĂ©t kell megjelenĂtenie, a getSnapshot fĂĽggvĂ©nynek csak a nevet kell kinyernie:
const userDataSource = {
subscribe(callback) { /* ... */ },
getSnapshot() {
return {
name: "Alice Smith",
email: "alice.smith@example.com",
profilePicture: "/images/alice.jpg"
};
}
};
function NameComponent() {
const name = useSubscription(userDataSource, () => userDataSource.getSnapshot().name);
return <p>User Name: {name}</p>;
}
Ebben a példában a NameComponent csak akkor fog újrarenderelődni, ha a felhasználó neve megváltozik, még akkor is, ha a userDataSource objektum egyéb tulajdonságai frissülnek.
2. MemoizáciĂł a useMemo Ă©s useCallback segĂtsĂ©gĂ©vel
A memoizáciĂł egy hatĂ©kony technika a React komponensek optimalizálására a drága számĂtások vagy fĂĽggvĂ©nyek eredmĂ©nyeinek gyorsĂtĂłtárazásával. Használja a useMemo-t a getSnapshot fĂĽggvĂ©ny eredmĂ©nyĂ©nek memoizálására, Ă©s a useCallback-et a subscribe metĂłdusnak átadott visszahĂvás memoizálására.
Példa:
import { experimental_useSubscription as useSubscription } from 'react';
import { useCallback, useMemo } from 'react';
const myDataSource = {
subscribe(callback) { /* ... */ },
getSnapshot() {
// Expensive data processing logic
return processData(myData);
}
};
function MyComponent({ prop1, prop2 }) {
const getSnapshot = useCallback(() => {
return myDataSource.getSnapshot();
}, []);
const data = useSubscription(myDataSource, getSnapshot);
const memoizedValue = useMemo(() => {
// Expensive calculation based on data
return calculateValue(data, prop1, prop2);
}, [data, prop1, prop2]);
return <div>{memoizedValue}</div>;
}
A getSnapshot fĂĽggvĂ©ny Ă©s a számĂtott Ă©rtĂ©k memoizálásával megelĹ‘zheti a felesleges ĂşjrarenderelĂ©seket Ă©s a drága számĂtásokat, amikor a fĂĽggĹ‘sĂ©gek nem változtak. GyĹ‘zĹ‘djön meg rĂłla, hogy a releváns fĂĽggĹ‘sĂ©geket beleteszi a useCallback Ă©s useMemo fĂĽggĹ‘sĂ©gi tömbjeibe, hogy a memoizált Ă©rtĂ©kek szĂĽksĂ©g esetĂ©n helyesen frissĂĽljenek.
3. Debouncing és Throttling
Amikor gyorsan frissĂĽlĹ‘ adatforrásokkal dolgozik (pl. szenzoradatok, valĂłs idejű feedek), a debouncing Ă©s a throttling segĂthet csökkenteni az ĂşjrarenderelĂ©sek gyakoriságát.
- Debouncing: KĂ©slelteti a visszahĂvás meghĂvását, amĂg egy bizonyos idĹ‘ el nem telik az utolsĂł frissĂtĂ©s Ăłta. Ez akkor hasznos, ha csak a legutĂłbbi Ă©rtĂ©kre van szĂĽksĂ©ge egy inaktivitási periĂłdus után.
- Throttling: Korlátozza, hogy a visszahĂvás hányszor hĂvhatĂł meg egy adott idĹ‘tartamon belĂĽl. Ez akkor hasznos, ha a felhasználĂłi felĂĽletet idĹ‘szakosan kell frissĂteni, de nem feltĂ©tlenĂĽl minden egyes frissĂtĂ©snĂ©l az adatforrásbĂłl.
A debouncingot és a throttlingot implementálhatja olyan könyvtárakkal, mint a Lodash, vagy egyéni implementációkkal a setTimeout használatával.
Példa (Throttling):
import { experimental_useSubscription as useSubscription } from 'react';
import { useRef, useCallback } from 'react';
function MyComponent() {
const lastUpdate = useRef(0);
const throttledGetSnapshot = useCallback(() => {
const now = Date.now();
if (now - lastUpdate.current > 100) { // Update at most every 100ms
lastUpdate.current = now;
return myDataSource.getSnapshot();
}
return null; // Or a default value
}, []);
const data = useSubscription(myDataSource, throttledGetSnapshot);
return <div>{data}</div>;
}
Ez a pĂ©lda biztosĂtja, hogy a getSnapshot fĂĽggvĂ©ny legfeljebb 100 ezredmásodpercenkĂ©nt hĂvĂłdjon meg, megelĹ‘zve a tĂşlzott ĂşjrarenderelĂ©seket, amikor az adatforrás gyorsan frissĂĽl.
4. A React.memo kihasználása
A React.memo egy magasabb rendű komponens, amely memoizál egy funkcionális komponenst. Ha egy experimental_useSubscription-t használó komponenst becsomagol a React.memo-val, megelőzheti az újrarendereléseket, ha a komponens propjai nem változtak.
Példa:
import React, { experimental_useSubscription as useSubscription, memo } from 'react';
function MyComponent({ prop1, prop2 }) {
const data = useSubscription(myDataSource);
return <div>{data}, {prop1}, {prop2}</div>;
}
export default memo(MyComponent, (prevProps, nextProps) => {
// Custom comparison logic (optional)
return prevProps.prop1 === nextProps.prop1 && prevProps.prop2 === nextProps.prop2;
});
Ebben a pĂ©ldában a MyComponent csak akkor fog ĂşjrarenderelĹ‘dni, ha a prop1 vagy a prop2 megváltozik, mĂ©g akkor is, ha a useSubscription-bĂłl származĂł adatok frissĂĽlnek. Megadhat egy egyĂ©ni összehasonlĂtĂł fĂĽggvĂ©nyt a React.memo-nak a finomabb szabályozás Ă©rdekĂ©ben, hogy mikor kell a komponensnek ĂşjrarenderelĹ‘dnie.
5. Immutabilitás és strukturális megosztás
Ă–sszetett adatstruktĂşrákkal valĂł munka során az immutábilis adatstruktĂşrák használata jelentĹ‘sen javĂthatja a teljesĂtmĂ©nyt. Az immutábilis adatstruktĂşrák biztosĂtják, hogy minden mĂłdosĂtás Ăşj objektumot hozzon lĂ©tre, ami megkönnyĂti a változások Ă©szlelĂ©sĂ©t Ă©s az ĂşjrarenderelĂ©sek kiváltását csak akkor, amikor szĂĽksĂ©ges. Az olyan könyvtárak, mint az Immutable.js vagy az Immer, segĂthetnek az immutábilis adatstruktĂşrákkal valĂł munkában a Reactben.
A strukturális megosztás, egy kapcsolódó koncepció, magában foglalja az adatstruktúra azon részeinek újrafelhasználását, amelyek nem változtak. Ez tovább csökkentheti az új immutábilis objektumok létrehozásának többletterhét.
6. Kötegelt frissĂtĂ©sek Ă©s ĂĽtemezĂ©s
A React kötegelt frissĂtĂ©si mechanizmusa automatikusan csoportosĂtja a több állapotfrissĂtĂ©st egyetlen ĂşjrarenderelĂ©si ciklusba. Azonban az aszinkron frissĂtĂ©sek (mint amilyeneket a feliratkozások váltanak ki) nĂ©ha megkerĂĽlhetik ezt a mechanizmust. BiztosĂtsa, hogy az adatforrás-frissĂtĂ©sek megfelelĹ‘en legyenek ĂĽtemezve olyan technikák segĂtsĂ©gĂ©vel, mint a requestAnimationFrame vagy a setTimeout, hogy a React hatĂ©konyan tudja kötegelni a frissĂtĂ©seket.
Példa:
const myDataSource = {
subscribe(callback) {
setInterval(() => {
requestAnimationFrame(() => {
callback(); // Schedule the update for the next animation frame
});
}, 100);
},
getSnapshot() { /* ... */ }
};
7. Virtualizáció nagy adathalmazokhoz
Ha nagy adathalmazokat jelenĂt meg, amelyeket feliratkozásokon keresztĂĽl frissĂtenek (pl. egy hosszĂş elemlista), fontolja meg virtualizáciĂłs technikák (pl. react-window vagy react-virtualized könyvtárak) használatát. A virtualizáciĂł csak az adathalmaz láthatĂł rĂ©szĂ©t rendereli, jelentĹ‘sen csökkentve a renderelĂ©si többletterhet. Ahogy a felhasználĂł görget, a láthatĂł rĂ©sz dinamikusan frissĂĽl.
8. Az adatforrás-frissĂtĂ©sek minimalizálása
Talán a legközvetlenebb optimalizálás a frissĂtĂ©sek gyakoriságának Ă©s hatĂłkörĂ©nek minimalizálása magábĂłl az adatforrásbĂłl. Ez magában foglalhatja:
- FrissĂtĂ©si gyakoriság csökkentĂ©se: Ha lehetsĂ©ges, csökkentse azt a gyakoriságot, amellyel az adatforrás frissĂtĂ©seket kĂĽld.
- Adatforrás logikájának optimalizálása: GyĹ‘zĹ‘djön meg rĂłla, hogy az adatforrás csak akkor frissĂĽl, amikor szĂĽksĂ©ges, Ă©s hogy a frissĂtĂ©sek a lehetĹ‘ leghatĂ©konyabbak.
- FrissĂtĂ©sek szűrĂ©se a szerver oldalon: Csak azokat a frissĂtĂ©seket kĂĽldje el a kliensnek, amelyek relevánsak az aktuális felhasználĂł vagy alkalmazásállapot szempontjábĂłl.
9. Szelektorok használata Reduxszal vagy más állapotkezelő könyvtárakkal
Ha az experimental_useSubscription-t a Reduxszal (vagy más állapotkezelő könyvtárakkal) együtt használja, győződjön meg róla, hogy hatékonyan használja a szelektorokat. A szelektorok tiszta függvények, amelyek specifikus adatrészleteket származtatnak a globális állapotból. Ez lehetővé teszi a komponensei számára, hogy csak a számukra szükséges adatokra iratkozzanak fel, megelőzve a felesleges újrarendereléseket, amikor az állapot más részei változnak.
Példa (Redux a Reselecttel):
import { useSelector } from 'react-redux';
import { createSelector } from 'reselect';
// Selector to extract user name
const selectUserName = createSelector(
state => state.user,
user => user.name
);
function NameComponent() {
// Subscribe to only the user name using useSelector and the selector
const userName = useSelector(selectUserName);
return <p>User Name: {userName}</p>;
}
Egy szelektor használatával a NameComponent csak akkor fog újrarenderelődni, amikor a user.name tulajdonság megváltozik a Redux store-ban, még akkor is, ha a user objektum más részei frissülnek.
Bevált gyakorlatok és megfontolások
- MĂ©rĂ©s Ă©s profilozás: Mindig mĂ©rje Ă©s profilozza az alkalmazást az optimalizálási technikák bevezetĂ©se elĹ‘tt Ă©s után. Ez segĂt ellenĹ‘rizni, hogy a változtatások valĂłban javĂtják-e a teljesĂtmĂ©nyt.
- Fokozatos optimalizálás: Kezdje a leginkább hatásos optimalizálási technikákkal (pl. szelektĂv adatlekĂ©rĂ©s a
getSnapshotsegĂtsĂ©gĂ©vel), majd fokozatosan alkalmazzon más technikákat szĂĽksĂ©g szerint. - AlternatĂvák megfontolása: NĂ©hány esetben az
experimental_useSubscriptionhasználata nem a legjobb megoldás. Fedezzen fel alternatĂv megközelĂtĂ©seket, mint pĂ©ldául a hagyományos adatlekĂ©rĂ©si technikák vagy a beĂ©pĂtett feliratkozási mechanizmusokkal rendelkezĹ‘ állapotkezelĹ‘ könyvtárak használata. - Maradjon naprakĂ©sz: Az
experimental_useSubscriptionegy kĂsĂ©rleti API, Ăgy a viselkedĂ©se Ă©s az API-ja változhat a React jövĹ‘beli verziĂłiban. Maradjon naprakĂ©sz a legĂşjabb React dokumentáciĂłval Ă©s közössĂ©gi megbeszĂ©lĂ©sekkel. - KĂłd felosztás (Code Splitting): Nagyobb alkalmazások esetĂ©n fontolja meg a kĂłd felosztását a kezdeti betöltĂ©si idĹ‘ csökkentĂ©se Ă©s az általános teljesĂtmĂ©ny javĂtása Ă©rdekĂ©ben. Ez magában foglalja az alkalmazás kisebb darabokra bontását, amelyek igĂ©ny szerint töltĹ‘dnek be.
Következtetés
Az experimental_useSubscription egy erĹ‘teljes Ă©s kĂ©nyelmes mĂłdszert kĂnál kĂĽlsĹ‘ adatforrásokra valĂł feliratkozásra a Reactben. Azonban kulcsfontosságĂş megĂ©rteni a lehetsĂ©ges teljesĂtmĂ©nybeli következmĂ©nyeket Ă©s megfelelĹ‘ optimalizálási stratĂ©giákat alkalmazni. A szelektĂv adatlekĂ©rĂ©s, memoizáciĂł, debouncing, throttling Ă©s más technikák használatával minimalizálhatja a feliratkozás feldolgozásának többletterhĂ©t, Ă©s nagy teljesĂtmĂ©nyű React alkalmazásokat Ă©pĂthet, amelyek hatĂ©konyan kezelik a valĂłs idejű adatokat Ă©s az összetett állapotokat. Ne felejtse el mĂ©rni Ă©s profilozni az alkalmazását, hogy megbizonyosodjon arrĂłl, hogy az optimalizálási erĹ‘feszĂtĂ©sei valĂłban javĂtják a teljesĂtmĂ©nyt. És mindig tartsa szemmel a React dokumentáciĂłját az experimental_useSubscription frissĂtĂ©seivel kapcsolatban, ahogy az fejlĹ‘dik. A gondos tervezĂ©s Ă©s a szorgalmas teljesĂtmĂ©nyfigyelĂ©s kombinálásával kiaknázhatja az experimental_useSubscription erejĂ©t anĂ©lkĂĽl, hogy feláldozná az alkalmazás reszponzivitását.