เพราะเหตุใดไซต์ขนาดใหญ่จึงโฮสต์รูปภาพ / css ไว้ในโดเมนภายนอก


43

ทำไมเว็บไซต์เช่น Facebook, Twitter และ Google โฮสต์ภาพและ css ของพวกเขาในโดเมนภายนอกเช่น:

  • Facebook: static.ak.fbcdn.net
  • Twitter: a0.twimg.com
  • Google: ssl.gstatic.com

คำถาม (s):

  • ประสิทธิภาพคืออะไร? หรือความปลอดภัย?

คำตอบ:


53

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

จากแหล่งข้อมูลของ Google :

ข้อมูลจำเพาะ 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 สำหรับทรัพยากรคงที่


13

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

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


7

ไซต์ขนาดใหญ่ย้ายเนื้อหาแบบคงที่ (รูปภาพ, ไฟล์ JS & CSS) ไปยังเครือข่ายการจัดส่งเนื้อหาหรือ CDN เป็นการปรับใช้เนื้อหาของคุณในเซิร์ฟเวอร์ที่กระจายอยู่ตามภูมิศาสตร์หลายแห่งจะทำให้หน้าเว็บของคุณโหลดเร็วขึ้นจากมุมมองของผู้ใช้

ในฐานะที่เป็น CDN มีชื่อโดเมนที่แตกต่างกันก็ยังมีประโยชน์ sharding โดเมน


3

ข้อ จำกัด 2 รายการไม่เป็นปัญหาอีกต่อไป แม้ว่าจะเป็นคำแนะนำเกี่ยวกับข้อมูลจำเพาะ HTTP แต่เบราว์เซอร์ที่ทันสมัยทั้งหมดจะอนุญาตให้มีการเชื่อมต่อพร้อมกันอย่างน้อย6ครั้ง


-1

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

ใช่มันยังคงต้องการความเร็ว


คำตอบที่ยอมรับแล้วแจ้งว่าไม่ได้ส่งคุกกี้สำหรับโดเมนภายนอก คำตอบนี้ไม่ได้พูดอะไรที่คำตอบอื่น ๆ ยังไม่ครอบคลุม
Stephen Ostermiller
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.