Frontend kodini bo'lish bo'yicha ushbu batafsil qo'llanma yordamida veb-ilova samaradorligini oshiring. React, Vue va Angular uchun amaliy misollar bilan marshrut va komponentga asoslangan strategiyalarni o'rganing.
Frontend Kodini Bo'lish: Marshrut va Komponentga Asoslangan Strategiyalarni Chuqur O'rganish
Zamonaviy raqamli dunyoda foydalanuvchining veb-saytingiz haqidagi ilk taassuroti ko'pincha bitta ko'rsatkich bilan belgilanadi: tezlik. Sekin yuklanuvchi ilova yuqori chiqib ketish ko'rsatkichlariga, hafsalasi pir bo'lgan foydalanuvchilarga va yo'qotilgan daromadga olib kelishi mumkin. Frontend ilovalari murakkablashgani sari ularning hajmini boshqarish muhim vazifaga aylanadi. Aksariyat to'plovchilarning (bundler) sukut bo'yicha ishlash tartibi barcha ilova kodingizni o'z ichiga olgan yagona, monolit JavaScript faylini yaratishdan iborat. Bu shuni anglatadiki, sizning asosiy sahifangizga tashrif buyurgan foydalanuvchi, ehtimol, hech qachon foydalanmaydigan admin paneli, foydalanuvchi profil sozlamalari va xarid qilish jarayoni kodini ham yuklab olishi mumkin.
Aynan shu yerda kodni bo'lish (code splitting) yordamga keladi. Bu sizning katta JavaScript to'plamingizni kichikroq, boshqariladigan qismlarga bo'lish imkonini beruvchi kuchli usuldir, ularni talab bo'yicha yuklash mumkin. Foydalanuvchiga faqat dastlabki ko'rinish uchun kerak bo'lgan kodni yuborish orqali siz yuklanish vaqtini sezilarli darajada yaxshilashingiz, foydalanuvchi tajribasini oshirishingiz va Google Core Web Vitals kabi muhim samaradorlik ko'rsatkichlariga ijobiy ta'sir ko'rsatishingiz mumkin.
Ushbu batafsil qo'llanmada biz frontend kodini bo'lishning ikki asosiy strategiyasini o'rganamiz: marshrutga asoslangan va komponentga asoslangan. Biz har bir yondashuvning nima uchun, qanday va qachon qo'llanilishini React, Vue va Angular kabi mashhur freymvorklardan foydalangan holda amaliy, real misollar bilan chuqur o'rganamiz.
Muammo: Monolit JavaScript To'plami
Tasavvur qiling, siz bir nechta manzillarni o'z ichiga olgan sayohat uchun narsalaringizni yig'yapsiz: plyaj ta'tili, tog' sayohati va rasmiy biznes anjumani. Monolit yondashuv suzish kiyimi, sayr etigi va ish kostyumini bitta ulkan chamadonga sig'dirishga urinishga o'xshaydi. Plyajga yetib kelganingizda, faqat suzish kiyimi kerak bo'lsa ham, bu ulkan chamadonni o'zingiz bilan olib yurishingizga to'g'ri keladi. Bu og'ir, samarasiz va noqulay.
Monolit JavaScript to'plami veb-ilova uchun shunga o'xshash muammolarni keltirib chiqaradi:
- Haddan tashqari yuqori dastlabki yuklanish vaqti: Brauzer foydalanuvchi biror narsani ko'rishi yoki u bilan ishlashi uchun butun ilova kodini yuklab olishi, tahlil qilishi va bajarishi kerak. Bu sekin tarmoqlarda yoki kam quvvatli qurilmalarda bir necha soniya vaqt olishi mumkin.
- Behuda sarflangan trafik: Foydalanuvchilar hech qachon foydalanmaydigan funksiyalar kodini yuklab oladilar, bu ularning ma'lumotlar paketlarini keraksiz sarflashiga olib keladi. Bu, ayniqsa, qimmat yoki cheklangan internetga ega mintaqalardagi mobil foydalanuvchilar uchun muammodir.
- Kesh samaradorligining pastligi: Biror funksiyadagi bitta kod satriga kiritilgan kichik o'zgartirish butun to'plam keshini yaroqsiz holga keltiradi. Keyin foydalanuvchi, hatto 99% o'zgarmagan bo'lsa ham, butun ilovani qayta yuklab olishga majbur bo'ladi.
- Core Web Vitals'ga salbiy ta'sir: Katta to'plamlar Largest Contentful Paint (LCP) va Time to Interactive (TTI) kabi ko'rsatkichlarga bevosita zarar yetkazadi, bu esa saytingizning SEO reytingi va foydalanuvchi mamnuniyatiga ta'sir qilishi mumkin.
Kodnii bo'lish bu muammoning yechimidir. Bu uchta alohida, kichikroq sumkani yig'ishga o'xshaydi: biri plyaj uchun, biri tog'lar uchun va yana biri anjuman uchun. Siz faqat kerak bo'lganda, kerakli narsani olasiz.
Yechim: Kodni Bo'lish Nima?
Kodnii bo'lish - bu ilovangiz kodini turli to'plamlarga yoki "qismlarga" (chunks) bo'lish jarayoni bo'lib, ularni keyinchalik talab bo'yicha yoki parallel ravishda yuklash mumkin. Bitta katta `app.js` o'rniga sizda `main.js`, `dashboard.chunk.js`, `profile.chunk.js` va hokazolar bo'lishi mumkin.
Webpack, Vite va Rollup kabi zamonaviy yig'ish vositalari bu jarayonni juda osonlashtirdi. Ular modullarni asinxron ravishda import qilish imkonini beruvchi zamonaviy JavaScript (ECMAScript) xususiyati bo'lgan dinamik `import()` sintaksisidan foydalanadilar. To'plovchi `import()` ni ko'rganda, u avtomatik ravishda ushbu modul va uning bog'liqliklari uchun alohida qism yaratadi.
Keling, kodni bo'lishni amalga oshirishning eng keng tarqalgan va samarali ikki strategiyasini ko'rib chiqaylik.
1-Strategiya: Marshrutga Asoslangan Kodni Bo'lish
Marshrutga asoslangan bo'lish - bu eng tushunarli va keng qo'llaniladigan kodni bo'lish strategiyasidir. Mantiq oddiy: agar foydalanuvchi `/home` sahifasida bo'lsa, ularga `/dashboard` yoki `/settings` sahifalari kodi kerak emas. Ilovangiz marshrutlari bo'yicha kodingizni bo'lish orqali siz foydalanuvchilar faqat o'zlari ko'rayotgan sahifa kodini yuklab olishlarini ta'minlaysiz.
Bu Qanday Ishlaydi
Siz ilovangizning routerini ma'lum bir marshrut bilan bog'liq komponentni dinamik ravishda yuklash uchun sozlayapsiz. Foydalanuvchi ushbu marshrutga birinchi marta o'tganda, router tegishli JavaScript qismini olish uchun tarmoq so'rovini yuboradi. Yuklangandan so'ng, komponent render qilinadi va qism keyingi tashriflar uchun brauzer tomonidan keshlanadi.
Marshrutga Asoslangan Bo'lishning Afzalliklari
- Dastlabki yuklanishni sezilarli darajada kamaytirish: Dastlabki to'plam faqat asosiy ilova mantig'ini va standart marshrut (masalan, asosiy sahifa) uchun kodni o'z ichiga oladi, bu esa uni ancha kichikroq va tezroq yuklanishini ta'minlaydi.
- Amalga oshirish oson: Aksariyat zamonaviy marshrutlash kutubxonalari kechiktirib yuklashni (lazy loading) o'rnatilgan holda qo'llab-quvvatlaydi, bu esa amalga oshirishni soddalashtiradi.
- Aniq mantiqiy chegaralar: Marshrutlar kodingiz uchun tabiiy va aniq ajratish nuqtalarini taqdim etadi, bu esa ilovangizning qaysi qismlari bo'linayotganini tushunishni osonlashtiradi.
Amalga Oshirish Misollari
React va React Router
React buning uchun ikkita asosiy vositani taqdim etadi: `React.lazy()` va `
React Router yordamida `App.js` misoli:
import React, { Suspense, lazy } from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
// Har doim kerak bo'ladigan komponentlarni statik import qilish
import Navbar from './components/Navbar';
import LoadingSpinner from './components/LoadingSpinner';
// Marshrut komponentlarini kechiktirib import qilish
const HomePage = lazy(() => import('./pages/HomePage'));
const DashboardPage = lazy(() => import('./pages/DashboardPage'));
const SettingsPage = lazy(() => import('./pages/SettingsPage'));
const NotFoundPage = lazy(() => import('./pages/NotFoundPage'));
function App() {
return (
<Router>
<Navbar />
<Suspense fallback={<LoadingSpinner />}>
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/dashboard" element={<DashboardPage />} />
<Route path="/settings" element={<SettingsPage />} />
<Route path="*" element={<NotFoundPage />} />
</Routes>
</Suspense>
</Router>
);
}
export default App;
Ushbu misolda, `DashboardPage` va `SettingsPage` uchun kod dastlabki to'plamga kiritilmaydi. U faqat foydalanuvchi `/dashboard` yoki `/settings` ga o'tganda serverdan olinadi. `Suspense` komponenti ushbu yuklanish paytida `LoadingSpinner` ni ko'rsatib, silliq foydalanuvchi tajribasini ta'minlaydi.
Vue va Vue Router
Vue Router marshrut konfiguratsiyasida to'g'ridan-to'g'ri dinamik `import()` sintaksisidan foydalanib, marshrutlarni kechiktirib yuklashni qo'llab-quvvatlaydi.
Vue Router yordamida `router/index.js` misoli:
import { createRouter, createWebHistory } from 'vue-router';
import HomeView from '../views/HomeView.vue'; // Dastlabki yuklanish uchun statik import qilingan
const routes = [
{
path: '/',
name: 'home',
component: HomeView
},
{
path: '/about',
name: 'about',
// Marshrut darajasida kodni bo'lish
// Bu marshrut uchun alohida qism (about.[hash].js) yaratadi
// va u marshrutga tashrif buyurilganda kechiktirib yuklanadi.
component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
},
{
path: '/dashboard',
name: 'dashboard',
component: () => import(/* webpackChunkName: "dashboard" */ '../views/DashboardView.vue')
}
];
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
});
export default router;
Bu yerda, `/about` va `/dashboard` marshrutlari uchun komponent dinamik importni qaytaradigan funksiya sifatida belgilanadi. To'plovchi buni tushunadi va alohida qismlar yaratadi. `/* webpackChunkName: "about" */` bu Webpack'ga hosil bo'ladigan qismni umumiy ID o'rniga `about.js` deb nomlashni aytadigan "sehrli izoh"dir, bu disk raskadrovka uchun foydali bo'lishi mumkin.
Angular va Angular Router
Angular routeri butun modullarni kechiktirib yuklashni yoqish uchun marshrut konfiguratsiyasidagi `loadChildren` xususiyatidan foydalanadi.
`app-routing.module.ts` misoli:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component'; // Asosiy to'plamning bir qismi
const routes: Routes = [
{
path: '',
component: HomeComponent
},
{
path: 'products',
// ProductsModule'ni kechiktirib yuklash
loadChildren: () => import('./products/products.module').then(m => m.ProductsModule)
},
{
path: 'admin',
// AdminModule'ni kechiktirib yuklash
loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule)
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
Ushbu Angular misolida, `products` va `admin` funksiyalariga oid kod o'z modullari (`ProductsModule` va `AdminModule`) ichiga joylashtirilgan. `loadChildren` sintaksisi Angular routeriga faqat foydalanuvchi `/products` yoki `/admin` bilan boshlanadigan URL manziliga o'tganda ushbu modullarni yuklash va ishga tushirishni buyuradi.
2-Strategiya: Komponentga Asoslangan Kodni Bo'lish
Marshrutga asoslangan bo'lish ajoyib boshlang'ich nuqta bo'lsa-da, komponentga asoslangan bo'lish bilan samaradorlikni optimallashtirishni yanada yuqori darajaga olib chiqishingiz mumkin. Ushbu strategiya komponentlarni faqat ular ma'lum bir ko'rinishda kerak bo'lganda, ko'pincha foydalanuvchi o'zaro ta'siriga javoban yuklashni o'z ichiga oladi.
Darhol ko'rinmaydigan yoki kamdan-kam ishlatiladigan komponentlar haqida o'ylang. Nima uchun ularning kodi dastlabki sahifa yuklanishining bir qismi bo'lishi kerak?
Komponentga Asoslangan Bo'lishning Keng Tarqalgan Foydalanish Holatlari
- Modallar va Dialoglar: Murakkab modal (masalan, foydalanuvchi profilini tahrirlovchi) uchun kod faqat foydalanuvchi uni ochish uchun tugmani bosganda yuklanishi kerak.
- Sahifaning Pastki Qismidagi Tarkib: Uzun asosiy sahifa uchun, sahifaning ancha pastida joylashgan murakkab komponentlar faqat foydalanuvchi ularga yaqinlashganda yuklanishi mumkin.
- Murakkab UI Elementlari: Interaktiv diagrammalar, sana tanlagichlar yoki rich text muharrirlari kabi og'ir komponentlar, ular joylashgan sahifaning dastlabki render qilinishini tezlashtirish uchun kechiktirib yuklanishi mumkin.
- Funksiya Bayroqlari yoki A/B Testlari: Komponentni faqat foydalanuvchi uchun ma'lum bir funksiya bayrog'i yoqilgan bo'lsa yuklang.
- Rolga Asoslangan UI: Boshqaruv panelidagi admin uchun maxsus komponent faqat 'admin' roliga ega foydalanuvchilar uchun yuklanishi kerak.
Amalga Oshirish Misollari
React
Siz xuddi o'sha `React.lazy` va `Suspense` naqshidan foydalanishingiz mumkin, lekin render qilishni ilova holatiga qarab shartli ravishda ishga tushirishingiz mumkin.
Kechiktirib yuklanadigan modal misoli:
import React, { useState, Suspense, lazy } from 'react';
import LoadingSpinner from './components/LoadingSpinner';
// Modal komponentini kechiktirib import qilish
const EditProfileModal = lazy(() => import('./components/EditProfileModal'));
function UserProfilePage() {
const [isModalOpen, setIsModalOpen] = useState(false);
const openModal = () => {
setIsModalOpen(true);
};
const closeModal = () => {
setIsModalOpen(false);
};
return (
<div>
<h1>Foydalanuvchi Profili</h1>
<p>Bu yerda ba'zi foydalanuvchi ma'lumotlari...</p>
<button onClick={openModal}>Profilni Tahrirlash</button>
{/* Modal komponenti va uning kodi faqat isModalOpen true bo'lganda yuklanadi */}
{isModalOpen && (
<Suspense fallback={<LoadingSpinner />}>
<EditProfileModal onClose={closeModal} />
</Suspense>
)}
</div>
);
}
export default UserProfilePage;
Ushbu stsenariyda, `EditProfileModal.js` uchun JavaScript qismi faqat foydalanuvchi "Profilni Tahrirlash" tugmasini birinchi marta bosganidan keyin serverdan so'raladi.
Vue
Vue'ning `defineAsyncComponent` funksiyasi buning uchun juda mos keladi. U sizga faqat render qilinganda yuklanadigan komponent atrofida o'ram yaratish imkonini beradi.
Kechiktirib yuklanadigan diagramma komponenti misoli:
<template>
<div>
<h1>Sotuvlar Paneli</h1>
<button @click="showChart = true" v-if="!showChart">Sotuvlar Diagrammasini Ko'rsatish</button>
<!-- SalesChart komponenti faqat showChart true bo'lganda yuklanadi va render qilinadi -->
<SalesChart v-if="showChart" />
</div>
</template>
<script setup>
import { ref, defineAsyncComponent } from 'vue';
const showChart = ref(false);
// Asinxron komponentni aniqlash. Og'ir diagramma kutubxonasi o'z qismida bo'ladi.
const SalesChart = defineAsyncComponent(() =>
import('../components/SalesChart.vue')
);
</script>
Bu yerda, potensial og'ir `SalesChart` komponenti (va uning diagramma kutubxonasi kabi bog'liqliklari) uchun kod ajratilgan. U faqat foydalanuvchi tugmani bosish orqali aniq so'rov yuborganda yuklab olinadi va o'rnatiladi.
Ilg'or Texnikalar va Naqshlar
Marshrut va komponentga asoslangan bo'lishning asoslarini o'zlashtirganingizdan so'ng, foydalanuvchi tajribasini yanada takomillashtirish uchun ilg'or texnikalardan foydalanishingiz mumkin.
Qismlarni Oldindan Yuklash (Preloading) va Oldindan Olish (Prefetching)
Keyingi marshrut kodini olishdan oldin foydalanuvchining havolani bosishini kutish kichik bir kechikishga olib kelishi mumkin. Biz kodni oldindan yuklab, bu borada aqlliroq harakat qilishimiz mumkin.
- Oldindan olish (Prefetching): Bu brauzerga o'zining bo'sh vaqtida manbani olishni aytadi, chunki foydalanuvchi unga kelajakdagi navigatsiya uchun kerak bo'lishi mumkin. Bu past ustuvorlikdagi ishora. Masalan, foydalanuvchi tizimga kirgandan so'ng, siz boshqaruv paneli kodini oldindan olishingiz mumkin, chunki ular keyingi qadamda u yerga borishlari ehtimoli yuqori.
- Oldindan yuklash (Preloading): Bu brauzerga manbani yuqori ustuvorlik bilan olishni aytadi, chunki u joriy sahifa uchun kerak, lekin uni topish kechiktirilgan (masalan, CSS faylining chuqurida aniqlangan shrift). Kodni bo'lish kontekstida, foydalanuvchi havola ustiga sichqonchani olib borganida qismni oldindan yuklashingiz mumkin, bu esa ular bosganida navigatsiyani bir zumda sodir bo'lgandek his qildiradi.
Webpack va Vite kabi to'plovchilar buni "sehrli izohlar" yordamida amalga oshirishga imkon beradi:
// Prefetch: ehtimoliy keyingi sahifalar uchun yaxshi
import(/* webpackPrefetch: true, webpackChunkName: "dashboard" */ './pages/DashboardPage');
// Preload: joriy sahifadagi yuqori ishonchli keyingi o'zaro ta'sirlar uchun yaxshi
const openModal = () => {
import(/* webpackPreload: true, webpackChunkName: "profile-modal" */ './components/ProfileModal');
// ... keyin modalni ochish
}
Yuklanish va Xatolik Holatlarini Boshqarish
Tarmoq orqali kodni yuklash muvaffaqiyatsiz tugashi mumkin bo'lgan asinxron operatsiyadir. Mustahkam amalga oshirish buni hisobga olishi kerak.
- Yuklanish Holatlari: Qism yuklanayotganda foydalanuvchiga doimo fikr-mulohaza bildiring. Bu UI'ning javob bermayotgandek tuyulishining oldini oladi. Skeletlar (yakuniy maketni taqlid qiluvchi joy egalari) ko'pincha umumiy spinnerlardan ko'ra yaxshiroq foydalanuvchi tajribasini taqdim etadi. React'ning `
` komponenti buni osonlashtiradi. Vue va Angular'da yuklanish bayrog'i bilan `v-if`/`ngIf` dan foydalanishingiz mumkin. - Xatolik Holatlari: Agar foydalanuvchi beqaror tarmoqda bo'lsa va JavaScript qismi yuklanmasa nima bo'ladi? Ilovangiz ishdan chiqmasligi kerak. Kechiktirib yuklangan komponentlaringizni Xatolik Chegarasi (React'da Error Boundary) ichiga o'rang yoki muvaffaqiyatsizlikni chiroyli tarzda boshqarish uchun dinamik import promise'ida `.catch()` dan foydalaning. Siz xato xabarini va "Qayta urinish" tugmasini ko'rsatishingiz mumkin.
React Xatolik Chegarasi Misoli:
import { ErrorBoundary } from 'react-error-boundary';
function MyComponent() {
return (
<ErrorBoundary
FallbackComponent={({ error, resetErrorBoundary }) => (
<div>
<p>Voy! Komponentni yuklashda xatolik yuz berdi.</p>
<button onClick={resetErrorBoundary}>Qayta urinib ko'ring</button>
</div>
)}
>
<Suspense fallback={<Spinner />}>
<MyLazyLoadedComponent />
</Suspense>
</ErrorBoundary>
);
}
Asboblar va Tahlil
Siz o'lchay olmaydigan narsani optimallashtira olmaysiz. Zamonaviy frontend vositalari ilovangiz to'plamlarini vizualizatsiya qilish va tahlil qilish uchun ajoyib yordamchi dasturlarni taqdim etadi.
- Webpack Bundle Analyzer: Ushbu vosita sizning chiqish to'plamlaringizning daraxt xaritasi vizualizatsiyasini yaratadi. U har bir qism ichida nima borligini aniqlash, katta yoki takrorlanadigan bog'liqliklarni topish va kodni bo'lish strategiyangiz kutilganidek ishlayotganini tekshirish uchun bebahodir.
- Vite (Rollup Plugin Visualizer): Vite foydalanuvchilari `rollup-plugin-visualizer` yordamida o'zlarining to'plam tarkibining shunga o'xshash interaktiv diagrammasini olishlari mumkin.
To'plamlaringizni muntazam ravishda tahlil qilib, siz keyingi optimallashtirish uchun imkoniyatlarni aniqlashingiz mumkin. Masalan, `moment.js` yoki `lodash` kabi katta kutubxona bir nechta qismlarga kiritilayotganini aniqlashingiz mumkin. Bu uni umumiy `vendors` qismiga o'tkazish yoki yengilroq muqobilini topish uchun imkoniyat bo'lishi mumkin.
Eng Yaxshi Amaliyotlar va Umumiy Xatolar
Kodnii bo'lish kuchli bo'lsa-da, bu har qanday muammoning yechimi emas. Uni noto'g'ri qo'llash ba'zan samaradorlikka zarar yetkazishi mumkin.
- Haddan tashqari ko'p bo'lmang: Juda ko'p mayda qismlarni yaratish samarasiz bo'lishi mumkin. Har bir qism alohida HTTP so'rovini talab qiladi va bu so'rovlarning qo'shimcha yuki, ayniqsa yuqori kechikishli mobil tarmoqlarda, kichikroq fayl hajmining afzalliklaridan ustun kelishi mumkin. Muvozanatni toping. Marshrutlardan boshlang va keyin strategik ravishda faqat eng katta yoki eng kam ishlatiladigan komponentlarni ajratib oling.
- Foydalanuvchi Yo'nalishlarini Tahlil qiling: Kodingizni foydalanuvchilar ilovangizda qanday harakatlanishiga qarab bo'ling. Agar foydalanuvchilarning 95% tizimga kirish sahifasidan to'g'ridan-to'g'ri boshqaruv paneliga o'tsa, tizimga kirish sahifasida boshqaruv paneli kodini oldindan olishni o'ylab ko'ring.
- Umumiy Bog'liqliklarni Guruppa qiling: Aksariyat to'plovchilar bir nechta marshrutlarda ishlatiladigan kutubxonalar uchun avtomatik ravishda umumiy `vendors` qismini yaratish strategiyalariga ega (masalan, Webpack'ning `SplitChunksPlugin`). Bu takrorlanishning oldini oladi va keshlashni yaxshilaydi.
- Cumulative Layout Shift (CLS) ga e'tibor bering: Komponentlarni yuklayotganda, yuklanish holatingiz (masalan, skelet) yakuniy komponent bilan bir xil joyni egallashiga ishonch hosil qiling. Aks holda, komponent yuklanganda sahifa tarkibi siljiydi, bu esa yomon CLS ko'rsatkichiga olib keladi.
Xulosa: Hamma Uchun Tezroq Veb
Kodnii bo'lish endi ilg'or, tor doiradagi texnika emas; bu zamonaviy, yuqori samarali veb-ilovalarni yaratish uchun asosiy talabdir. Yagona monolit to'plamdan voz kechib, talab bo'yicha yuklashni qo'llash orqali siz foydalanuvchilaringizga ularning qurilmasi yoki tarmoq sharoitlaridan qat'i nazar, sezilarli darajada tezroq va sezgir tajriba taqdim etishingiz mumkin.
Marshrutga asoslangan kodni bo'lish bilan boshlang — bu eng katta dastlabki samaradorlik yutug'ini ta'minlaydigan oson erishiladigan natijadir. Bu amalga oshirilgandan so'ng, ilovangizni to'plam analizatori bilan tahlil qiling va komponentga asoslangan bo'lish uchun nomzodlarni aniqlang. Ilovangizning yuklanish samaradorligini yanada takomillashtirish uchun katta, interaktiv yoki kamdan-kam ishlatiladigan komponentlarga e'tibor qarating.
Ushbu strategiyalarni o'ylab qo'llash orqali siz nafaqat veb-saytingizni tezlashtirasiz; siz vebni global auditoriya uchun yanada qulay va yoqimli qilasiz, bir vaqtning o'zida bir qism bilan.