Lazy Loading ในเชิงมุม (นำไปใช้กับเว็บไซต์ของคุณ)

เผยแพร่แล้ว: 2023-01-17

Angular เป็นเฟรมเวิร์ก JavaScript ส่วนหน้าที่พัฒนาโดย Google สำหรับสร้างเว็บแอปพลิเคชันระดับองค์กรที่ปรับขนาดได้ แอปพลิเคชันเหล่านี้บางตัวอาจมีขนาดค่อนข้างใหญ่ ส่งผลต่อเวลาในการโหลดแอปพลิเคชันของคุณ

เพื่อลดเวลาในการโหลดและปรับปรุงประสบการณ์โดยรวมของผู้ใช้ คุณสามารถใช้เทคนิคที่เรียกว่าการโหลดแบบขี้เกียจ คุณสมบัติเชิงมุมแบบเนทีฟนี้ช่วยให้คุณโหลดเฉพาะบิตที่จำเป็นของเว็บแอปก่อน แล้วจึงโหลดโมดูลอื่นๆ ตามต้องการ

ในบทความนี้ คุณจะได้เรียนรู้เกี่ยวกับการโหลดแบบ Lazy Loading และการโหลดแบบ Lazy Loading ช่วยเพิ่มความเร็วเว็บแอปของคุณได้อย่างไร

Lazy Loading คืออะไร?

การโหลดแบบขี้เกียจหมายถึงเทคนิคการโหลดองค์ประกอบของหน้าเว็บเมื่อจำเป็นเท่านั้น คู่ของมัน กระตือรือร้นที่จะโหลด เมื่อทุกอย่างโหลด — หรือพยายามโหลด — ทันที การดึงรูปภาพ วิดีโอ CSS และโค้ด JavaScript ทั้งหมดอย่างกระตือรือร้นอาจทำให้โหลดนาน — ข่าวร้ายสำหรับผู้ใช้

การโหลดแบบ Lazy Loading มักใช้กับรูปภาพและวิดีโอบนไซต์ที่มีเนื้อหาจำนวนมาก แทนที่จะโหลดสื่อทั้งหมดในคราวเดียว ซึ่งจะใช้แบนด์วิธจำนวนมากและทำให้จำนวนการดูหน้าเว็บลดลง องค์ประกอบเหล่านั้นจะถูกโหลดเมื่อตำแหน่งบนหน้ากำลังจะเลื่อนเข้ามาดู

Angular เป็นเฟรมเวิร์กแอปพลิเคชันหน้าเดียวที่ใช้ JavaScript ในการทำงานส่วนใหญ่ คอลเลคชัน JavaScript ของแอปของคุณอาจมีขนาดใหญ่ขึ้นได้อย่างง่ายดายเมื่อแอปเติบโตขึ้น ซึ่งมาพร้อมกับการใช้ข้อมูลและเวลาในการโหลดที่เพิ่มขึ้นตามไปด้วย หากต้องการเร่งความเร็ว คุณสามารถใช้การโหลดแบบขี้เกียจเพื่อดึงข้อมูลโมดูลที่ต้องการก่อน และเลื่อนการโหลดโมดูลอื่นๆ ออกไปจนกว่าจะจำเป็น

ประโยชน์ของ Lazy Loading ในเชิงมุม

การโหลดแบบ Lazy Loading ให้ประโยชน์ที่จะทำให้ไซต์ของคุณเป็นมิตรกับผู้ใช้มากขึ้น เหล่านี้รวมถึง:

  • โหลดเร็วขึ้น: JavaScript มีคำแนะนำสำหรับการแสดงเพจของคุณและโหลดข้อมูล ด้วยเหตุนี้ จึงเป็น ทรัพยากรที่บล็อกการ เรนเดอร์ ซึ่งหมายความว่าเบราว์เซอร์ต้องรอโหลด JavaScript ทั้งหมดก่อนที่จะแสดงผลหน้าเว็บของคุณ เมื่อขี้เกียจโหลดใน Angular JavaScript จะถูกแบ่งออกเป็นอันที่โหลดแยกกัน อันเริ่มต้นมีเฉพาะลอจิกที่จำเป็นสำหรับโมดูลหลักของหน้า มันถูกโหลดอย่างกระตือรือร้น จากนั้นโมดูลที่เหลือจะถูกโหลดอย่างเกียจคร้าน การลดขนาดของอันแรกจะทำให้ไซต์โหลดและแสดงผลเร็วขึ้น
  • การใช้ข้อมูลน้อยลง: การแบ่งข้อมูลออกเป็นส่วนๆ และโหลดตามต้องการ คุณอาจใช้แบนด์วิธน้อยลง
  • ทรัพยากรของเบราว์เซอร์ที่สงวนไว้: เนื่องจากเบราว์เซอร์โหลดเฉพาะส่วนที่จำเป็น จึงไม่เปลืองหน่วยความจำและ CPU ที่พยายามตีความและเรนเดอร์โค้ดที่ไม่จำเป็น
