Webpack จะรวมไฟล์ที่นำเข้าทั้งหมดและจัดแพ็กเกจลงในไฟล์เอาต์พุตอย่างน้อย 1 ไฟล์ซึ่งเรียกว่า "แพ็กเกจ" การรวมเป็นกลุ่มเป็นวิธีที่สะดวก แต่แอปของคุณก็จะมีจำนวนกลุ่มมากขึ้นด้วยเมื่อแอปเติบโตขึ้น คุณต้องตรวจสอบขนาดของกลุ่มเพื่อให้แน่ใจว่ากลุ่มไม่ใหญ่เกินไปและส่งผลต่อเวลาในการโหลดของแอปพลิเคชัน Webpack รองรับการกำหนดงบประมาณด้านประสิทธิภาพตามขนาดชิ้นงาน และสามารถตรวจสอบขนาดของกลุ่มให้คุณได้
หากต้องการดูการทำงานจริง นี่คือแอปที่นับจำนวนวันที่เหลือจนกว่าจะถึงวันขึ้นปีใหม่ ซึ่งสร้างขึ้นด้วย React และ moment.js (เช่นเดียวกับแอปในชีวิตจริงที่อาศัยเฟรมเวิร์กและไลบรารีมากขึ้นเรื่อยๆ 😉)
วัดระยะทาง
โค้ดแล็บนี้มีแอปที่รวมอยู่ใน webpack อยู่แล้ว
- คลิกรีมิกซ์เพื่อแก้ไขเพื่อทำให้โปรเจ็กต์แก้ไขได้
- คลิก Terminal (หมายเหตุ: หากปุ่ม Terminal ไม่แสดง คุณอาจต้องใช้ตัวเลือก "เต็มหน้าจอ")
- หากต้องการดูรายการชิ้นงานและขนาดของชิ้นงานที่มีรหัสสี ให้พิมพ์
webpack
ในคอนโซล
webpack
แพ็กเกจหลักจะไฮไลต์เป็นสีเหลืองเนื่องจากมีขนาดใหญ่กว่า 244 KiB (250 KB)
ระบบจะเปิดใช้คำเตือนเหล่านี้โดยค่าเริ่มต้นในโหมดเวอร์ชันที่ใช้งานจริง และเกณฑ์เริ่มต้นคือ 244 KiB ที่ไม่ได้บีบอัดสำหรับทั้งชิ้นงานและจุดแรกเข้า (ชุดค่าผสมของชิ้นงานทั้งหมดที่ใช้ระหว่างการโหลดหน้าเว็บครั้งแรก)
Webpack จะไม่เพียงเตือนคุณ แต่ยังให้คำแนะนำเกี่ยวกับวิธีลดขนาดแพ็กเกจด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับเทคนิคที่แนะนําได้ในพื้นฐานของเว็บ
กําหนดงบประมาณด้านประสิทธิภาพที่กําหนดเอง
งบประมาณประสิทธิภาพที่เหมาะสมจะขึ้นอยู่กับลักษณะของโปรเจ็กต์ คุณควรทำการค้นคว้าด้วยตัวเองเสมอ หลักการทั่วไปคือการส่งทรัพยากรเส้นทางที่สำคัญที่บีบอัด/ย่อขนาดไว้ให้มีขนาดไม่เกิน 170 KB
สําหรับการสาธิตแบบง่ายนี้ ให้ลองใช้งบประมาณอย่างระมัดระวังมากขึ้นโดยตั้งเป็น 100 KB (97.7 KiB) ใน webpack.config.js
ให้เพิ่มข้อมูลต่อไปนี้
module.exports = {
//...
performance: {
maxAssetSize: 100000,
maxEntrypointSize: 100000,
hints: "warning"
}
};
งบประมาณประสิทธิภาพใหม่จะตั้งค่าเป็น ไบต์
- 100,000 ไบต์สําหรับเนื้อหาแต่ละรายการ (maxAssetSize)
- 100000 ไบต์สำหรับจุดแรกเข้า (maxEntrypointSize)
ในกรณีนี้ มีเพียงกลุ่มเดียวที่ทำหน้าที่เป็นจุดแรกเข้าด้วย
ค่าที่เป็นไปได้สำหรับ คำใบ้ มีดังนี้
warning
(ค่าเริ่มต้น): แสดงข้อความเตือนสีเหลือง แต่บิลด์จะผ่าน คุณควรใช้ตัวเลือกนี้ในสภาพแวดล้อมการพัฒนาerror
: แสดงข้อความแสดงข้อผิดพลาดสีแดง แต่บิลด์ยังผ่าน เราขอแนะนำให้ใช้การตั้งค่านี้กับบิลด์เวอร์ชันที่ใช้งานจริงfalse
: จะไม่แสดงคำเตือนหรือข้อผิดพลาด
เพิ่มประสิทธิภาพ
วัตถุประสงค์ของงบประมาณด้านประสิทธิภาพคือการเตือนคุณเกี่ยวกับปัญหาด้านประสิทธิภาพก่อนที่จะแก้ไขได้ยากเกินไป การสร้างแอปมีหลายวิธีเสมอ และเทคนิคบางอย่างจะช่วยให้โหลดได้เร็วขึ้น (โดยส่วนใหญ่จะระบุอยู่ในการเพิ่มประสิทธิภาพ JavaScript ที่นี่ 🤓)
เฟรมเวิร์กและไลบรารีทำให้นักพัฒนาซอฟต์แวร์ใช้ชีวิตได้ง่ายขึ้น แต่ผู้ใช้ปลายทางไม่ได้สนใจวิธีสร้างแอป ขอเพียงว่าแอปทำงานได้และทำงานรวดเร็ว หากพบว่าใช้จ่ายงบประมาณด้านประสิทธิภาพเกินเกณฑ์แล้ว ก็ถึงเวลาที่ต้องพิจารณาการเพิ่มประสิทธิภาพที่เป็นไปได้
ในชีวิตจริง เฟรมเวิร์กฝั่งไคลเอ็นต์ขนาดใหญ่มักจะเปลี่ยนออกได้ยาก จึงต้องใช้อย่างชาญฉลาด เมื่อทำการวิจัยเพียงเล็กน้อย คุณมักจะพบทางเลือกที่เล็กกว่าสำหรับไลบรารียอดนิยมที่ทำงานได้ดีพอๆ กัน (date-fns เป็นทางเลือกที่ดีสำหรับ moment.js) บางครั้งการไม่ใช้เฟรมเวิร์กหรือไลบรารีเลยอาจให้ผลลัพธ์ที่เป็นประโยชน์อย่างมาก
การนําโค้ดที่ไม่ได้ใช้ออกเป็นวิธีที่ดีในการเพิ่มประสิทธิภาพแอปที่มีไลบรารีขนาดใหญ่ของบุคคลที่สาม คำแนะนำในการนำโค้ดที่ไม่ได้ใช้ออกจะอธิบายกระบวนการนี้โดยละเอียด และนี่คือวิธีสั้นๆ ในการเขียนโค้ดนับถอยหลังอีกครั้งโดยไม่ใช้ moment.js
ใน app/components/Countdown.jsx ให้นำออกดังนี้
const today = moment();
const yearEnd = moment().endOf('year');
const daysLeft = yearEnd.diff(today, 'days');
และลบบรรทัดนี้:
const moment = require('moment');
ต้องใช้การคำนวณเล็กน้อย แต่คุณใช้การนับถอยหลังแบบเดียวกันกับ JavaScript ธรรมดาได้ ดังนี้
const today = new Date();
const year = today.getFullYear();
const yearEnd = new Date(year,11,31); //months are zero indexed in JS
const timeDiff = Math.abs(yearEnd.getTime() - today.getTime());
const daysLeft = Math.ceil(timeDiff / (1000 * 3600 * 24));
จากนั้นนำ moment.js
ออกจาก package.json
แล้วเรียกใช้ Webpack ในคอนโซลอีกครั้งเพื่อสร้างแพ็กเกจที่เพิ่มประสิทธิภาพ
นี่ไง! คุณได้ตัดโค้ดออกไป 223 KiB (230 KB) และแอปยังมีงบประมาณไม่เพียงพอ🎉
ติดตามดู
การตั้งค่างบประมาณด้านประสิทธิภาพใน webpack ใช้เวลาเพียง 2-3 บรรทัดโค้ด และระบบจะเตือนคุณหากเพิ่มการพึ่งพาขนาดใหญ่ (โดยไม่ตั้งใจ) อย่างที่คนโบราณว่า "ไม่เห็นก็เหมือนไม่มี" แต่ webpack จะช่วยให้คุณทราบถึงผลกระทบด้านประสิทธิภาพได้ตลอดเวลา