การทำ Code Splitting ใน JavaScript: เจาะลึกการโหลดแบบไดนามิกและการเพิ่มประสิทธิภาพ | MLOG | MLOG ); }

ในสถานการณ์นี้ โค้ดสำหรับ HeavyModal จะถูกร้องขอจากเซิร์ฟเวอร์ก็ต่อเมื่อผู้ใช้คลิกปุ่ม "Show Terms and Conditions" เป็นครั้งแรกเท่านั้น

3. การแยกไลบรารีของบุคคลที่สาม (Vendor Chunks)

โค้ดแอปพลิเคชันของคุณมักจะขึ้นอยู่กับไลบรารีของบุคคลที่สามจาก node_modules (เช่น React, Lodash, D3.js, Moment.js) ไลบรารีเหล่านี้มีการเปลี่ยนแปลงน้อยกว่าโค้ดแอปพลิเคชันของคุณเองมาก ด้วยการแยกไลบรารีเหล่านี้ออกเป็น "vendor" chunk ที่แยกจากกัน คุณจะสามารถใช้ประโยชน์จากการแคชของเบราว์เซอร์ในระยะยาวได้

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

Bundler สมัยใหม่อย่าง Webpack (ด้วย SplitChunksPlugin) และ Vite นั้นฉลาดมากในเรื่องนี้ บ่อยครั้งที่พวกมันสามารถสร้าง vendor chunks โดยอัตโนมัติตามการใช้งานและขนาดของโมดูล โดยต้องการการกำหนดค่าเพียงเล็กน้อย

ตัวอย่างการกำหนดค่า splitChunks ของ Webpack:


// webpack.config.js
module.exports = {
  // ... การกำหนดค่าอื่นๆ
  optimization: {
    splitChunks: {
      cacheGroups: {
        vendor: {
          test: /[/]node_modules[/]/,
          name: 'vendors',
          chunks: 'all',
        },
      },
    },
  },
};

ผลตอบแทนจากการเพิ่มประสิทธิภาพ: การวัดผลกระทบ

การใช้ code splitting ไม่ใช่แค่การฝึกฝนทางทฤษฎี แต่มันให้ผลลัพธ์ด้านประสิทธิภาพที่จับต้องได้และวัดผลได้ ซึ่งช่วยปรับปรุงประสบการณ์ของผู้ใช้และ Core Web Vitals ของคุณโดยตรง

เทคนิคขั้นสูงและแนวทางปฏิบัติที่ดีที่สุด

เมื่อคุณเชี่ยวชาญพื้นฐานแล้ว คุณสามารถปรับปรุงกลยุทธ์การโหลดของคุณเพิ่มเติมได้ด้วยเทคนิคขั้นสูงยิ่งขึ้น

การทำ Prefetching และ Preloading

การโหลดแบบไดนามิกนั้นยอดเยี่ยม แต่มันก่อให้เกิดความล่าช้าเล็กน้อยเมื่อผู้ใช้กระทำการบางอย่าง เนื่องจากเบราว์เซอร์ต้องดึง chunk ใหม่ เราสามารถลดปัญหานี้ได้โดยใช้ resource hints:

Bundler อย่าง Webpack ช่วยให้คุณทำสิ่งนี้ได้อย่างง่ายดายด้วย "magic comments":


// Prefetch โค้ดของ dashboard เมื่อโมดูลนี้ถูกประเมิน
const DashboardPage = lazy(() => 
  import(/* webpackPrefetch: true */ './pages/DashboardPage')
);

การระบุจุดที่จะแบ่งด้วย Bundle Analyzers

คุณจะรู้ได้อย่างไรว่าควรจะแบ่งอะไร? อย่าเดา—จงวิเคราะห์! เครื่องมืออย่าง webpack-bundle-analyzer หรือ source-map-explorer จะสร้างภาพ treemap แบบโต้ตอบของ bundle ของคุณ ซึ่งช่วยให้คุณระบุโมดูลและไลบรารีที่ใหญ่ที่สุดที่เป็นตัวเลือกหลักสำหรับการแบ่งได้ทันที

การหลีกเลี่ยง Network Waterfalls

ระวังการสร้างห่วงโซ่ของ dynamic import ที่ chunk หนึ่งต้องโหลดเสร็จก่อนจึงจะสามารถเรียกการโหลดของอีก chunk หนึ่งได้ เมื่อใดก็ตามที่เป็นไปได้ ให้เรียกการโหลด chunk ที่จำเป็นหลายๆ ตัวพร้อมกันแบบขนานเพื่อลดเวลาในการโหลดโดยรวม

สรุป: Code Splitting เป็นสิ่งที่ขาดไม่ได้

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

ประโยชน์นั้นชัดเจนและน่าสนใจ:

ด้วยเครื่องมือและการสนับสนุนจากเฟรมเวิร์กที่ทันสมัย การใช้การแบ่งตาม route และตาม component ไม่เคยง่ายอย่างนี้มาก่อน ถึงเวลาแล้วที่จะลงมือทำ วิเคราะห์ bundle ของคุณ ระบุ dependencies ที่ใหญ่ที่สุดและ route ที่ใช้น้อยที่สุด และเริ่มทำ split point แรกของคุณ ผู้ใช้ของคุณ—และตัวชี้วัดประสิทธิภาพของคุณ—จะขอบคุณสำหรับสิ่งนี้