ต้องการนำหน้าคู่แข่งของคุณด้วยไซต์ที่โหลดเร็วและใช้งานง่ายหรือไม่? เข้าสู่การโหลดแบบขี้เกียจ เรียนรู้เพิ่มเติมเกี่ยวกับคุณลักษณะเชิงมุมแบบเนทีฟนี้ และวิธีที่คุณลักษณะนี้สามารถช่วยเพิ่มความเร็วในการโหลดของคุณ เริ่มต้นที่นี่ ️ คลิกเพื่อทวีต

การใช้ Lazy Loading ในเชิงมุม

ในการปฏิบัติตามบทช่วยสอนนี้ คุณจะต้องมีสิ่งต่อไปนี้:

  • ติดตั้ง NodeJS แล้ว
  • ความรู้พื้นฐานของเชิงมุม

ก้าวขึ้นโครงการของคุณ

คุณจะใช้ Angular CLI เพื่อสร้างโครงการของคุณ คุณสามารถติดตั้ง CLI โดยใช้ npm โดยรันคำสั่ง:

npm install -g @angular/cli

หลังจากนั้นให้สร้างโครงการชื่อ Lazy Loading Demo ดังนี้

ng new lazy-loading-demo --routing

คำสั่งนั้นสร้างโครงการเชิงมุมใหม่พร้อมการกำหนดเส้นทาง คุณจะทำงานเฉพาะในโฟลเดอร์ src/app ซึ่งมีรหัสสำหรับแอปของคุณ โฟลเดอร์นี้มีไฟล์การกำหนดเส้นทางหลักของคุณ app-routing.module.ts โครงสร้างของโฟลเดอร์ควรมีลักษณะดังนี้:

ภาพหน้าจอ: โครงสร้างโฟลเดอร์เชิงมุมที่แสดงในเทอร์มินัล
โครงสร้างโฟลเดอร์ของโครงการเชิงมุม

สร้างโมดูลคุณลักษณะด้วยเส้นทาง

ต่อไป คุณจะสร้างโมดูลคุณลักษณะที่จะโหลดอย่างเกียจคร้าน หากต้องการสร้างโมดูลนี้ ให้รันคำสั่งนี้:

ng generate module blog --route blog --module app.module

คำสั่งนี้สร้างโมดูลชื่อ BlogModule พร้อมกับการกำหนดเส้นทาง หากคุณเปิด src /app/app-routing.module.ts คุณจะเห็นว่าตอนนี้มีลักษณะดังนี้:

 import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; const routes: Routes = [ { path: 'blog', loadChildren: () => import('./blog/blog.module').then(m => m.BlogModule) }]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { }

ส่วนที่สำคัญสำหรับการโหลดแบบขี้เกียจคือบรรทัดที่สาม:

 const routes: Routes = [ { path: 'blog', loadChildren: () => import('./blog/blog.module').then(m => m.BlogModule) }];

