Salesforce LWC uchun CSS @track dekoratori bo'yicha to'liq qo'llanma, uning ma'lumotlar o'zgarishini samarali kuzatish va renderlash orqali unumdorlikni optimallashtirishdagi rolini o'rganadi.
CSS @track: Samarali ma'lumotlarni bog'lash orqali veb unumdorligini oshirish
Zamonaviy veb-ishlab chiqish sohasida, ayniqsa Salesforce ekotizimida Lightning Web Components (LWC) dan foydalanishda unumdorlik eng muhim omil hisoblanadi. Foydalanuvchilar tez, sezgir va uzluksiz tajribani kutishadi. LWCda optimal unumdorlikka erishish uchun kuchli vositalardan biri bu @track
dekoratoridir. Ushbu maqola samarali ma'lumotlarni bog'lash va veb unumdorligini oshirish uchun @track
ni tushunish va undan foydalanish bo'yicha to'liq qo'llanmani taqdim etadi.
@track
dekoratori nima?
LWCdagi @track
dekoratori komponentning JavaScript sinfidagi xususiyatlarga kiritilgan o'zgarishlarni kuzatish uchun ishlatiladi. Biror xususiyat @track
bilan belgilansa, LWCning reaktiv mexanizmi ushbu xususiyatdagi o'zgarishlarni kuzatib boradi. O'zgarish aniqlanganda, LWC komponentni qayta render qiladi va foydalanuvchi interfeysini yangi ma'lumotlarni aks ettirish uchun yangilaydi.
Buni ixtisoslashtirilgan kuzatuvchi sifatida tasavvur qiling. Murakkab o'zgarishlarni aniqlash mexanizmlarini qo'lda amalga oshirish o'rniga, @track
LWCga qaysi xususiyatlar yangilanishlarni ishga tushirishi kerakligini aytishning deklarativ va samarali usulini taqdim etadi.
Asosiy tushuncha: @track
dan strategik foydalangan holda, siz qaysi komponent yangilanishlari ishga tushirilishini nazorat qilishingiz, keraksiz qayta renderlashni minimallashtirishingiz va unumdorlikni sezilarli darajada oshirishingiz mumkin.
Nima uchun @track
unumdorlik uchun muhim?
Veb-brauzerlar ekrandagi elementlarni doimiy ravishda render qiladi va qayta render qiladi. Bu jarayon, ayniqsa katta hajmdagi ma'lumotlarga ega murakkab ilovalarda ko'p resurs talab qilishi mumkin. Keraksiz qayta renderlash quyidagilarga olib kelishi mumkin:
- Sekinlashuv: Foydalanuvchi interfeysi sust va sezgirsiz bo'lib qoladi.
- Markaziy protsessor (CPU) dan foydalanishning ortishi: Brauzer ko'proq ishlov berish quvvatini sarflaydi, bu esa mobil qurilmalarda batareya quvvatini kamaytirishi mumkin.
- Yomon foydalanuvchi tajribasi: Foydalanuvchilar sekin ishlashdan hafsalasi pir bo'ladi va ilovadan voz kechishi mumkin.
@track
komponentlar qachon qayta render qilinishini aniq nazorat qilish imkonini berib, ushbu muammolarni yumshatishga yordam beradi. @track
yoki shunga o'xshash mexanizmlarsiz, LWC o'zgarishlarni tez-tez va ehtimol keraksiz tekshirishlarga majbur bo'lar edi, bu esa unumdorlikning pasayishiga olib keladi.
@track
qanday ishlaydi?
Siz biror xususiyatni @track
bilan belgilaganingizda, LWCning reaktiv mexanizmi ushbu xususiyatni o'rab turuvchi proksi obyekt yaratadi. Bu proksi obyekt xususiyat qiymatini o'zgartirishga bo'lgan har qanday urinishni to'xtatadi. O'zgartirish aniqlanganda, proksi obyekt komponentni qayta render qilishni ishga tushiradi.
Muhim jihat: @track
faqat xususiyatning o'zining *qiymatidagi* o'zgarishlarni kuzatadi, agar u obyekt yoki massiv bo'lsa, xususiyat *ichidagi* o'zgarishlarni kuzatmaydi. Bu @track
dan samarali foydalanishni tushunish uchun juda muhim farqdir.
@track
va Ommaviy Xususiyatlar (@api
)
@track
ni @api
bilan belgilangan ommaviy xususiyatlardan farqlash muhim. Ikkalasi ham qayta renderlashni ishga tushirishi mumkin bo'lsa-da, ular turli maqsadlarga xizmat qiladi:
@track
: Komponent ichidagi shaxsiy xususiyatlarga kiritilgan o'zgarishlarni kuzatish uchun ishlatiladi. Ushbu xususiyatlarga kiritilgan o'zgarishlar odatda komponentning o'zi tomonidan boshlanadi.@api
: Ota-ona komponentlar yoki tashqi tizimlar (masalan, Apex yoki boshqa Lightning komponentlaridan) tomonidan kirish va o'zgartirish mumkin bo'lgan ommaviy xususiyatlarni aniqlash uchun ishlatiladi.
@api
xususiyatlariga kiritilgan o'zgarishlar *har doim* qayta renderlashni ishga tushiradi, chunki ular komponentning ommaviy interfeysini ifodalaydi. @track
esa komponentning ichki holati uchun qayta renderlashni yanada nozikroq nazorat qilish imkonini beradi.
@track
ni qachon ishlatish kerak
Quyida @track
dan foydalanish foydali bo'lgan ba'zi umumiy holatlar keltirilgan:
- Primitiv ma'lumot turlarini kuzatish: Satrlar, raqamlar, mantiqiy qiymatlar va sanalar kabi oddiy ma'lumot turlari uchun
@track
dan foydalaning. Ushbu turlardagi o'zgarishlar to'g'ridan-to'g'ri kuzatiladi va qayta renderlashni ishga tushiradi. - Obyektlar va massivlardagi o'zgarishlarni kuzatish (qisman):
@track
obyektlar va massivlar *ichidagi* o'zgarishlarni chuqur kuzatmasa-da, u obyekt yoki massiv *havolasidagi* o'zgarishlarni kuzatadi. Bu shuni anglatadiki, agar siz@track
bilan belgilangan xususiyatga yangi obyekt yoki massiv tayinlasangiz, u qayta renderlashni *ishga tushiradi*. - Foydalanuvchi o'zaro ta'siriga asoslangan renderlashni optimallashtirish: Agar sizda foydalanuvchi harakatlariga (masalan, tugmachani bosish, kiritish o'zgarishlari) qarab yangilanadigan komponent bo'lsa, komponent faqat tegishli ma'lumotlar o'zgarganda qayta render qilinishini ta'minlash uchun
@track
dan foydalaning.
@track
ni qachon ishlatmaslik kerak (va muqobillari)
@track
eng maqbul tanlov bo'lmasligi mumkin bo'lgan holatlar mavjud, ayniqsa murakkab obyektlar va massivlar bilan ishlashda. Uni noto'g'ri ishlatish kutilmagan xatti-harakatlarga yoki unumdorlik muammolariga olib kelishi mumkin.
- Chuqur joylashgan obyektlar va massivlar: Yuqorida aytib o'tilganidek,
@track
obyekt yoki massivning *havolasidagi* o'zgarishlarni kuzatadi, uning *ichidagi* o'zgarishlarni emas. Agar siz chuqur joylashgan obyekt yoki massiv ichidagi xususiyatni o'zgartirsangiz, komponent qayta render *qilinmaydi*. - Katta hajmdagi ma'lumotlar to'plamlari: Juda katta hajmdagi ma'lumotlar to'plamlari bilan ishlashda har bir o'zgarishni
@track
bilan kuzatish samarasiz bo'lishi mumkin. Pagination, virtualizatsiya yoki maxsus ma'lumotlar tuzilmalaridan foydalanish kabi muqobil strategiyalarni ko'rib chiqing.
Murakkab ma'lumotlar uchun @track
ga muqobillar:
- O'zgarmaslik (Immutability): Ma'lumotlaringizga o'zgarmas deb qarang. Mavjud obyektlar yoki massivlarni o'zgartirish o'rniga, kerakli o'zgarishlar bilan yangilarini yarating. Bu obyekt havolasining o'zgarishini ta'minlaydi va
@track
xususiyati yangilanganda qayta renderlashni ishga tushiradi. Immer.js kabi kutubxonalar o'zgarmas ma'lumotlarni boshqarishga yordam beradi. - Qo'lda qayta renderlash: Ba'zi hollarda,
renderedCallback()
hayot sikli ilgagi yordamida qayta renderlashni qo'lda ishga tushirishingiz kerak bo'lishi mumkin. Bu sizga renderlash jarayoni ustidan to'liq nazoratni beradi. Biroq, bundan tejamkorlik bilan foydalaning, chunki bu kodingizni murakkablashtirishi mumkin. - Hodisalarni qayta ishlash va maqsadli yangilanishlar: Har bir o'zgarishni aniqlash uchun
@track
ga tayanmasdan, komponentning ma'lum qismlarini to'g'ridan-to'g'ri yangilash uchun hodisalarni qayta ishlashdan foydalanishni ko'rib chiqing. Masalan, agar foydalanuvchi ro'yxatdagi bitta elementni tahrirlasa, butun ro'yxatni qayta renderlash o'rniga faqat o'sha elementning vizual ko'rinishini yangilang.
@track
dan foydalanishning amaliy misollari
Keling, @track
dan foydalanishni ba'zi amaliy misollar bilan ko'rib chiqamiz.
1-misol: Oddiy hisoblagichni kuzatish
Ushbu misol tugma bosilganda ortib boradigan oddiy hisoblagichni qanday kuzatishni ko'rsatadi.
JavaScript (myComponent.js):
import { LightningElement, track } from 'lwc';
export default class MyComponent extends LightningElement {
@track counter = 0;
incrementCounter() {
this.counter++;
}
}
HTML (myComponent.html):
Hisoblagich: {counter}
Ushbu misolda counter
xususiyati @track
bilan belgilangan. incrementCounter()
metodi chaqirilganda, counter
qiymati oshiriladi, bu esa komponentni qayta render qilishni va ko'rsatilgan hisoblagich qiymatini yangilashni ishga tushiradi.
2-misol: Obyektdagi o'zgarishlarni kuzatish (Yuzaki kuzatuv)
Ushbu misol @track
ning obyekt *havolasidagi* o'zgarishlarni qanday kuzatishini ko'rsatadi. Obyekt *ichidagi* xususiyatlarni o'zgartirish qayta renderlashni ishga tushir*maydi*.
JavaScript (myComponent.js):
import { LightningElement, track } from 'lwc';
export default class MyComponent extends LightningElement {
@track contact = {
firstName: 'John',
lastName: 'Doe'
};
updateFirstName() {
// Bu qayta renderlashni ishga tushirMAYDI
this.contact.firstName = 'Jane';
}
replaceContact() {
// Bu qayta renderlashni ishga TUSHIRADI
this.contact = {
firstName: 'Jane',
lastName: 'Doe'
};
}
}
HTML (myComponent.html):
Ism: {contact.firstName}
Familiya: {contact.lastName}
"Ismni yangilash" tugmachasini bosish komponentni qayta render qilishga olib kelmaydi, chunki @track
faqat obyekt *havolasidagi* o'zgarishlarni kuzatadi, obyekt *ichidagi* o'zgarishlarni emas. "Kontaktni almashtirish" tugmachasini bosish qayta renderlashga olib keladi, chunki u contact
xususiyatiga yangi obyekt tayinlaydi.
3-misol: Obyektdagi o'zgarishlarni kuzatish uchun o'zgarmaslikdan foydalanish (Chuqur kuzatuv)
Ushbu misol @track
yordamida obyekt ichidagi o'zgarishlarni samarali kuzatish uchun o'zgarmaslikdan qanday foydalanishni ko'rsatadi.
JavaScript (myComponent.js):
import { LightningElement, track } from 'lwc';
export default class MyComponent extends LightningElement {
@track contact = {
firstName: 'John',
lastName: 'Doe'
};
updateFirstName() {
// Yangilangan ism bilan yangi obyekt yaratish
this.contact = {
...this.contact,
firstName: 'Jane'
};
}
}
HTML (myComponent.html):
Ism: {contact.firstName}
Familiya: {contact.lastName}
Ushbu misolda updateFirstName()
metodi yangilangan firstName
bilan *yangi* obyekt yaratish uchun spread operatoridan (...
) foydalanadi. Bu obyekt havolasining o'zgarishini ta'minlaydi va contact
xususiyati yangilanganda qayta renderlashni ishga tushiradi.
@track
dan foydalanish bo'yicha eng yaxshi amaliyotlar
@track
ning afzalliklaridan maksimal darajada foydalanish va potentsial unumdorlik muammolaridan qochish uchun quyidagi eng yaxshi amaliyotlarga rioya qiling:
@track
dan tejamkorlik bilan foydalaning: Faqat haqiqatan ham qayta renderlashni talab qiladigan xususiyatlarni belgilang. Faqat ichki hisob-kitoblar yoki vaqtinchalik saqlash uchun ishlatiladigan xususiyatlarni kuzatishdan saqlaning.- O'zgarmaslikni afzal ko'ring: Obyektlar va massivlar bilan ishlaganda, o'zgarishlarning to'g'ri kuzatilishini ta'minlash uchun o'zgarmaslikka ustunlik bering. Mavjudlarini o'zgartirish o'rniga yangi obyektlar va massivlar yaratish uchun spread operatori yoki Immer.js kabi kutubxonalardan foydalaning.
- Komponent iyerarxiyasini hisobga oling: Bir komponentdagi o'zgarishlar iyerarxiyadagi boshqa komponentlarga qanday ta'sir qilishi mumkinligi haqida o'ylang. Komponentlar o'rtasida o'zgarishlar haqida xabar berish va ota-ona komponentlarning keraksiz qayta renderlanishidan qochish uchun hodisalardan foydalaning.
- Komponentlaringizni profillang: Komponentlaringizni profillash va unumdorlikdagi zaif nuqtalarni aniqlash uchun Salesforce Lightning Inspector'dan foydalaning. Bu sizga
@track
samarasiz ishlatilayotgan yoki muqobil optimallashtirish strategiyalari yanada mos keladigan sohalarni aniqlashga yordam beradi. - Puxta sinovdan o'tkazing: Komponentlaringiz to'g'ri qayta renderlanayotgani va foydalanuvchi interfeysi kutilganidek yangilanayotganiga ishonch hosil qilish uchun ularni puxta sinovdan o'tkazing. Chekka holatlar va murakkab ma'lumotlar stsenariylariga alohida e'tibor bering.
@track
real hayot stsenariylarida
Keling, @track
ni real hayotdagi Salesforce LWC stsenariylarida qanday ishlatilishini ko'rib chiqamiz.
- Dinamik formalar: Dinamik forma komponentida siz forma maydonlarining qiymatlarini kuzatish uchun
@track
dan foydalanishingiz mumkin. Foydalanuvchi maydon qiymatini o'zgartirganda, komponent boshqa maydonlarning ko'rinishini yangilash yoki tekshiruvlarni bajarish uchun qayta render qilinadi. Masalan, "Mamlakat" maydonini o'zgartirish "Shtat/Viloyat" maydonidagi mavjud variantlarni dinamik ravishda yangilashi mumkin. Provinsiyalarga ega Kanada va shtatlarga ega AQSh kabi mamlakatlarni ko'rib chiqing; ko'rsatiladigan variantlar kontekstga mos bo'lishi kerak. - Interaktiv diagrammalar va grafiklar: Agar siz LWCda interaktiv diagrammalar yoki grafiklar yaratyotgan bo'lsangiz, tanlangan ma'lumotlar nuqtalari yoki filtr mezonlarini kuzatish uchun
@track
dan foydalanishingiz mumkin. Foydalanuvchi diagramma bilan o'zaro aloqada bo'lganda (masalan, ustunga bosish orqali), komponent diagramma ko'rinishini yangilash yoki tanlangan ma'lumotlar nuqtasi haqida batafsil ma'lumot ko'rsatish uchun qayta render qilinadi. Turli mintaqalar: Shimoliy Amerika, Yevropa, Osiyo-Tinch okeani mintaqasi uchun ma'lumotlarni ko'rsatadigan savdo paneli tasavvur qiling. Biror mintaqani tanlash o'sha mintaqadagi savdo ko'rsatkichlarining yanada batafsil ko'rinishini ko'rsatish uchun diagrammani yangilaydi. - Haqiqiy vaqtda ma'lumotlar yangilanishi: Haqiqiy vaqtda ma'lumotlar yangilanishini talab qiladigan ilovalarda (masalan, aksiya kurslari, sensor ko'rsatkichlari) kiruvchi ma'lumotlarni kuzatish va foydalanuvchi interfeysini shunga mos ravishda yangilash uchun
@track
dan foydalanishingiz mumkin. Ma'lumotlar hajmi va yangilanish chastotasini hisobga olgan holda foydalaning; juda yuqori chastotali yangilanishlar uchun muqobil yondashuvlar kerak bo'lishi mumkin. Masalan, USD, EUR, JPY va GBP o'rtasidagi real vaqtdagi valyuta kurslarini ko'rsatadigan komponent kurslar o'zgarganda ularni yangilash uchun@track
dan foydalanadi. - Maxsus qidiruv komponentlari: Maxsus qidiruv komponentini yaratishda
@track
qidiruv atamasi va qidiruv natijalarini kuzatish uchun ishlatilishi mumkin. Foydalanuvchi qidiruv maydoniga yozar ekan, komponent qidiruv natijalarini yangilash uchun qayta render qilinadi. Bu, ayniqsa, qidiruv ko'rsatilgan ma'lumotlarga filtrlar va saralashlarni qo'llasa foydalidir. Turli manbalardan ma'lumotlarni oladigan global qidiruv komponentini ko'rib chiqing;@track
dan foydalanish foydalanuvchi kiritishiga asoslangan holda qidiruvni real vaqtda aniqlashtirish imkonini beradi.
@track
va LWCdagi reaktiv dasturlashning kelajagi
@track
dekoratori LWCning reaktiv dasturlash modelining asosiy qismidir. LWC rivojlanishda davom etar ekan, biz reaktiv mexanizmda yanada takomillashuvlar va yuqori unumdorlikdagi veb-ilovalarni yaratishni yanada osonlashtiradigan yangi xususiyatlarni kutishimiz mumkin.
Potentsial kelajak yo'nalishlari:
- Yaxshilangan chuqur kuzatuv: LWCning kelajakdagi versiyalari obyektlar va massivlar ichidagi o'zgarishlarni kuzatish uchun yanada mustahkam mexanizmlarni taqdim etishi mumkin, bu esa qo'lda o'zgarmaslikni boshqarish zaruratini kamaytiradi.
- Qayta renderlash ustidan yanada nozik nazorat: LWC ishlab chiquvchilarga komponentlar qachon va qanday qayta renderlanishi ustidan yanada nozikroq nazorat qilish imkonini beradigan yangi xususiyatlarni taqdim etishi mumkin, bu esa unumdorlikni yanada optimallashtiradi.
- Reaktiv kutubxonalar bilan integratsiya: LWC RxJS yoki MobX kabi mashhur reaktiv kutubxonalar bilan yanada uzluksiz integratsiyalashishi mumkin, bu esa ishlab chiquvchilarga ma'lumotlar oqimini va komponent yangilanishlarini boshqarish uchun kengroq vositalar to'plamini taqdim etadi.
Xulosa
@track
dekoratori Salesforce LWCda veb unumdorligini optimallashtirish uchun kuchli vositadir. Uning qanday ishlashini tushunib va eng yaxshi amaliyotlarga rioya qilib, siz ajoyib foydalanuvchi tajribasini taqdim etadigan sezgir va samarali ilovalarni yaratishingiz mumkin. @track
dan strategik foydalanishni, o'zgarmaslikni afzal ko'rishni va potentsial unumdorlik muammolarini aniqlash uchun komponentlaringizni profillashni unutmang. LWC rivojlanishda davom etar ekan, eng so'nggi xususiyatlar va eng yaxshi amaliyotlardan xabardor bo'lish yuqori unumdorlikdagi veb-ilovalarni yaratish uchun juda muhim bo'ladi.
@track
kuchini qabul qiling va LWCning to'liq salohiyatini oching!