Õppige selgeks JavaScripti koodi tükeldamise edasijõudnud tehnikad, sh marsruudi- ja komponendipõhised lähenemised, parema jõudluse ja kasutajakogemuse saavutamiseks.
JavaScripti koodi tükeldamine edasijõudnutele: marsruudipõhine vs. komponendipõhine
Tänapäeva veebiarenduse maailmas on kiire ja reageeriva kasutajakogemuse pakkumine esmatähtis. Üks võimas tehnika selle saavutamiseks on koodi tükeldamine. Koodi tükeldamine võimaldab teil jaotada oma JavaScripti rakenduse väiksemateks osadeks, laadides ainult selle koodi, mis on vajalik praeguse lehe või komponendi jaoks. See vähendab esialgset laadimisaega, parandab jõudlust ja täiustab üldist kasutajakogemust.
See artikkel süveneb koodi tükeldamise edasijõudnud strateegiatesse, keskendudes konkreetselt marsruudi- ja komponendipõhistele lähenemistele. Uurime nende eeliseid, puudusi ja seda, kuidas neid tõhusalt rakendada populaarsetes JavaScripti raamistikes nagu React, Angular ja Vue.js. Samuti käsitleme globaalsele publikule mõeldud kaalutlusi, tagades ligipääsetavuse ja optimaalse jõudluse sõltumata asukohast.
Miks koodi tükeldamine on oluline
Enne üksikasjadesse süvenemist kordame üle, miks koodi tükeldamine on nii oluline:
- Vähendatud esialgne laadimisaeg: Laadides alguses ainult vajaliku koodi, saavad kasutajad teie rakendusega kiiremini suhelda. Kujutage ette suurt e-kaubanduse saiti nagu Amazon või Alibaba; kogu JavaScripti laadimine iga tootelehe ja funktsiooni jaoks korraga oleks uskumatult aeglane. Koodi tükeldamine tagab, et kasutajad saavad toodete sirvimist kiiresti alustada.
- Parem jõudlus: Väiksemad paketid tähendavad vähem koodi, mida sõeluda ja käivitada, mis viib parema käitusjõudluse ja reageerimisvõimeni. See on eriti märgatav väiksema võimsusega seadmetes või piiratud ribalaiusega võrkudes.
- Täiustatud kasutajakogemus: Kiirem ja reageerivam rakendus tähendab paremat kasutajakogemust, mis suurendab kaasatust ja rahulolu. See on universaalne, sõltumata kasutaja asukohast.
- Tõhus ressursside kasutamine: Koodi tükeldamine võimaldab brauseritel vahemällu salvestada üksikuid osi, nii et järgnevad külastused või rakenduses navigeerimine saavad kasutada vahemällu salvestatud koodi, parandades veelgi jõudlust. Mõelge näiteks globaalsele uudiste veebisaidile; spetsiifiliste jaotiste, nagu sport või äri, koodi saab laadida ainult siis, kui kasutaja nendesse jaotistesse navigeerib.
Marsruudipõhine koodi tükeldamine
Marsruudipõhine koodi tükeldamine hõlmab teie rakenduse koodi jaotamist erinevate marsruutide või lehtede alusel. See on levinud ja suhteliselt lihtne lähenemine. Kui kasutaja navigeerib konkreetsele marsruudile, laaditakse ainult selle marsruudi jaoks vajalik JavaScript.
Rakendamine
Marsruudipõhise koodi tükeldamise konkreetne rakendamine sõltub kasutatavast raamistikust.
React
Reactis saate marsruutide laisklaadimiseks kasutada Reacti enda pakutavaid React.lazy
ja Suspense
komponente.
import React, { Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Home = React.lazy(() => import('./Home'));
const About = React.lazy(() => import('./About'));
const Products = React.lazy(() => import('./Products'));
function App() {
return (
Laadimine...
Selles näites laaditakse komponendid Home
, About
ja Products
laisalt. Komponent Suspense
pakub varu-kasutajaliidest (antud juhul "Laadimine..."), kuni komponente laaditakse.
Näidisstsenaarium: Kujutage ette globaalset sotsiaalmeedia platvormi. Kui kasutaja esimest korda sisse logib, suunatakse ta oma uudisvoogu (Avaleht). Funktsioonide, nagu kasutajaprofiilid (Teave) või turg (Tooted), kood laaditakse alles siis, kui kasutaja nendesse jaotistesse navigeerib, parandades esialgset laadimisaega.
Angular
Angular toetab moodulite laisklaadimist oma ruuteri konfiguratsiooni kaudu. Saate kasutada atribuuti loadChildren
, et määrata moodul, mida tuleks laadida nõudmisel.
// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [
{ path: 'home', loadChildren: () => import('./home/home.module').then(m => m.HomeModule) },
{ path: 'about', loadChildren: () => import('./about/about.module').then(m => m.AboutModule) },
{ path: 'products', loadChildren: () => import('./products/products.module').then(m => m.ProductsModule) },
{ path: '', redirectTo: '/home', pathMatch: 'full' },
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
Selles näites laaditakse HomeModule
, AboutModule
ja ProductsModule
laisalt, kui kasutaja navigeerib vastavatele marsruutidele.
Näidisstsenaarium: Mõelge rahvusvahelise korporatsiooni siseveebiportaalile. Erinevatel osakondadel (nt personal, rahandus, turundus) on oma moodulid. Koodi tükeldamine tagab, et töötajad laadivad alla ainult nende osakondade koodi, millega nad suhtlevad, muutes laadimisprotsessi sujuvamaks.
Vue.js
Vue.js toetab komponentide laisklaadimist, kasutades dünaamilisi importimisi oma ruuteri konfiguratsioonis.
// router.js
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'Home',
component: () => import(/* webpackChunkName: "home" */ '../views/Home.vue')
},
{
path: '/about',
name: 'About',
component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
},
{
path: '/products',
name: 'Products',
component: () => import(/* webpackChunkName: "products" */ '../views/Products.vue')
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
export default router
Siin laaditakse komponendid Home.vue
, About.vue
ja Products.vue
laisalt, kui külastatakse nende vastavaid marsruute. Kommentaar webpackChunkName
aitab Webpackil luua iga komponendi jaoks eraldi tükid.
Näidisstsenaarium: Kujutage ette globaalset veebipõhist haridusplatvormi. Kursuse mooduleid (nt matemaatika, ajalugu, teadus) saab laadida nõudmisel, kui õpilased neile registreeruvad. See lähenemine minimeerib esialgse allalaadimise suurust ja optimeerib kasutajakogemust.
Marsruudipõhise koodi tükeldamise eelised
- Lihtne rakendamine: Suhteliselt lihtne seadistada ja mõista.
- Selge ülesannete eraldamine: Sobib hästi paljude veebirakenduste struktuuriga.
- Parem esialgne laadimisaeg: Märkimisväärne vähenemine esialgu laaditava koodi mahus.
Marsruudipõhise koodi tükeldamise puudused
- Võimalik dubleerimine: Jagatud komponendid või sõltuvused võivad sisalduda mitmes marsruudi tükis, mis viib koodi dubleerimiseni.
- Granulaarsuse piirangud: Ei pruugi olla ideaalne rakendustele, millel on keerulised komponendid, mida jagatakse mitme marsruudi vahel.
Komponendipõhine koodi tükeldamine
Komponendipõhine koodi tükeldamine hõlmab teie rakenduse koodi jaotamist üksikute komponentide, mitte tervete marsruutide alusel. See võimaldab granulaarsemat lähenemist koodi laadimisele, laadides ainult konkreetsete komponentide jaoks vajaliku koodi siis, kui neid vaja on.
Rakendamine
Komponendipõhine koodi tükeldamine on keerulisem kui marsruudipõhine, kuid pakub suuremat paindlikkust ja optimeerimispotentsiaali. Jällegi, rakendamine varieerub sõltuvalt raamistikust.
React
Reactis saate kasutada React.lazy
ja Suspense
'i, et laadida laisalt üksikuid komponente marsruudi või muu komponendi sees.
import React, { Suspense } from 'react';
const MyComponent = React.lazy(() => import('./MyComponent'));
function MyPage() {
return (
Welcome to My Page
Komponendi laadimine... }>