Async კომპონენტები საშუალებას გაძლევთ კომპონენტის კოდი ჩატვირთოთ მხოლოდ მაშინ, როდესაც ის ნამდვილად საჭიროა, ის ცალკე bundle-ში (chunk-ში) გახლიჩავთ, რომელიც მოთხოვნის საფუძველზე იტვირთება. ეს ამცირებს იმ საწყის JavaScript-ს, რომელიც მომხმარებელი ჩამოტვირთავს.
Async კომპონენტის განსაზღვრა
import { defineAsyncComponent } from "vue";
// the component's code is only downloaded when it first renders
const HeavyChart = defineAsyncComponent(() =>
import("./HeavyChart.vue") // dynamic import → separate chunk
);
დინამიური import() ეუბნება bundler-ს (Vite/webpack) დაყოს HeavyChart.vue საკუთარი ფაილში, რომელიც lazy იტვირთება პირველი ჯერ, როდესაც კომპონენტი გამოიყენება — არა main bundle-ის ნაწილად.
რატომ აქვს ეს მნიშვნელობა performance-ისთვის
Without lazy loading: main.js = app + HeavyChart + Editor + Modal + ... (huge, slow first load)
With lazy loading: main.js = app only; HeavyChart.js loads when you open the chart
დიდი, იშვიათად გამოყენებული კომპონენტები (rich-text ედიტორები, დიაგრამები, მოდალები, admin პანელები) არ უნდა იყოს საწყის ჩამოტვირთვაში. მათი lazy-loading ბეტერი ხდის საწყის load time-ს და Core Web Vitals-ს.
Loading და error states-ის დამუშავება
const HeavyChart = defineAsyncComponent({
loader: () => import("./HeavyChart.vue"),
loadingComponent: LoadingSpinner, // shown while the chunk downloads
errorComponent: ErrorDisplay, // shown if the download fails
delay: 200, // wait 200ms before showing the spinner
timeout: 5000, // give up after 5s
});
ეს advanced ფორმა გაძლევთ საშუალებას აჩვენოთ spinner fetch დროს და fallback failure-ზე — მნიშვნელოვანი, რადგან lazy loading შემოაქვს (ჩვეულებრივ, მოკლე) ქსელის დაკვიანებას.
Common pairing: route-level code splitting
// Vue Router — each route loads its page component on demand
const routes = [
{ path: "/dashboard", component: () => import("./Dashboard.vue") },
];
Route კომპონენტების lazy-loading ყველაზე გავრცელებული და ეფექტური გამოყენება — თითოეული გვერდის კოდი იტვირთება მხოლოდ მაშინ, როდესაც მომხმარებელი მას გადახვევს.
რატომ აქვს ეს მნიშვნელობა
Async კომპონენტები Vue-ის მექანიზმია code splitting-ისთვის — საკვანძო ტექნიკა საწყის bundle-ის მცირე დასაჩერებლად, როგორც აპი იზრდება.
भარი ან route-specific კომპონენტების მოთხოვნის საფუძველზე ჩატვირთვით (არჩევითი loading/error UI-ით), თქვენ ამცირებთ JavaScript-ს, რომელსაც მომხმარებელი საწყოდ ჩამოტვირთავს, აჩქარებთ პირველ load-ს.
ეს სტანდარტული, მაღალი ზემოქმედების performance optimization-ია, განსაკუთრებით როდესაც applied იქნება routes-ზე.
