ทำไมเว็บไซต์เช่น Facebook, Twitter และ Google โฮสต์ภาพและ css ของพวกเขาในโดเมนภายนอกเช่น:
- Facebook:
static.ak.fbcdn.net
- Twitter:
a0.twimg.com
- Google:
ssl.gstatic.com
คำถาม (s):
- ประสิทธิภาพคืออะไร? หรือความปลอดภัย?
ทำไมเว็บไซต์เช่น Facebook, Twitter และ Google โฮสต์ภาพและ css ของพวกเขาในโดเมนภายนอกเช่น:
static.ak.fbcdn.net
a0.twimg.com
ssl.gstatic.com
คำถาม (s):
คำตอบ:
@toomanyairmiles ถูกต้องเพียงบางส่วน - วัตถุประสงค์ของเทคนิคนี้คืออนุญาตการเชื่อมต่อแบบขนานจากเว็บเบราว์เซอร์ไปยังเซิร์ฟเวอร์ เว็บเบราว์เซอร์ควรอนุญาตให้มีการเชื่อมต่ออย่างน้อยสองครั้งพร้อมกันกับโฮสต์เดียว แต่เบราว์เซอร์ใหม่จำนวนมากสามารถจัดการได้สูงสุด 60 การเชื่อมต่อพร้อมกันระหว่างเบราว์เซอร์และเว็บเซิร์ฟเวอร์พร้อมกันโดยไม่คำนึงถึง
ข้อมูลจำเพาะ HTTP 1.1 (ส่วน 8.1.4) ระบุว่าเบราว์เซอร์ควรอนุญาตให้มีการเชื่อมต่อพร้อมกันมากที่สุดสองรายการต่อชื่อโฮสต์ (แม้ว่าเบราว์เซอร์ใหม่จะอนุญาตมากกว่านั้น: ดู Browserscope สำหรับรายการ) หากเอกสาร HTML มีการอ้างอิงไปยังแหล่งข้อมูลเพิ่มเติม (เช่น CSS, JavaScript, รูปภาพ, ฯลฯ ) มากกว่าจำนวนสูงสุดที่อนุญาตในหนึ่งโฮสต์เบราว์เซอร์จะส่งคำขอทรัพยากรจำนวนนั้นและรอคิวที่เหลือ ทันทีที่คำขอบางคำขอเสร็จสิ้นเบราว์เซอร์จะออกคำขอทรัพยากรจำนวนถัดไปในคิว มันทำซ้ำกระบวนการจนกว่าจะดาวน์โหลดทรัพยากรทั้งหมด กล่าวอีกนัยหนึ่งถ้าหน้าอ้างอิงทรัพยากรภายนอกมากกว่า X จากโฮสต์เดียวโดยที่ X คือการเชื่อมต่อสูงสุดที่อนุญาตต่อโฮสต์เบราว์เซอร์จะต้องดาวน์โหลดพวกเขาตามลำดับ X ในแต่ละครั้งจะเกิดขึ้น 1 RTT สำหรับทรัพยากร X ทุกครั้ง เวลาไปกลับโดยรวมคือ N / X โดยที่ N คือจำนวนของทรัพยากรที่จะดึงข้อมูลจากโฮสต์ ตัวอย่างเช่นหากเบราว์เซอร์อนุญาตให้มีการเชื่อมต่อพร้อมกัน 4 รายการต่อชื่อโฮสต์และหน้าอ้างอิงทรัพยากร 100 รายการในโดเมนเดียวกันจะมี 1 RTT สำหรับทุก ๆ 4 ทรัพยากรและเวลาดาวน์โหลดทั้งหมด 25 RTT
ดังนั้นวิธีที่จะหลีกเลี่ยงปัญหานี้ก็คือ "ขอให้แตก" การร้องขอไปยังโดเมนที่ต่างกันหรือโฮสต์:
อีกครั้งจากแหล่งข้อมูล Google เดียวกัน:
สร้างความสมดุลของทรัพยากรที่สามารถทำให้เกิดขนานได้ในชื่อโฮสต์ การร้องขอทรัพยากรสแตติกส่วนใหญ่รวมถึงรูปภาพ, CSS และวัตถุไบนารีอื่น ๆ สามารถขนานกันได้ ยอดคงเหลือร้องขอให้วัตถุทั้งหมดเหล่านี้มากที่สุดเท่าที่เป็นไปได้ในชื่อโฮสต์ หากเป็นไปไม่ได้ตามกฎง่ายๆพยายามให้แน่ใจว่าไม่มีโฮสต์ใดที่ให้บริการมากกว่าค่าเฉลี่ยมากกว่า 50% สำหรับโฮสต์ทั้งหมด ตัวอย่างเช่นหากคุณมีทรัพยากร 40 รายการและโฮสต์ 4 แห่งแต่ละโฮสต์ควรให้บริการ 10 แหล่งทรัพยากร ในกรณีที่เลวร้ายที่สุดโฮสต์ไม่ควรให้บริการมากกว่า 15 ถ้าคุณมี 100 ทรัพยากรและ 4 โฮสต์แต่ละโฮสต์ควรให้บริการ 25 ทรัพยากร ไม่มีใครโฮสต์ควรทำหน้าที่มากกว่า 38
แต่ก็มีปริศนาอีกหนึ่งชิ้น โดยทั่วไปคำขอแต่ละครั้งจะมีค่าโสหุ้ยเป็นของตัวเองตามปกติในรูปแบบของคุกกี้ องค์ประกอบแบบคงที่เช่นรูปภาพ, CSS และ JavaScript ไม่จำเป็นต้องส่งข้อมูลคุกกี้ดังนั้นการแสดงผลจากโดเมนที่ไม่ต้องใช้คุกกี้(ย่อย)อาจทำให้การเดินทางไปรอบ ๆ เร็วขึ้น:
เนื้อหาสแตติกเช่นรูปภาพ, ไฟล์ JS และ CSS ไม่จำเป็นต้องมาพร้อมกับคุกกี้เนื่องจากไม่มีการโต้ตอบกับผู้ใช้กับทรัพยากรเหล่านี้ คุณสามารถลดเวลาในการตอบสนองการร้องขอโดยการให้บริการทรัพยากรคงที่จากโดเมนที่ไม่ได้ให้บริการคุกกี้ เทคนิคนี้มีประโยชน์อย่างยิ่งสำหรับหน้าเว็บที่อ้างอิงเนื้อหาสแตติกจำนวนมากที่ไม่ค่อยได้รับการจัดเก็บเป็นจำนวนมากเช่นการเปลี่ยนรูปขนาดย่อของรูปภาพบ่อยครั้งหรือคลังภาพที่เข้าถึงไม่บ่อย เราแนะนำเทคนิคนี้สำหรับหน้าใด ๆ ที่ให้บริการมากกว่า 5 สแตติกรีซอร์ส (สำหรับหน้าเว็บที่ให้บริการทรัพยากรน้อยกว่านี้มันไม่คุ้มค่ากับการตั้งค่าโดเมนเพิ่มเติม)
หากต้องการจองโดเมนที่ไม่มีเนื้อหาสำหรับการให้บริการเนื้อหาแบบคงที่ให้ลงทะเบียนชื่อโดเมนใหม่และกำหนดค่าฐานข้อมูล DNS ของคุณด้วยระเบียน CNAME ที่ชี้โดเมนใหม่ไปยังระเบียน A ของโดเมนที่มีอยู่ กำหนดค่าเว็บเซิร์ฟเวอร์ของคุณเพื่อให้บริการทรัพยากรคงที่จากโดเมนใหม่และไม่อนุญาตให้มีการตั้งค่าคุกกี้ใดก็ได้ในโดเมนนี้ ในหน้าเว็บของคุณอ้างอิงชื่อโดเมนใน URL สำหรับทรัพยากรคงที่
ในอดีตเว็บเบราว์เซอร์สามารถดาวน์โหลดได้สองรายการพร้อมกัน (ตอนนี้ 6 หรือมากกว่า) ดังนั้นการดาวน์โหลดทรัพยากรจากโดเมนต่างๆจะเร็วกว่าโดเมนเดียว สิ่งนี้ใช้ได้กับทุกสิ่งตั้งแต่รูปภาพไปจนถึงจาวาสคริปต์
บริษัท หลายแห่งใช้CDNซึ่งเป็นเครื่องมือที่ช่วยให้ผู้ใช้ปลายทางได้รับข้อมูลของพวกเขาจากเซิร์ฟเวอร์ที่อยู่ใกล้กับพื้นที่ทางภูมิศาสตร์ซึ่งยังช่วยเพิ่มประสิทธิภาพของไซต์ด้วยการลดเวลาไปกลับสำหรับการร้องขอทรัพยากร
ไซต์ขนาดใหญ่ย้ายเนื้อหาแบบคงที่ (รูปภาพ, ไฟล์ JS & CSS) ไปยังเครือข่ายการจัดส่งเนื้อหาหรือ CDN เป็นการปรับใช้เนื้อหาของคุณในเซิร์ฟเวอร์ที่กระจายอยู่ตามภูมิศาสตร์หลายแห่งจะทำให้หน้าเว็บของคุณโหลดเร็วขึ้นจากมุมมองของผู้ใช้
ในฐานะที่เป็น CDN มีชื่อโดเมนที่แตกต่างกันก็ยังมีประโยชน์ sharding โดเมน
ข้อ จำกัด 2 รายการไม่เป็นปัญหาอีกต่อไป แม้ว่าจะเป็นคำแนะนำเกี่ยวกับข้อมูลจำเพาะ HTTP แต่เบราว์เซอร์ที่ทันสมัยทั้งหมดจะอนุญาตให้มีการเชื่อมต่อพร้อมกันอย่างน้อย6ครั้ง
สิ่งนี้ยังคงเป็นสิ่งจำเป็นสำหรับคุกกี้ที่ไม่พึงประสงค์ที่ส่งไปยังส่วนหัวในขณะที่ใช้ชื่อโดเมนภายนอกไม่มีการตั้งค่าคุกกี้ดังนั้นจึงเป็นการโหลดเนื้อหาที่รวดเร็วยิ่งขึ้น
ใช่มันยังคงต้องการความเร็ว