หลายไฟล์บน CDN เทียบกับไฟล์เดียวในเครื่อง


93

เว็บไซต์ของฉันใช้ไลบรารี javascript ของบุคคลที่สามประมาณ 10 ไลบรารีเช่น jQuery, jQuery UI, prefixfree, ปลั๊กอิน jQuery สองสามตัวและโค้ดจาวาสคริปต์ของฉันเอง ขณะนี้ฉันดึงไลบรารีภายนอกจาก CDN เช่น Google CDN และ cloudflare ฉันสงสัยว่าอะไรคือแนวทางที่ดีกว่า:

  1. ดึงไลบรารีภายนอกจาก CDN (เช่นที่ฉันทำในวันนี้)
  2. รวมไฟล์ทั้งหมดเป็น js เดียวและไฟล์ css ไฟล์เดียวและจัดเก็บไว้ในเครื่อง

ยินดีรับความคิดเห็นใด ๆ ตราบเท่าที่มีการอธิบาย ขอบคุณ :)

คำตอบ:


139

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

ด้วยเหตุนี้การดึงไฟล์ที่ค่อนข้างใหญ่และเป็นที่นิยมจาก CDN ที่เป็นที่นิยมจึงเหมาะสมอย่างยิ่ง jQuery และในระดับที่น้อยกว่า jQuery UI จะพอดีกับใบเรียกเก็บเงินนี้

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

ต้นแบบ HTML5ทำงานได้ดีในการจัดหาโซลูชันทั่วไปสำหรับสิ่งนี้:

  1. Modernizr ถูกโหลดจาก local ในส่วนหัว: มันเล็กมากและแตกต่างกันมากในแต่ละอินสแตนซ์ดังนั้นจึงไม่สมเหตุสมผลที่จะจัดหามาจาก CDN และจะไม่ทำร้ายผู้ใช้มากเกินไปในการโหลดจากของคุณ เซิร์ฟเวอร์ มันอยู่ในหัวเนื่องจาก CSS อาจใช้ประโยชน์จากมันดังนั้นคุณต้องการให้เอฟเฟกต์เป็นที่รู้จักก่อนที่เนื้อหาจะแสดงผล สิ่งอื่น ๆ จะอยู่ที่ด้านล่างเพื่อหยุดสคริปต์ที่หนักกว่าของคุณบล็อกการแสดงผลในขณะที่โหลดและดำเนินการ
  2. jQuery จาก CDN เนื่องจากเกือบทุกคนใช้มันและค่อนข้างหนัก ผู้ใช้อาจมีแคชนี้อยู่แล้วก่อนที่จะเข้าชมไซต์ของคุณซึ่งในกรณีนี้พวกเขาจะโหลดจากแคชทันที
  3. การอ้างอิงของบุคคลที่สามที่มีขนาดเล็กและข้อมูลโค้ดที่ไม่น่าจะเปลี่ยนแปลงมากนักจะเชื่อมต่อกันเป็นplugins.js ไฟล์ที่โหลดจากเซิร์ฟเวอร์ของคุณเอง สิ่งนี้จะถูกแคชด้วยส่วนหัวการหมดอายุที่ห่างไกลในครั้งแรกที่ผู้ใช้เข้าชมและโหลดจากแคชในการเข้าชมครั้งต่อไป
  4. รหัสหลักของคุณจะเข้าmain.jsมาพร้อมกับส่วนหัวที่ใกล้หมดอายุมากขึ้นเพื่ออธิบายว่าตรรกะของแอปพลิเคชันของคุณอาจเปลี่ยนไปจากสัปดาห์เป็นสัปดาห์หรือเดือนต่อเดือน ด้วยวิธีนี้เมื่อคุณแก้ไขข้อบกพร่องหรือเปิดตัวฟังก์ชันใหม่เมื่อผู้ใช้เยี่ยมชมในช่วงสองสัปดาห์จากนี้สิ่งนี้สามารถโหลดได้ใหม่ในขณะที่เนื้อหาทั้งหมดข้างต้นสามารถนำเข้ามาจากแคช

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

  • Angular เป็นที่นิยมอย่างไม่น่าเชื่อและมีขนาดใหญ่มาก รับจาก CDN
  • Twitter Bootstrap อยู่ในระดับความนิยมที่ใกล้เคียงกัน แต่คุณมีส่วนประกอบที่ค่อนข้างบางและหากผู้ใช้ยังไม่มีมันก็อาจไม่คุ้มที่จะให้พวกเขาดาวน์โหลดไฟล์ทั้งหมด ต้องบอกว่าวิธีที่เหมาะกับส่วนที่เหลือของโค้ดของคุณนั้นค่อนข้างเป็นเนื้อแท้และคุณไม่น่าจะเปลี่ยนมันโดยไม่ต้องสร้างใหม่ทั้งไซต์ดังนั้นคุณอาจต้องการเก็บมันไว้ในเครื่อง แต่แยกไฟล์จาก หลักplugins.js. ด้วยวิธีนี้คุณสามารถอัปเดตplugins.jsส่วนขยาย Bootstrap ได้ตลอดเวลาโดยไม่ต้องบังคับให้ผู้ใช้ดาวน์โหลด Bootstrap core ทั้งหมด

แต่ไม่มีความจำเป็นระยะทางของคุณอาจแตกต่างกันไป


4
ตอบได้ดีมาก. ปล่อยให้แคชของเบราว์เซอร์ทำงานแทนคุณ ฉันชอบแนวคิดในการแยกไลบรารียอดนิยมออกจากไฟล์ที่ต่อกัน
จอน

3
การวิเคราะห์ที่เป็นประโยชน์มาก
ผู้ใช้

8
คำตอบที่ดีมาก สิ่งที่ควรค่าแก่การกล่าวถึงคือ CDN จะอนุญาตให้ผู้ใช้ดึงไฟล์จากเซิร์ฟเวอร์ "ในเครื่อง" หรืออย่างน้อยก็อยู่ใกล้กับผู้ใช้มากขึ้น ดังนั้นหากเซิร์ฟเวอร์ของคุณอยู่ในยุโรปเช่นผู้ใช้จากอเมริกาใต้หรือรัสเซียจะยังคงได้รับไฟล์ที่ค่อนข้างเร็ว
H.Wolper
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.