JavaScriptã³ãŒãåå²äžçŽç·šïŒã«ãŒãããŒã¹ vs. ã³ã³ããŒãã³ãããŒã¹ | MLOG | MLOGæ¥æ¬èª
ã«ãŒãããŒã¹ããã³ã³ã³ããŒãã³ãããŒã¹ã®ã¢ãããŒããå«ããé«åºŠãªJavaScriptã³ãŒãå岿è¡ããã¹ã¿ãŒããããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸãããã
JavaScriptã³ãŒãåå²äžçŽç·šïŒã«ãŒãããŒã¹ vs. ã³ã³ããŒãã³ãããŒã¹
çŸä»£ã®Webéçºã®äžçã§ã¯ãé«éã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšãæãéèŠã§ãããããéæããããã®åŒ·åãªãã¯ããã¯ã®äžã€ãã³ãŒãåå²ã§ããã³ãŒãåå²ã«ãããJavaScriptã¢ããªã±ãŒã·ã§ã³ãããå°ããªãã£ã³ã¯ïŒå¡ïŒã«åå²ããçŸåšã®ããŒãžãã³ã³ããŒãã³ãã«å¿
èŠãªã³ãŒãã®ã¿ãèªã¿èŸŒãããšãã§ããŸããããã«ãããåæèªã¿èŸŒã¿æéãççž®ãããããã©ãŒãã³ã¹ãåäžããå
šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã匷åãããŸãã
ãã®èšäºã§ã¯ãç¹ã«ã«ãŒãããŒã¹ãšã³ã³ããŒãã³ãããŒã¹ã®ã¢ãããŒãã«çŠç¹ãåœãŠãé«åºŠãªã³ãŒãå岿Šç¥ãæãäžããŸããReactãAngularãVue.jsãšãã£ã人æ°ã®JavaScriptãã¬ãŒã ã¯ãŒã¯ã§ãããããã®å©ç¹ãæ¬ ç¹ããããŠå¹æçã«å®è£
ããæ¹æ³ãæ¢ããŸãããŸããã°ããŒãã«ãªå©çšè
ãèæ
®ããå Žæã«é¢ãããã¢ã¯ã»ã·ããªãã£ãšæé©ãªããã©ãŒãã³ã¹ã確ä¿ããããã®æ³šæç¹ãæ¢ããŸãã
ãªãã³ãŒãåå²ãéèŠãªã®ã
詳现ã«å
¥ãåã«ããªãã³ãŒãåå²ãããã»ã©éèŠãªã®ããå確èªããŸãããã
- åæèªã¿èŸŒã¿æéã®ççž®ïŒæåã«å¿
èŠãªã³ãŒãã®ã¿ãèªã¿èŸŒãããšã§ããŠãŒã¶ãŒã¯ããéãã¢ããªã±ãŒã·ã§ã³ãæäœã§ããŸããAmazonãAlibabaã®ãããªå€§èŠæš¡ãªEã³ããŒã¹ãµã€ããæ³åããŠã¿ãŠãã ããããã¹ãŠã®ååããŒãžãæ©èœã®JavaScriptãäžåºŠã«èªã¿èŸŒãã®ã¯ãä¿¡ããããªãã»ã©é
ããªãã§ããããã³ãŒãåå²ã¯ããŠãŒã¶ãŒãè¿
éã«ååã®é²èЧãéå§ã§ããããã«ããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒãã³ãã«ãå°ãããšããããšã¯ãè§£æã»å®è¡ããã³ãŒããå°ãªãããšãæå³ããã©ã³ã¿ã€ã ã®ããã©ãŒãã³ã¹ãšå¿çæ§ã®åäžã«ã€ãªãããŸããããã¯ç¹ã«ãäœã¹ããã¯ã®ããã€ã¹ã垯åå¹
ãéããããããã¯ãŒã¯ã§é¡èã§ãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åŒ·åïŒããéããããå¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ã¯ãããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããããšã³ã²ãŒãžã¡ã³ããšæºè¶³åºŠã®åäžããããããŸããããã¯ãŠãŒã¶ãŒã®å Žæã«é¢ãããæ®éçãªããšã§ãã
- å¹ççãªãªãœãŒã¹å©çšïŒã³ãŒãåå²ã«ããããã©ãŠã¶ã¯åã
ã®ãã£ã³ã¯ããã£ãã·ã¥ã§ããŸãããã®ãããå蚪åæãã¢ããªã±ãŒã·ã§ã³å
ã®ããã²ãŒã·ã§ã³æã«ãã£ãã·ã¥ãããã³ãŒããæŽ»çšããããã©ãŒãã³ã¹ãããã«åäžãããããšãã§ããŸããã°ããŒãã«ãªãã¥ãŒã¹ãµã€ããèããŠã¿ãŸããããã¹ããŒããããžãã¹ãšãã£ãç¹å®ã®ã»ã¯ã·ã§ã³ã®ã³ãŒãã¯ããŠãŒã¶ãŒããããã®ã»ã¯ã·ã§ã³ã«ç§»åãããšãã«ã®ã¿èªã¿èŸŒãŸããŸãã
ã«ãŒãããŒã¹ã®ã³ãŒãåå²
ã«ãŒãããŒã¹ã®ã³ãŒãåå²ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããç°ãªãã«ãŒããããŒãžã«åºã¥ããŠåå²ããææ³ã§ããããã¯äžè¬çã§ãæ¯èŒçåãããããã¢ãããŒãã§ãããŠãŒã¶ãŒãç¹å®ã®ã«ãŒãã«ç§»åãããšããã®ã«ãŒãã«å¿
èŠãªJavaScriptã®ã¿ãèªã¿èŸŒãŸããŸãã
å®è£
ã«ãŒãããŒã¹ã®ã³ãŒãåå²ã®å
·äœçãªå®è£
æ¹æ³ã¯ã䜿çšããŠãããã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠç°ãªããŸãã
React
Reactã§ã¯ãReactèªäœãæäŸããReact.lazy
ãšSuspense
ã³ã³ããŒãã³ãã䜿çšããŠãã«ãŒããé
å»¶èªã¿èŸŒã¿ã§ããŸãã
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 (
Loading...
}>
);
}
export default App;
ãã®äŸã§ã¯ãHome
ãAbout
ãProducts
ã³ã³ããŒãã³ããé
å»¶èªã¿èŸŒã¿ãããŸããSuspense
ã³ã³ããŒãã³ãã¯ãã³ã³ããŒãã³ããèªã¿èŸŒãŸããŠããéã«ãã©ãŒã«ããã¯çšã®UIïŒãã®å Žå㯠"Loading..."ïŒãæäŸããŸãã
ã·ããªãªäŸïŒã°ããŒãã«ãªãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ãæ³åããŠãã ããããŠãŒã¶ãŒãæåã«ãã°ã€ã³ãããšããã¥ãŒã¹ãã£ãŒãïŒHomeïŒã«èªå°ãããŸãããŠãŒã¶ãŒãããã£ãŒã«ïŒAboutïŒãããŒã±ãããã¬ã€ã¹ïŒProductsïŒã®ãããªæ©èœã®ã³ãŒãã¯ããŠãŒã¶ãŒããããã®ã»ã¯ã·ã§ã³ã«ç§»åãããšãã«ã®ã¿èªã¿èŸŒãŸããåæèªã¿èŸŒã¿æéãæ¹åããŸãã
Angular
Angularã¯ãã«ãŒã¿ãŒã®èšå®ãéããŠã¢ãžã¥ãŒã«ã®é
å»¶èªã¿èŸŒã¿ããµããŒãããŠããŸããloadChildren
ããããã£ã䜿çšããŠããªã³ããã³ãã§èªã¿èŸŒãã¹ãã¢ãžã¥ãŒã«ãæå®ã§ããŸãã
// 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 { }
ãã®äŸã§ã¯ãHomeModule
ãAboutModule
ãProductsModule
ã¯ããŠãŒã¶ãŒãããããã®ã«ãŒãã«ç§»åãããšãã«é
å»¶èªã¿èŸŒã¿ãããŸãã
ã·ããªãªäŸïŒå€åœç±äŒæ¥å
ã®WebããŒã¿ã«ãèããŠã¿ãŸããããç°ãªãéšéïŒäŸïŒäººäºã財åãããŒã±ãã£ã³ã°ïŒãç¬èªã®ã¢ãžã¥ãŒã«ãæã£ãŠããŸããã³ãŒãåå²ã«ãããåŸæ¥å¡ã¯èªåãé¢ããéšéã®ã³ãŒãã®ã¿ãããŠã³ããŒãããããšã«ãªããèªã¿èŸŒã¿ããã»ã¹ãå¹çåãããŸãã
Vue.js
Vue.jsã¯ãã«ãŒã¿ãŒèšå®ã§ã®åçã€ã³ããŒãã䜿çšããŠãã³ã³ããŒãã³ãã®é
å»¶èªã¿èŸŒã¿ããµããŒãããŠããŸãã
// 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
ããã§ã¯ãHome.vue
ãAbout.vue
ãProducts.vue
ã³ã³ããŒãã³ãã¯ãããããã®ã«ãŒãã蚪åããããšãã«é
å»¶èªã¿èŸŒã¿ãããŸããwebpackChunkName
ã³ã¡ã³ãã¯ãWebpackãåã³ã³ããŒãã³ãã«å¯ŸããŠåå¥ã®ãã£ã³ã¯ãäœæããã®ã«åœ¹ç«ã¡ãŸãã
ã·ããªãªäŸïŒã°ããŒãã«ãªãªã³ã©ã€ã³æè²ãã©ãããã©ãŒã ãæ³åããŠã¿ãŠãã ãããã³ãŒã¹ã¢ãžã¥ãŒã«ïŒäŸïŒæ°åŠãæŽå²ãç§åŠïŒã¯ãåŠçããããã«ç»é²ããã«ã€ããŠãªã³ããã³ãã§èªã¿èŸŒãããšãã§ããŸãããã®ã¢ãããŒãã¯ãåæããŠã³ããŒããµã€ãºãæå°éã«æãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæé©åããŸãã
ã«ãŒãããŒã¹ã®ã³ãŒãåå²ã®å©ç¹
- ã·ã³ãã«ãªå®è£
ïŒã»ããã¢ãããæ¯èŒçç°¡åã§çè§£ããããã§ãã
- é¢å¿äºã®æç¢ºãªåé¢ïŒå€ãã®Webã¢ããªã±ãŒã·ã§ã³ã®æ§é ãšããŸãåèŽããŸãã
- åæèªã¿èŸŒã¿æéã®æ¹åïŒæåã«èªã¿èŸŒãŸããã³ãŒãéã倧å¹
ã«åæžããŸãã
ã«ãŒãããŒã¹ã®ã³ãŒãåå²ã®æ¬ ç¹
- éè€ã®å¯èœæ§ïŒå
±æã³ã³ããŒãã³ããäŸåé¢ä¿ãè€æ°ã®ã«ãŒããã£ã³ã¯ã«å«ãŸããã³ãŒãã®éè€ã«ã€ãªããå¯èœæ§ããããŸãã
- ç²åºŠã®å¶éïŒè€æ°ã®ã«ãŒãã§å
±æãããè€éãªã³ã³ããŒãã³ããæã€ã¢ããªã±ãŒã·ã§ã³ã«ã¯çæ³çã§ã¯ãªãå ŽåããããŸãã
ã³ã³ããŒãã³ãããŒã¹ã®ã³ãŒãåå²
ã³ã³ããŒãã³ãããŒã¹ã®ã³ãŒãåå²ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããã«ãŒãå
šäœã§ã¯ãªããåã
ã®ã³ã³ããŒãã³ãã«åºã¥ããŠåå²ããææ³ã§ããããã«ãããã³ãŒãã®èªã¿èŸŒã¿ã«å¯ŸããŠãããã现ããã¢ãããŒããå¯èœã«ãªããç¹å®ã®ã³ã³ããŒãã³ããå¿
èŠã«ãªã£ããšãã«ããã®ã³ã³ããŒãã³ãã«å¿
èŠãªã³ãŒãã®ã¿ãèªã¿èŸŒãããšãã§ããŸãã
å®è£
ã³ã³ããŒãã³ãããŒã¹ã®ã³ãŒãåå²ã¯ãã«ãŒãããŒã¹ã®åå²ãããè€éã§ããããã倧ããªæè»æ§ãšæé©åã®å¯èœæ§ãæäŸããŸããããã§ããå®è£
æ¹æ³ã¯ãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠç°ãªããŸãã
React
Reactã§ã¯ãReact.lazy
ãšSuspense
ã䜿çšããŠãã«ãŒãå
ãä»ã®ã³ã³ããŒãã³ãå
ã®åã
ã®ã³ã³ããŒãã³ããé
å»¶èªã¿èŸŒã¿ã§ããŸãã
import React, { Suspense } from 'react';
const MyComponent = React.lazy(() => import('./MyComponent'));
function MyPage() {
return (
Welcome to My Page
Loading Component...}>
);
}
export default MyPage;
ãã®äŸã§ã¯ãMyComponent
ã³ã³ããŒãã³ãã¯MyPage
ãã¬ã³ããªã³ã°ããããšãã«é
å»¶èªã¿èŸŒã¿ãããŸããããã«ããããŠãŒã¶ãŒãå®éã«MyComponent
ãèŠããæäœãããããå Žåã«ã®ã¿ããã®ã³ãŒããèªã¿èŸŒãŸããããšãä¿èšŒãããŸãã
ã·ããªãªäŸïŒã°ããŒãã«ãªeã©ãŒãã³ã°ãã©ãããã©ãŒã ãèããŠã¿ãŸããããã³ãŒã¹ããŒãžã«ã¯ãã¯ã€ãºã3Dã¢ãã«ã®ãããªã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ããããããããŸãããã³ã³ããŒãã³ãããŒã¹ã®ã³ãŒãåå²ã¯ãåŠçããããã®èŠçŽ ã«ãšã³ã²ãŒãžãããšãã«ã®ã¿ãã®ã³ãŒããèªã¿èŸŒãããšãã§ããçµæãšããŠåæããŒãžã®èªã¿èŸŒã¿ãéããªããŸãã
Angular
Angularã¯äž»ã«ã¢ãžã¥ãŒã«ããŒã¹ã®é
å»¶èªã¿èŸŒã¿ã䜿çšããŸãããã³ã³ããŒãã³ãå
ã§åçã€ã³ããŒãã䜿çšããããšã§ãã³ã³ããŒãã³ãã¬ãã«ã®ã³ãŒãåå²ãå®çŸã§ããŸãã
// my.component.ts
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-my',
templateUrl: './my.component.html',
styleUrls: ['./my.component.css']
})
export class MyComponent implements OnInit {
dynamicComponent: any;
async ngOnInit() {
this.dynamicComponent = await import('./dynamic/dynamic.component').then(m => m.DynamicComponent);
}
}
// my.component.html
ãã®ã¢ãããŒãã¯ãMyComponent
ãåæåããããšãã«ã®ã¿DynamicComponent
ãèªã¿èŸŒã¿ãŸãããããã«ãŒãããŒã¹ã®èªã¿èŸŒã¿ãšçµã¿åãããããšã§ãããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
ã·ããªãªäŸïŒå€åœç±ã®éè¡ãŠã§ããµã€ãã«ã¯ãè€éãªããŒã³ç³èŸŒãã©ãŒã ããããããããŸãããã³ã³ããŒãã³ãããŒã¹ã®ã³ãŒãåå²ã¯ããã©ãŒã ã®ç¹å®ã»ã¯ã·ã§ã³ïŒäŸïŒåå
¥èšŒæãè·æŽïŒã®ã³ãŒããããŠãŒã¶ãŒããããã®ã»ã¯ã·ã§ã³ã«å°éãããšãã«ã®ã¿èªã¿èŸŒãããšãã§ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæé©åããŸãã
Vue.js
Vue.jsã¯ãåçã€ã³ããŒãã䜿çšããŠãã³ã³ããŒãã³ãããŒã¹ã®ã³ãŒãåå²ã«ãããŠReactãšåæ§ã®æè»æ§ãæäŸããŸããããã¯Vueã³ã³ããŒãã³ãã®components
ãªããžã§ã¯ãå
ã§è¡ãããŸãã
ããã§ã¯ã`AsyncComponent.vue`ã¯`MyPage`ãã¬ã³ããªã³ã°ããããšãã«ã®ã¿èªã¿èŸŒãŸããŸãã
ã·ããªãªäŸïŒã°ããŒãã«ãªæ
è¡äºçŽãµã€ãã§ã¯ãã€ã³ã¿ã©ã¯ãã£ããªå°å³ãç®çå°ã®ããŒãã£ã«ãã¢ãŒãããŠãŒã¶ãŒãç¹å®ã®å Žæãã¯ãªãã¯ãããšãã«ã®ã¿ãªã³ããã³ãã§èªã¿èŸŒãããšãã§ããŸããããã«ããããŠã§ããµã€ãã¯ããå¿çæ§ãé«ãããŠãŒã¶ãŒãã¬ã³ããªãŒã«ãªããŸãã
ã³ã³ããŒãã³ãããŒã¹ã®ã³ãŒãåå²ã®å©ç¹
- ãã现ããå¶åŸ¡ïŒé«åºŠã«ã¿ãŒã²ãããçµã£ãã³ãŒãèªã¿èŸŒã¿ãå¯èœã«ãããã€ã§ãèªã¿èŸŒãŸããã³ãŒãéãæå°éã«æããŸãã
- éè€ã®åæžïŒå
±éã®ã³ã³ããŒãã³ããåå¥ã«èªã¿èŸŒã¿ãè€æ°ã®ã«ãŒãã§å
±æã§ãããããã³ãŒãã®éè€ãæžå°ããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒå€ãã®å
±æã³ã³ããŒãã³ããæã€è€éãªã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ãã
ã³ã³ããŒãã³ãããŒã¹ã®ã³ãŒãåå²ã®æ¬ ç¹
- è€éæ§ã®å¢å ïŒããå€ãã®èšç»ãšæ
éãªå®è£
ãå¿
èŠã§ãã
- éå°åå²ã®å¯èœæ§ïŒããŸãã«ãç©æ¥µçã«åå²ãããšããããã¯ãŒã¯ãªã¯ãšã¹ãã®å¢å ããªãŒããŒãããã«ã€ãªããå¯èœæ§ããããŸãã
é©åãªã¢ãããŒãã®éžæ
æé©ãªã³ãŒãåå²ã¢ãããŒãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ç¹æ§ã«ãã£ãŠç°ãªããŸãã
- ã«ãŒãããŒã¹ïŒæç¢ºãªã«ãŒãããŒã¹ã®æ§é ãæã¡ãå
±æã³ã³ããŒãã³ããæå°éã®ã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸããåæã®ããã©ãŒãã³ã¹æ¹åã«æé©ã§ãã
- ã³ã³ããŒãã³ãããŒã¹ïŒå€ãã®å
±æã³ã³ããŒãã³ããšåçã³ã³ãã³ããæã€è€éãªã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ããé«åºŠã«æé©åãããããã©ãŒãã³ã¹ãå¯èœã«ããŸãã
- ãã€ããªããã¢ãããŒãïŒã«ãŒãããŒã¹ãšã³ã³ããŒãã³ãããŒã¹ã®åå²ãçµã¿åãããããšã¯ãå€§èŠæš¡ã§è€éãªã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠæã广çãªæŠç¥ãšãªãåŸãŸããäŸãã°ãã°ããŒãã«ãªEã³ããŒã¹ãµã€ãã§ã¯ãç°ãªãååã«ããŽãªïŒäŸïŒé»åæ©åšãè¡£æåïŒã«ã¯ã«ãŒãããŒã¹åå²ã䜿çšããåã
ã®åå詳现ãã€ã³ã¿ã©ã¯ãã£ããªæ©èœã«ã¯ã³ã³ããŒãã³ãããŒã¹åå²ã䜿çšãããããããŸããã
ããŒã«ãšãã¯ããã¯
ããã€ãã®ããŒã«ãšãã¯ããã¯ããã³ãŒãåå²ã广çã«å®è£
ããã®ã«åœ¹ç«ã¡ãŸãã
- WebpackïŒã³ãŒãåå²ãæšæºã§ãµããŒããã匷åãªã¢ãžã¥ãŒã«ãã³ãã©ã§ããã³ãŒããèªåçã«åæããèšå®ã«åºã¥ããŠåå¥ã®ãã£ã³ã¯ãäœæããŸããWebpackã¯ãReactãAngularãVue.jsã§äžè¬çã«äœ¿çšãããŸãã
- RollupïŒããå°ããªãã³ãã«ãäœæããããšã«åªããã©ã€ãã©ãªã§ãã䜿çšãããããäžã€ã®äººæ°ã®ã¢ãžã¥ãŒã«ãã³ãã©ã§ãã
- ParcelïŒèšå®äžèŠã§äœ¿ãããããã³ãŒãåå²ããµããŒããããã³ãã©ã§ãã
- åçã€ã³ããŒãïŒã¢ãžã¥ãŒã«ãéåæã«èªã¿èŸŒãããã®ECMAScriptæšæºã§ããã¢ãžã¥ãŒã«ãã³ãã©ãšçµã¿åãããŠäœ¿çšããããããµããŒãããŠãããã©ãŠã¶ã§ãã€ãã£ãã«äœ¿çšãããŸãã
- Preload/PrefetchïŒã©ã®ãªãœãŒã¹ãæ©æã«ïŒpreloadïŒãŸãã¯åŸã§ïŒprefetchïŒèªã¿èŸŒãã¹ããããã©ãŠã¶ã«ãã³ããšããŠäžããããšãã§ããHTMLã®link屿§ã§ããããã«ãããèªã¿èŸŒã¿ããã©ãŒãã³ã¹ãããã«æé©åã§ããŸããéèŠãªãªãœãŒã¹ã«ã¯preloadããåŸç¶ã®ããã²ãŒã·ã§ã³ã§å¿
èŠãªãªãœãŒã¹ã«ã¯prefetchã䜿çšããããšãæ€èšããŠãã ããã
ã°ããŒãã«ãªå©çšè
ãèæ
®ããç¹
ã°ããŒãã«ãªå©çšè
ã察象ãšããWebã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãç°ãªãå°åã«ããããããã¯ãŒã¯é
å»¶ã垯åå¹
ã®å¶éãããã€ã¹ã®èœåãšãã£ãèŠçŽ ãèæ
®ããããšãäžå¯æ¬ ã§ããã³ãŒãåå²ã¯ããããã®èª²é¡ã«å¯ŸåŠããäžã§éèŠãªåœ¹å²ãæãããŸãã
- ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒïŒCDNã䜿çšããŠJavaScriptãã³ãã«ãå°ççã«åæ£ãããäžçäžã®ãŠãŒã¶ãŒã®é
å»¶ãåæžããŸãããŠãŒã¶ãŒã®å Žæã«é¢ãããé«éãªé
ä¿¡ã確ä¿ããããã«ãã°ããŒãã«ãªã«ãã¬ããžãæã€CDNã®äœ¿çšãæ€èšããŠãã ããã
- ã¢ãããã£ãããŒãã£ã³ã°ïŒãŠãŒã¶ãŒã®ãããã¯ãŒã¯ç¶æ³ãããã€ã¹ã®èœåã«åºã¥ããŠèªã¿èŸŒãã³ãŒãã®éã調æŽããã¢ãããã£ãããŒãã£ã³ã°æŠç¥ãå®è£
ããŸããäŸãã°ãæ¥ç¶ãé
ããŠãŒã¶ãŒã«ã¯äœè§£å床ã®ç»åãèªã¿èŸŒãã ããç¹å®ã®æ©èœãç¡å¹ã«ãããããããšãã§ããŸãã
- ããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒèšèªãå°åã«åºã¥ããŠã³ãŒããåå²ããå¿
èŠãªç¿»èš³ãšãã±ãŒã«åºæã®ããŒã¿ã®ã¿ãèªã¿èŸŒã¿ãŸããããã«ãããJavaScriptãã³ãã«ã®ãµã€ãºã倧å¹
ã«åæžãããäžçäžã®ããŸããŸãªå°åã®ãŠãŒã¶ãŒã®èªã¿èŸŒã¿ããã©ãŒãã³ã¹ãåäžããŸãããã±ãŒã«åºæã®ããŒã¿ããªã³ããã³ãã§èªã¿èŸŒãããã«åçã€ã³ããŒãã®äœ¿çšãæ€èšããŠãã ããã
- ãã£ãã·ã³ã°æŠç¥ïŒå¹æçãªãã£ãã·ã³ã°æŠç¥ãå®è£
ããŠããã©ãŠã¶ã®ãã£ãã·ã¥ã掻çšãããµãŒããŒãžã®ãªã¯ãšã¹ãæ°ãæžãããŸãããã£ãã·ã¥ãã¹ãã£ã³ã°æè¡ïŒäŸïŒãã¡ã€ã«åã«ããŒãžã§ã³çªå·ã远å ïŒã䜿çšããŠããŠãŒã¶ãŒãåžžã«ææ°ããŒãžã§ã³ã®ã³ãŒããåãåããããã«ããŸãã
ãã¹ããã©ã¯ãã£ã¹
ã³ãŒãåå²ã®å©ç¹ãæå€§åããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³ã®åæïŒWebpack Bundle AnalyzerãLighthouseã®ãããªããŒã«ã䜿çšããŠãæå€§ã®ãã³ãã«ãšã³ãŒãåå²ã®å¯èœæ§ãããé åãç¹å®ããŸãã
- å°ããå§ããïŒãŸãã«ãŒãããŒã¹ã®åå²ããå§ããå¿
èŠã«å¿ããŠåŸã
ã«ã³ã³ããŒãã³ãããŒã¹ã®åå²ãå°å
¥ããŸãã
- 培åºçã«ãã¹ãããïŒã³ãŒãåå²ãå®è£
ããåŸããã¹ãŠã®æ©èœãæ£ããåäœããããã©ãŒãã³ã¹ã®äœäžããªãããšã確èªããããã«ãã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããŸãããšããžã±ãŒã¹ã«çްå¿ã®æ³šæãæããããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒãé©åã«æ©èœããŠããããšã確èªããŠãã ããã
- ããã©ãŒãã³ã¹ã®ç£èŠïŒã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠãããããªãæé©åã®äœå°ãããé åãç¹å®ããŸããGoogle AnalyticsãNew Relicã®ãããªããŒã«ã䜿çšããŠãèªã¿èŸŒã¿æéãæåã®ãã€ããŸã§ã®æéïŒTTFBïŒããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããªã©ã®ææšã远跡ããŸãã
- ã³ãŒãã®ææžåïŒã³ãŒãå岿Šç¥ãæç¢ºã«ææžåããä»ã®éçºè
ãçè§£ãããããä¿å®ããããããŸãã
- ãã³ãã«ãå°ããä¿ã€ïŒè¿
éã«èªã¿èŸŒãããå°ãããŠçŠç¹ã®çµããããã³ãã«ãç®æããŸãã
- ããªããŒããæ€èšããïŒéèŠãªãã³ãã«ãããªããŒãããŠãåæèªã¿èŸŒã¿æéãæ¹åããŸãã
çµè«
ã³ãŒãåå²ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæé©åããããã®åŒ·åãªãã¯ããã¯ã§ããç°ãªãã¢ãããŒãïŒã«ãŒãããŒã¹ vs. ã³ã³ããŒãã³ãããŒã¹ïŒãçè§£ãããããã广çã«å®è£
ããããšã§ãåæèªã¿èŸŒã¿æéã倧å¹
ã«ççž®ããã©ã³ã¿ã€ã ã®ããã©ãŒãã³ã¹ãåäžããããŠãŒã¶ãŒã®å Žæãããã€ã¹ã«é¢ããããããé
åçãªäœéšãåµåºã§ããŸããã³ãŒãåå²ã掻çšãã仿¥ã®ç«¶äºã®æ¿ããããžã¿ã«ç°å¢ã§JavaScriptã¢ããªã±ãŒã·ã§ã³ã®å¯èœæ§ãæå€§éã«åŒãåºããŸãããã