เส้นนั้นกำหนดเส้นทาง เส้นทางสำหรับบล็อกใช้อาร์กิวเมนต์ loadChildren แทน component อาร์กิวเมนต์ loadChildren บอก Angular ให้โหลดเส้นทางแบบสันหลังยาว — เพื่อนำเข้าโมดูลแบบไดนามิกเฉพาะเมื่อมีการเยี่ยมชมเส้นทาง จากนั้นส่งคืนไปยังเราเตอร์ โมดูลกำหนดเส้นทางลูกของตัวเอง เช่น blog/** ในไฟล์ routing.module.ts โมดูลบล็อกที่คุณสร้างมีลักษณะดังนี้:

 import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { BlogComponent } from './blog.component'; const routes: Routes = [{ path: '', component: BlogComponent }]; @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule] }) export class BlogRoutingModule { }

โปรดทราบว่าไฟล์การกำหนดเส้นทางนี้มีเส้นทางเดียว '' สิ่งนี้แก้ไขสำหรับ /blog และชี้ไปที่ BlogComponent คุณสามารถเพิ่มส่วนประกอบและกำหนดเส้นทางเหล่านั้นในไฟล์นี้ได้

ตัวอย่างเช่น หากคุณต้องการเพิ่มส่วนประกอบที่จะดึงรายละเอียดเกี่ยวกับบล็อกโพสต์ คุณสามารถสร้างส่วนประกอบด้วยคำสั่งนี้:

ng generate component blog/detail

ที่สร้างส่วนประกอบสำหรับรายละเอียดบล็อกและเพิ่มลงในโมดูลบล็อก ในการเพิ่มเส้นทาง คุณสามารถเพิ่มไปยังอาร์เรย์เส้นทางของคุณ:

 const routes: Routes = [{ path: '', component: BlogComponent }, {path:"/:title",component: DetailComponent}];

สิ่งนี้จะเพิ่มเส้นทางที่แก้ไขสำหรับ blog/:title (เช่น blog/angular-tutorial ) อาร์เรย์ของเส้นทางนี้โหลดแบบ Lazy Loaded และไม่รวมอยู่ในบันเดิลเริ่มต้น

ตรวจสอบการโหลดแบบขี้เกียจ

คุณสามารถตรวจสอบได้ว่าการโหลดแบบ Lazy Loading ทำงานโดยเรียกใช้ ng serve และสังเกตผลลัพธ์ ที่ด้านล่างของผลลัพธ์ คุณควรได้รับสิ่งนี้:

สกรีนช็อต: ผลลัพธ์ของคำสั่ง ng serve ของ Angular ในเทอร์มินัล
ตรวจสอบการโหลดแบบขี้เกียจโดยใช้ ng serve ของ Angular

ผลลัพธ์ด้านบนแบ่งออกเป็นสองส่วน: Initial Chunk Files คือไฟล์ที่โหลดเมื่อโหลดเพจครั้งแรก Lazy Chunk Files โหลดแบบสันหลังยาว โมดูลบล็อกแสดงอยู่ในตัวอย่างนี้

ตรวจสอบ Lazy Loading ผ่านบันทึกเครือข่ายของเบราว์เซอร์

อีกวิธีในการยืนยันการโหลดแบบ Lazy Loading คือการใช้แท็บ เครือข่าย ในแผงเครื่องมือสำหรับนักพัฒนาของเบราว์เซอร์ของคุณ (บน Windows นั่นคือ F12 ใน Chrome และ Microsoft Edge และ CtrlShiftI ใน Firefox สำหรับ Mac นั่นคือ CommandOptionI ใน Chrome, Firefox และ Safari)

เลือกตัวกรอง JS เพื่อดูเฉพาะไฟล์ JavaScript ที่โหลดผ่านเครือข่าย หลังจากโหลดแอปครั้งแรก คุณควรได้รับสิ่งนี้:

สกรีนช็อต: ไฟล์ Angular JavaScript เข้าสู่ระบบเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์
บันทึกเริ่มต้นของการดาวน์โหลด JavaScript ดูในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์

เมื่อคุณไปที่ /blog คุณจะสังเกตเห็นอันใหม่ src_app_blog_blog_module_ts.js ถูกโหลด ซึ่งหมายความว่าโมดูลของคุณได้รับการร้องขอเมื่อคุณนำทางไปยังเส้นทางนั้นเท่านั้น และกำลังโหลดโมดูลอย่างเกียจคร้าน บันทึกเครือข่ายควรมีลักษณะดังนี้:

ภาพหน้าจอ: มุมมองที่อัปเดตของไฟล์ Angular JavaScript ที่เข้าสู่ระบบเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์
โมดูลที่โหลดแบบขี้เกียจปรากฏในการดาวน์โหลดที่บันทึกโดยเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์

โหลดสื่อทั้งหมดพร้อมกัน = โหลดนาน! นั่นเป็นข่าวร้ายสำหรับผู้ใช้ของคุณ ลองดูว่าการโหลดแบบขี้เกียจสามารถปรับปรุงทั้งประสิทธิภาพของเว็บไซต์ของคุณและความพึงพอใจของผู้ใช้ได้อย่างไรที่นี่ คลิกเพื่อทวีต

การโหลดแบบขี้เกียจ vs การโหลดแบบกระตือรือร้น

สำหรับการเปรียบเทียบ ลองสร้างโมดูลที่โหลดอย่างกระตือรือร้นและดูว่ามันส่งผลต่อขนาดไฟล์และเวลาในการโหลดอย่างไร เพื่อสาธิตสิ่งนี้ คุณจะต้องสร้างโมดูลสำหรับการพิสูจน์ตัวตน โมดูลดังกล่าวอาจต้องโหลดอย่างใจจดใจจ่อ เนื่องจากการตรวจสอบสิทธิ์เป็นสิ่งที่คุณอาจต้องให้ผู้ใช้ทุกคนทำ

สร้าง AuthModule โดยเรียกใช้คำสั่งนี้ใน CLI:

ng generate module auth --routing --module app.module

ที่สร้างโมดูลและไฟล์กำหนดเส้นทาง นอกจากนี้ยังเพิ่มโมดูลไปยังไฟล์ app.module.ts อย่างไรก็ตาม ไม่เหมือนกับคำสั่งที่เราใช้สร้างโมดูลในครั้งที่แล้ว คำสั่งนี้ไม่ได้เพิ่มเส้นทางที่โหลดแบบขี้เกียจ ใช้พารามิเตอร์ --routing แทน --route <name> ที่เพิ่มโมดูลการรับรองความถูกต้องไปยังอาร์เรย์ imports ใน app.module.ts :

 @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, AppRoutingModule, AuthModule //added auth module ], providers: [], bootstrap: [AppComponent] })

การเพิ่ม AuthModule ให้กับอาร์เรย์นำเข้า AppModule หมายความว่าโมดูลการตรวจสอบสิทธิ์ถูกเพิ่มไปยังไฟล์ก้อนเริ่มต้น และจะรวมอยู่ในบันเดิล JavaScript หลัก เพื่อตรวจสอบสิ่งนี้ คุณสามารถเรียกใช้ ng serve อีกครั้งและสังเกตผลลัพธ์:

ภาพหน้าจอ: สคริปต์เชิงมุมหลังจากเพิ่มโมดูลการรับรองความถูกต้อง
ผลลัพธ์ของคำสั่ง ng serve ของ Angular หลังจากเพิ่มโมดูลการรับรองความถูกต้องแล้ว

อย่างที่คุณเห็น โมดูลการรับรองความถูกต้องไม่ได้รวมเป็นส่วนหนึ่งของไฟล์ Lazy chunk นอกจากนี้ ขนาดของบันเดิลเริ่มต้นยังเพิ่มขึ้นอีกด้วย ไฟล์ main.js มีขนาดเพิ่มขึ้นเกือบสองเท่า โดยเพิ่มจาก 8 KB เป็น 15 KB ในตัวอย่างนี้ การเพิ่มขึ้นเพียงเล็กน้อย เนื่องจากส่วนประกอบไม่มีโค้ดมากนัก แต่เมื่อคุณเติมองค์ประกอบด้วยตรรกะ ขนาดไฟล์นี้จะเพิ่มขึ้น ทำให้เป็นกรณีที่ดีสำหรับการโหลดแบบขี้เกียจ

สรุป

คุณได้เรียนรู้วิธีใช้การโหลดแบบขี้เกียจใน Angular เพื่อดึงโมดูลเมื่อจำเป็นเท่านั้น การโหลดแบบขี้เกียจเป็นเทคนิคที่ยอดเยี่ยมในการปรับปรุงเวลาในการโหลด ลดการใช้ข้อมูล และใช้ทรัพยากรส่วนหน้าและส่วนหลังของคุณได้ดีขึ้น

การโหลดแบบ Lazy Loading พร้อมด้วยเทคโนโลยี เช่น เครือข่ายการกระจายเนื้อหาและการลดขนาด JavaScript จะปรับปรุงทั้งประสิทธิภาพเว็บไซต์ของคุณและความพึงพอใจของผู้ใช้

หากคุณกำลังพัฒนาเว็บไซต์ WordPress และต้องการเพิ่มความเร็ว อ่านเกี่ยวกับ Kinsta Edge Caching เพื่อดูตัวเลขที่น่าประทับใจ