Fedezze fel a React experimental_useFormState teljesĂtmĂ©nyoptimalizálásának titkait. Ismerjen meg haladĂł technikákat az űrlapállapot-feldolgozás felgyorsĂtására Ă©s a felhasználĂłi Ă©lmĂ©ny javĂtására React alkalmazásaiban.
React experimental_useFormState teljesĂtmĂ©nyoptimalizálás: Az űrlapállapot-feldolgozási sebessĂ©g mesteri szintű kezelĂ©se
A React experimental_useFormState hookja hatĂ©kony mĂłdszert kĂnál az űrlapállapotok Ă©s szerverakciĂłk kezelĂ©sĂ©re React komponenseken belĂĽl. Azonban, mint minden összetett eszköznĂ©l, itt is kulcsfontosságĂş megĂ©rteni, hogyan használjuk hatĂ©konyan a teljesĂtmĂ©nybeli szűk keresztmetszetek elkerĂĽlĂ©se Ă©rdekĂ©ben. Ez az ĂştmutatĂł mĂ©lyen beleássa magát az űrlapállapot-feldolgozási sebessĂ©g optimalizálásába, amikor az experimental_useFormState-et használjuk, lefedve mindent az alapkoncepciĂłktĂłl a haladĂł technikákig. FelfedezzĂĽk a gyakori buktatĂłkat, Ă©s gyakorlati stratĂ©giákat nyĂşjtunk annak biztosĂtására, hogy React alkalmazásai zökkenĹ‘mentes Ă©s reszponzĂv felhasználĂłi Ă©lmĂ©nyt nyĂşjtsanak a globális közönsĂ©g számára.
Az experimental_useFormState megértése
MielĹ‘tt belemerĂĽlnĂ©nk az optimalizálásba, foglaljuk össze röviden, mit is csinál az experimental_useFormState. Ez a hook lehetĹ‘vĂ© teszi, hogy egy szerverakciĂłt egy űrlaphoz kössĂĽnk, Ă©s a keletkezĹ‘ állapotot közvetlenĂĽl a komponensĂĽnkön belĂĽl kezeljĂĽk. LeegyszerűsĂti az űrlapkĂĽldĂ©sek, a szerveroldali validálás kezelĂ©sĂ©nek folyamatát, Ă©s a felhasználĂłnak valĂł visszajelzĂ©s megjelenĂtĂ©sĂ©t. A hook visszaadja az aktuális űrlapállapotot Ă©s egy kötött akciĂłfĂĽggvĂ©nyt.
Íme egy alapvető példa:
import { useFormState } from 'react';
import { myServerAction } from './actions';
function MyForm() {
const [state, action] = useFormState(myServerAction, { message: '' });
return (
);
}
Ebben a pĂ©ldában a myServerAction egy szerverfĂĽggvĂ©ny, amely feldolgozza az űrlap adatait. A useFormState hook kezeli ennek a fĂĽggvĂ©nynek a meghĂvását az űrlap elkĂĽldĂ©sekor, Ă©s frissĂti a komponenst az eredmĂ©nnyel, amelyet a state változĂł tárol.
Gyakori teljesĂtmĂ©nycsapdák
Bár az experimental_useFormState leegyszerűsĂti az űrlapkezelĂ©st, számos gyakori hiba vezethet teljesĂtmĂ©nyproblĂ©mákhoz. Vizsgáljuk meg ezeket a buktatĂłkat Ă©s hogyan kerĂĽlhetjĂĽk el Ĺ‘ket:
1. Felesleges újrarenderelések
A React alkalmazások egyik leggyakoribb teljesĂtmĂ©ny-szűk keresztmetszete a felesleges ĂşjrarenderelĂ©s. Amikor egy komponens ĂşjrarenderelĹ‘dik, a Reactnak össze kell egyeztetnie a virtuális DOM-ot, ami számĂtásigĂ©nyes lehet, kĂĽlönösen összetett komponensek esetĂ©n. Az experimental_useFormState gondatlan használata gyakori ĂşjrarenderelĂ©seket válthat ki, ami rontja a teljesĂtmĂ©nyt.
Ok: A useFormState hook minden alkalommal új állapotobjektumot ad vissza, amikor a szerverakció befejeződik, még akkor is, ha az adatok nem változtak. Ez az objektumazonosság-változás újrarenderelést vált ki a komponensben és annak gyermekeiben.
Megoldás: Használja a useMemo vagy useCallback hookokat a felesleges ĂşjrarenderelĂ©sek megelĹ‘zĂ©sĂ©re az állapot vagy az akciĂłfĂĽggvĂ©ny memoizálásával. Csak akkor frissĂtse az állapotot, ha az adatok tĂ©nylegesen megváltoztak.
Példa:
import { useFormState } from 'react';
import { useCallback, useMemo } from 'react';
import { myServerAction } from './actions';
function MyForm() {
const initialState = useMemo(() => ({ message: '' }), []);
const [state, action] = useFormState(myServerAction, initialState);
//Újrarenderelések megelőzése, ha az üzenet nem változott
const memoizedState = useMemo(() => {
return state
}, [state?.message]);
const memoizedAction = useCallback((formData) => {
action(formData);
}, [action]);
return (
);
}
2. Komplex állapotfrissĂtĂ©sek
Nagy vagy mĂ©lyen beágyazott állapotobjektumok frissĂtĂ©se költsĂ©ges lehet. Minden frissĂtĂ©s ĂşjrarenderelĂ©st vált ki, Ă©s a Reactnak össze kell hasonlĂtania a rĂ©gi Ă©s az Ăşj állapotot a változások azonosĂtásához. A komplex állapotfrissĂtĂ©sek jelentĹ‘sen lelassĂthatják az alkalmazást.
Ok: Az experimental_useFormState automatikusan frissĂti a teljes állapotobjektumot, amikor a szerverakciĂł visszatĂ©r. Ha az állapotobjektum nagy vagy mĂ©lyen beágyazott adatokat tartalmaz, ez teljesĂtmĂ©nyproblĂ©mákhoz vezethet.
Megoldás: Tartsa az állapotobjektumot a lehetĹ‘ legegyszerűbben. KerĂĽlje a felesleges adatok tárolását az állapotban. Ha nagy állapota van, fontolja meg annak kisebb, jobban kezelhetĹ‘ darabokra bontását. Használjon olyan technikákat, mint az immutabilitás, az állapot rĂ©szeinek hatĂ©kony frissĂtĂ©sĂ©hez.
PĂ©lda: Ahelyett, hogy az összes űrlapadatot egyetlen állapotobjektumban tárolná, tárolja minden mezĹ‘ Ă©rtĂ©kĂ©t kĂĽlön állapotváltozĂłkban a useState segĂtsĂ©gĂ©vel. ĂŤgy csak a megváltozott mezĹ‘höz tartozĂł komponens fog ĂşjrarenderelĹ‘dni.
3. Költséges szerverakciók
A szerverakciĂłk teljesĂtmĂ©nye közvetlenĂĽl befolyásolja az űrlap teljesĂtmĂ©nyĂ©t. Ha a szerverakciĂłk lassĂşak vagy erĹ‘forrás-igĂ©nyesek, kĂ©sleltetik az állapotfrissĂtĂ©st, Ă©s az alkalmazás lomhának fog tűnni.
Ok: LassĂş adatbázis-lekĂ©rdezĂ©sek, összetett számĂtások vagy nem hatĂ©kony hálĂłzati kĂ©rĂ©sek a szerverakciĂłkban.
Megoldás: Optimalizálja szerverakciĂłit a vĂ©grehajtási idĹ‘ minimalizálása Ă©rdekĂ©ben. Használjon hatĂ©kony algoritmusokat, optimalizálja az adatbázis-lekĂ©rdezĂ©seket, Ă©s gyorsĂtĂłtárazza a gyakran elĂ©rt adatokat. Fontolja meg háttĂ©rfeladatok vagy várĂłlisták használatát a hosszan futĂł feladatok aszinkron kezelĂ©sĂ©re. ValĂłsĂtson meg robusztus hibakezelĂ©st, hogy megakadályozza a szerverakciĂłk váratlan meghibásodását, ami rossz felhasználĂłi Ă©lmĂ©nyhez vezethet.
4. A fő szál blokkolása
A JavaScript egyszálú, ami azt jelenti, hogy minden kód egyetlen szálon, a fő szálon fut. Ha egy hosszan futó feladat blokkolja a fő szálat, a böngésző nem fog reagálni, ami rossz felhasználói élményt eredményez.
Ok: Szinkron műveletek a szerverakciĂłkban vagy a komponensfrissĂtĂ©sekben, amelyek vĂ©grehajtása sok idĹ‘t vesz igĂ©nybe.
Megoldás: Használjon aszinkron műveleteket a fĹ‘ szál blokkolásának elkerĂĽlĂ©se Ă©rdekĂ©ben. Használja az async/await vagy a Promise-okat az aszinkron feladatok kezelĂ©sĂ©re. Fontolja meg web workerek használatát a számĂtásigĂ©nyes feladatok háttĂ©rszálra törtĂ©nĹ‘ kiszervezĂ©sĂ©hez. Használjon olyan technikákat, mint a virtualizáciĂł Ă©s a lapozás a nagy adathalmazok hatĂ©kony renderelĂ©sĂ©hez a fĹ‘ szál blokkolása nĂ©lkĂĽl.
5. Túlzott hálózati kérések
Minden hálĂłzati kĂ©rĂ©s kĂ©sleltetĂ©st ad az alkalmazáshoz. A tĂşlzott hálĂłzati kĂ©rĂ©sek jelentĹ‘sen lelassĂthatják az űrlapkĂĽldĂ©seket Ă©s az állapotfrissĂtĂ©seket.
Ok: Több hálĂłzati kĂ©rĂ©s indĂtása űrlapvalidáláshoz vagy adatlekĂ©rĂ©shez. Nagy mennyisĂ©gű adat kĂĽldĂ©se a szervernek.
Megoldás: Minimalizálja a hálĂłzati kĂ©rĂ©sek számát. Ha lehetsĂ©ges, vonjon össze több kĂ©rĂ©st egyetlen kĂ©rĂ©sbe. Használjon olyan technikákat, mint a code splitting (kĂłdfelosztás) Ă©s a lazy loading (lusta betöltĂ©s), hogy csak a szĂĽksĂ©ges erĹ‘forrásokat töltse be. TömörĂtse az adatokat, mielĹ‘tt elkĂĽldenĂ© Ĺ‘ket a szerverre.
Haladó optimalizálási technikák
Most, hogy áttekintettĂĽk a gyakori buktatĂłkat, nĂ©zzĂĽnk meg nĂ©hány haladĂł technikát az experimental_useFormState teljesĂtmĂ©nyĂ©nek optimalizálására:
1. Szerveroldali validálás
Az űrlapvalidálás szerveroldali elvĂ©gzĂ©se általában biztonságosabb Ă©s megbĂzhatĂłbb, mint a kliensoldali validálás. Azonban lassabb is lehet, mivel hálĂłzati kĂ©rĂ©st igĂ©nyel a szerver felĂ©.
Optimalizálás: ValĂłsĂtson meg egy kombinált kliens- Ă©s szerveroldali validálást. Használjon kliensoldali validálást az alapvetĹ‘ ellenĹ‘rzĂ©sekhez, mint pĂ©ldául a kötelezĹ‘ mezĹ‘k Ă©s az adatformátum. A bonyolultabb validálást vĂ©gezze el a szerveroldalon. Ez csökkenti a felesleges hálĂłzati kĂ©rĂ©sek számát, Ă©s gyorsabb visszajelzĂ©si ciklust biztosĂt a felhasználĂłnak.
Példa:
// Kliensoldali validálás
function validateForm(data) {
if (!data.name) {
return 'A név megadása kötelező';
}
return null;
}
// Szerveroldali akciĂł
async function myServerAction(prevState, formData) {
const data = Object.fromEntries(formData);
//Kliensoldali validálás
const clientError = validateForm(data);
if(clientError){
return {message: clientError}
}
// Szerveroldali validálás
if (data.name.length < 3) {
return { message: 'A névnek legalább 3 karakter hosszúnak kell lennie' };
}
// Az űrlapadatok feldolgozása
return { message: 'Az űrlap sikeresen elküldve!' };
}
2. Optimista frissĂtĂ©sek
Az optimista frissĂtĂ©sek lehetĹ‘vĂ© teszik az alkalmazás Ă©rzĂ©kelt teljesĂtmĂ©nyĂ©nek javĂtását. Az optimista frissĂtĂ©sekkel azonnal frissĂti a felhasználĂłi felĂĽletet, miután a felhasználĂł elkĂĽldte az űrlapot, anĂ©lkĂĽl, hogy megvárná a szerver válaszát. Ha a szerverakciĂł sikertelen, visszaállĂthatja a felhasználĂłi felĂĽletet az elĹ‘zĹ‘ állapotába.
Optimalizálás: ValĂłsĂtson meg optimista frissĂtĂ©seket egy reszponzĂvabb felhasználĂłi Ă©lmĂ©ny Ă©rdekĂ©ben. Ez gyorsabbnak Ă©reztetheti az alkalmazást, mĂ©g akkor is, ha a szerverakciĂł vĂ©grehajtása nĂ©mi idĹ‘t vesz igĂ©nybe.
Példa:
import { useFormState, useState } from 'react';
import { myServerAction } from './actions';
function MyForm() {
const [optimisticMessage, setOptimisticMessage] = useState('');
const [state, action] = useFormState(async (prevState, formData) => {
setOptimisticMessage('KĂĽldĂ©s...'); // Optimista frissĂtĂ©s
const result = await myServerAction(prevState, formData);
if (!result.success) {
setOptimisticMessage(''); // VisszaállĂtás hiba esetĂ©n
}
return result;
}, { message: '' });
return (
);
}
3. Debouncing és Throttling
A debouncing és a throttling olyan technikák, amelyek korlátozzák egy függvény végrehajtásának gyakoriságát. Hasznosak lehetnek az űrlapvalidálás vagy más, felhasználói bevitel által kiváltott feladatok optimalizálására.
Optimalizálás: Használjon debouncingot vagy throttlingot a szerverakciĂł meghĂvásainak számának csökkentĂ©sĂ©re. Ez javĂthatja a teljesĂtmĂ©nyt Ă©s megelĹ‘zheti a felesleges hálĂłzati kĂ©rĂ©seket.
Példa:
import { useFormState } from 'react';
import { debounce } from 'lodash'; // lodash csomag szükséges
import { myServerAction } from './actions';
function MyForm() {
const [state, action] = useFormState(myServerAction, { message: '' });
const debouncedAction = debounce(action, 300); // Debounce 300ms-ig
return (
);
}
4. Code Splitting és Lazy Loading
A code splitting (kódfelosztás) az alkalmazás kisebb csomagokra bontásának folyamata, amelyeket igény szerint lehet betölteni. A lazy loading (lusta betöltés) egy technika az erőforrások betöltésére csak akkor, amikor szükség van rájuk.
Optimalizálás: Használjon code splittinget Ă©s lazy loadingot az alkalmazás kezdeti betöltĂ©si idejĂ©nek csökkentĂ©sĂ©re. Ez javĂthatja az általános teljesĂtmĂ©nyt Ă©s a felhasználĂłi Ă©lmĂ©nyt.
5. Memoizációs technikák
Ezt már röviden Ă©rintettĂĽk, de Ă©rdemes bĹ‘vebben kifejteni. A memoizáciĂł egy hatĂ©kony optimalizálási technika, amely a költsĂ©ges fĂĽggvĂ©nyhĂvások eredmĂ©nyeinek gyorsĂtĂłtárazását Ă©s a gyorsĂtĂłtárazott eredmĂ©ny visszaadását jelenti, amikor ugyanazok a bemenetek ismĂ©t elĹ‘fordulnak.
Optimalizálás: Használja a useMemo Ă©s useCallback hookokat a komponenseken belĂĽl használt Ă©rtĂ©kek Ă©s fĂĽggvĂ©nyek memoizálására. Ez megakadályozhatja a felesleges ĂşjrarenderelĂ©seket Ă©s javĂthatja a teljesĂtmĂ©nyt.
Példa:
import { useFormState, useMemo, useCallback } from 'react';
import { myServerAction } from './actions';
function MyForm() {
const [state, action] = useFormState(myServerAction, { message: '' });
// Az akciófüggvény memoizálása
const memoizedAction = useCallback(action, [action]);
// Az állapotérték memoizálása
const memoizedState = useMemo(() => state, [state]);
return (
);
}
Gyakorlati példák különböző földrajzi területeken
Hogy ezeket a koncepciókat globális kontextusban szemléltessük, nézzünk néhány példát:
- E-kereskedelmi űrlap Japánban: Egy japán e-kereskedelmi oldal az
experimental_useFormState-et használja a pĂ©nztár űrlapjához. A teljesĂtmĂ©ny optimalizálása Ă©rdekĂ©ben szerveroldali validálást alkalmaznak a cĂm ellenĹ‘rzĂ©sĂ©re a nemzeti postai irányĂtĂłszám-adatbázis alapján. Emellett optimista frissĂtĂ©seket is implementálnak, hogy azonnal megjelenĂtsĂ©k a rendelĂ©s megerĹ‘sĂtĹ‘ oldalát, miután a felhasználĂł elkĂĽldte a rendelĂ©st, mĂ©g a fizetĂ©s feldolgozása elĹ‘tt. - Banki alkalmazás NĂ©metországban: Egy nĂ©met banki alkalmazás az
experimental_useFormState-et használja az átutalási űrlapjához. A biztonság Ă©s a teljesĂtmĂ©ny biztosĂtása Ă©rdekĂ©ben kliens- Ă©s szerveroldali validáciĂł kombináciĂłját alkalmazzák. A kliensoldali validálás az alapvetĹ‘ beviteli hibákat ellenĹ‘rzi, mĂg a szerveroldali validálás bonyolultabb ellenĹ‘rzĂ©seket vĂ©gez, mint pĂ©ldául a számlaegyenleg Ă©s a tranzakciĂłs limitek. Emellett debouncingot is használnak a tĂşlzott API-hĂvások megelĹ‘zĂ©sĂ©re, amikor a felhasználĂł beĂrja az átutalandĂł összeget. - KözössĂ©gi mĂ©dia platform BrazĂliában: Egy brazil közössĂ©gi mĂ©dia platform az
experimental_useFormState-et használja a bejegyzĂ©skĂ©szĂtĹ‘ űrlapjához. A nagymĂ©retű mĂ©diafeltöltĂ©sek kezelĂ©sĂ©re háttĂ©rfeladatokat használnak a kĂ©pek Ă©s videĂłk aszinkron feldolgozásához. Emellett code splittinget is alkalmaznak, hogy csak a bejegyzĂ©skĂ©szĂtĹ‘ űrlaphoz szĂĽksĂ©ges JavaScript kĂłdot töltsĂ©k be, csökkentve ezzel az alkalmazás kezdeti betöltĂ©si idejĂ©t. - Kormányzati szolgáltatási portál Indiában: Egy indiai kormányzati szolgáltatási portál az
experimental_useFormState-et használja a kĂ©relmezĂ©si űrlapjaihoz. A korlátozott sávszĂ©lessĂ©gű terĂĽleteken a teljesĂtmĂ©ny optimalizálása Ă©rdekĂ©ben tömörĂtik az adatokat, mielĹ‘tt elkĂĽldenĂ©k Ĺ‘ket a szerverre. Emellett lazy loadingot is használnak, hogy csak a felhasználĂł választásai alapján szĂĽksĂ©ges űrlapmezĹ‘ket töltsĂ©k be.
TeljesĂtmĂ©nyfigyelĂ©s Ă©s hibakeresĂ©s
A teljesĂtmĂ©ny optimalizálása egy iteratĂv folyamat. LĂ©nyeges, hogy figyelemmel kĂsĂ©rje alkalmazása teljesĂtmĂ©nyĂ©t, Ă©s azonosĂtsa a fejlesztĂ©sre szorulĂł terĂĽleteket. Használjon böngĂ©szĹ‘fejlesztĹ‘i eszközöket Ă©s teljesĂtmĂ©nyfigyelĹ‘ eszközöket a kulcsfontosságĂş metrikák, mint a renderelĂ©si idĹ‘, a hálĂłzati kĂ©sleltetĂ©s Ă©s a memĂłriahasználat nyomon követĂ©sĂ©re.
Íme néhány hasznos eszköz:
- React Profiler: A React Developer Tools beĂ©pĂtett eszköze, amely lehetĹ‘vĂ© teszi a React komponensek teljesĂtmĂ©nyĂ©nek profilozását.
- Chrome DevTools Performance fĂĽl: Egy hatĂ©kony eszköz a webalkalmazás teljesĂtmĂ©nyĂ©nek elemzĂ©sĂ©re, beleĂ©rtve a CPU-használatot, a memĂłriafoglalást Ă©s a hálĂłzati tevĂ©kenysĂ©get.
- Lighthouse: Egy automatizált eszköz a webalkalmazás teljesĂtmĂ©nyĂ©nek, hozzáfĂ©rhetĹ‘sĂ©gĂ©nek Ă©s SEO-jának auditálására.
- WebPageTest: Egy ingyenes eszköz a webalkalmazás teljesĂtmĂ©nyĂ©nek tesztelĂ©sĂ©re a világ kĂĽlönbözĹ‘ pontjairĂłl.
Bevált gyakorlatok összefoglalása
Ă–sszefoglalva, itt vannak a bevált gyakorlatok az experimental_useFormState teljesĂtmĂ©nyĂ©nek optimalizálásához:
- Minimalizálja az újrarendereléseket: Használja a
useMemoĂ©suseCallbackhookokat a felesleges ĂşjrarenderelĂ©sek megelĹ‘zĂ©sĂ©re. - EgyszerűsĂtse az állapotfrissĂtĂ©seket: Tartsa az állapotobjektumot a lehetĹ‘ legegyszerűbben.
- Optimalizálja a szerverakciĂłkat: Használjon hatĂ©kony algoritmusokat, optimalizálja az adatbázis-lekĂ©rdezĂ©seket Ă©s gyorsĂtĂłtárazza a gyakran elĂ©rt adatokat.
- Kerülje a fő szál blokkolását: Használjon aszinkron műveleteket és web workereket a fő szál blokkolásának elkerülése érdekében.
- Csökkentse a hálĂłzati kĂ©rĂ©seket: Minimalizálja a hálĂłzati kĂ©rĂ©sek számát Ă©s tömörĂtse az adatokat, mielĹ‘tt elkĂĽldenĂ© Ĺ‘ket a szerverre.
- Használjon szerveroldali validálást: ValĂłsĂtson meg egy kombinált kliens- Ă©s szerveroldali validálást.
- Implementáljon optimista frissĂtĂ©seket: BiztosĂtson reszponzĂvabb felhasználĂłi Ă©lmĂ©nyt az optimista frissĂtĂ©sekkel.
- Használjon debouncingot Ă©s throttlingot: Csökkentse a szerverakciĂł meghĂvásainak számát.
- Használjon code splittinget és lazy loadingot: Csökkentse az alkalmazás kezdeti betöltési idejét.
- Figyelje a teljesĂtmĂ©nyt: Használjon böngĂ©szĹ‘fejlesztĹ‘i eszközöket Ă©s teljesĂtmĂ©nyfigyelĹ‘ eszközöket a kulcsfontosságĂş metrikák nyomon követĂ©sĂ©re.
KonklĂşziĂł
Az experimental_useFormState-tel valĂł teljesĂtmĂ©nyoptimalizálás mĂ©ly megĂ©rtĂ©st igĂ©nyel a React renderelĂ©si viselkedĂ©sĂ©rĹ‘l Ă©s a lehetsĂ©ges szűk keresztmetszetekrĹ‘l, amelyek az űrlapállapotok Ă©s szerverakciĂłk kezelĂ©se során felmerĂĽlhetnek. Az ebben az ĂştmutatĂłban felvázolt technikák követĂ©sĂ©vel biztosĂthatja, hogy React alkalmazásai zökkenĹ‘mentes Ă©s reszponzĂv felhasználĂłi Ă©lmĂ©nyt nyĂşjtsanak, fĂĽggetlenĂĽl a felhasználĂłk helyĂ©tĹ‘l vagy eszközĂ©tĹ‘l. Ne felejtse el folyamatosan figyelemmel kĂsĂ©rni alkalmazása teljesĂtmĂ©nyĂ©t, Ă©s szĂĽksĂ©g szerint igazĂtsa optimalizálási stratĂ©giáit. Gondos tervezĂ©ssel Ă©s megvalĂłsĂtással kihasználhatja az experimental_useFormState erejĂ©t, hogy nagy teljesĂtmĂ©nyű, globálisan elĂ©rhetĹ‘ webalkalmazásokat Ă©pĂtsen. Vegye figyelembe a teljesĂtmĂ©nyt a fejlesztĂ©si ciklus kezdetĂ©tĹ‘l, Ă©s kĂ©sĹ‘bb hálás lesz magának Ă©rte.