ไม่สำคัญว่า CDN ใดที่คุณใช้เชื่อมโยงไปยังไฟล์ jquery ของคุณหรือไฟล์ javascript ใด ๆ สำหรับเรื่องนั้น หนึ่งอาจเร็วกว่าอีกหรือไม่ มีปัจจัยอื่นใดที่มีบทบาทในการตัดสินใจใช้ cdn ของคุณ? ฉันรู้ว่า Microsoft, Yahoo และ Google ทุกคนมี CDN's แล้ว
ไม่สำคัญว่า CDN ใดที่คุณใช้เชื่อมโยงไปยังไฟล์ jquery ของคุณหรือไฟล์ javascript ใด ๆ สำหรับเรื่องนั้น หนึ่งอาจเร็วกว่าอีกหรือไม่ มีปัจจัยอื่นใดที่มีบทบาทในการตัดสินใจใช้ cdn ของคุณ? ฉันรู้ว่า Microsoft, Yahoo และ Google ทุกคนมี CDN's แล้ว
คำตอบ:
อัปเดตตามความคิดเห็น:
ฉบับย่อ:มันไม่สำคัญหรอก แต่มันอาจขึ้นอยู่กับสิ่งที่โฮสต์ พวกเขาโฮสต์สิ่งต่าง ๆ ทั้งหมด: Google ไม่ได้โฮสต์ jQuery.Validate, Microsoft ไม่ได้โฮสต์ jQuery-UI, ตั้งแต่ 2016 พวกเขาทำ !!, Microsoft เสนอสคริปต์ของพวกเขาที่จะให้บริการผ่านทางScriptResource.axd
และการรวมที่ง่ายขึ้น (เช่นScriptManager กับ ASP สุทธิ 4.0 )
หมายเหตุสำคัญ: หากคุณกำลังสร้างแอปพลิเคชันอินทราเน็ตให้อยู่ห่างจากวิธีการ CDN มันไม่สำคัญว่าใครจะโฮสต์มันเว้นแต่คุณจะอยู่บนเซิร์ฟเวอร์ที่มากเกินไปภายในไม่มี CDN จะให้ประสิทธิภาพที่มากกว่าอีเธอร์เน็ตท้องถิ่น 100mb / 1GB หากคุณใช้ CDN สำหรับแอปพลิเคชันภายในอย่างเคร่งครัดคุณกำลังทำร้ายประสิทธิภาพการทำงาน ตั้งค่าส่วนหัวการหมดอายุของแคชอย่างถูกต้องและละเว้น CDNs ที่มีอยู่ในสถานการณ์เฉพาะอินทราเน็ต
โอกาสของการถูกบล็อกดูเหมือนจะเท่ากันเกือบเป็นศูนย์ ฉันทำงานเกี่ยวกับสัญญาที่ไม่เป็นความจริง แต่ดูเหมือนว่าจะเป็นข้อยกเว้น นอกจากนี้เนื่องจากการโพสต์ต้นฉบับของคำตอบนี้บริบทโดยรอบมีการเปลี่ยนแปลงอย่างมาก CDN ของ Microsoft ได้ก้าวหน้าไปมาก
โครงการที่ฉันใช้อยู่ในปัจจุบันใช้ทั้ง CDNs ซึ่งทำงานได้ดีที่สุดสำหรับโซลูชันของเรา มีหลายปัจจัยที่เล่นในเรื่องนี้ ผู้ใช้ที่มีเบราว์เซอร์รุ่นเก่ายังคงอาจจะทำให้การร้องขอพร้อมกัน 2 ต่อโดเมนตามคำแนะนำของ HTTP เปค นี่ไม่ใช่ปัญหาสำหรับทุกคนที่ทำงานใหม่อย่างเหมาะสมซึ่งสนับสนุนการวางท่อ (ทุกเบราว์เซอร์ปัจจุบัน) แต่ขึ้นอยู่กับอีกปัจจัยหนึ่งที่ทำให้เรามีข้อ จำกัด นี้เช่นกันอย่างน้อยก็เท่ากับจาวาสคริปต์
CDN ของ Google ที่เราใช้สำหรับ:
CDN ของ Microsoft ที่เราใช้สำหรับ:
เซิร์ฟเวอร์ของเรา:
เนื่องจากส่วนหนึ่งของกระบวนการสร้างของเรากำลังรวมและลดขนาดจาวาสคริปต์ที่กำหนดเองทั้งหมดเราจึงทำเช่นนี้ผ่านตัวจัดการสคริปต์ที่กำหนดเองซึ่งรวมถึงเวอร์ชันของสคริปต์เหล่านี้ในเวอร์ชันรีลีสหรือดีบัก เนื่องจาก Google ไม่ได้โฮสต์แพ็คเกจการตรวจสอบความถูกต้อง jQuery นี่อาจเป็นข้อเสีย MVC จะรวมถึง / ใช้นี้ในการปล่อย 2.0 ของพวกเขาเพื่อให้คุณสามารถพึ่งพาสมบูรณ์ในไมโครซอฟท์ CDN สำหรับทุกความต้องการของคุณและทั้งหมดของมันโดยอัตโนมัติผ่านทาง ScriptManager
อาร์กิวเมนต์อื่น ๆ ที่ต้องทำคือเวลา DNS มีค่าใช้จ่ายในแง่ของความเร็วในการโหลดหน้า โดยเฉลี่ย:เพียงเพราะมีการใช้งานมากกว่า (ใช้เวลานานกว่า) ajax.googleapis.com
น่าจะถูกส่งคืนโดย DNS เร็วกว่าajax.microsoft.com
เพราะเซิร์ฟเวอร์ DNS ในพื้นที่มีแนวโน้มที่จะได้รับการร้องขอมากกว่า (นี่เป็นผู้ใช้รายแรกในเขตโทษ) . นี่เป็นสิ่งที่น้อยมากและควรได้รับการพิจารณาว่าประสิทธิภาพมีความสำคัญมากหรือไม่ถึงมิลลิวินาที
(ใช่: ฉันรู้ว่าประเด็นนี้ตรงกันข้ามกับการใช้ CDN ทั้งสองของฉัน แต่ในกรณีของเราเวลา DNS ถูกบดบังด้วยเวลารอคอยในจาวาสคริปต์ / การปิดกั้นที่เกิดขึ้น)
สุดท้ายถ้าคุณไม่ได้มองไปที่มันเป็นหนึ่งในเครื่องมือที่ดีที่สุดออกมีFirebugและบางปลั๊กอินสำหรับมันความเร็วหน้าและYSlow หากคุณใช้ CDN แต่หน้าของคุณกำลังร้องขอภาพทุกครั้งเนื่องจากไม่มีส่วนหัวแคชแสดงว่าคุณไม่มีผลไม้แขวนลอยต่ำ แผง Net ของ Firebug สามารถแบ่งการโหลดหน้าเว็บของคุณได้อย่างรวดเร็วและ Page Speed / YSlow สามารถให้คำแนะนำที่ดีเพื่อช่วยคุณได้
คุณควรใช้ Google CDN เป็นอย่างยิ่งสำหรับ jQuery (และนี่มาจากผู้พัฒนาที่เป็นศูนย์กลางของ Microsoft)
มันเป็นสถิติง่ายๆ ผู้ที่จะพิจารณาใช้ MS CDN สำหรับ jQuery จะเป็นชนกลุ่มน้อย มีผู้พัฒนาที่ไม่ใช่ MS จำนวนมากเกินไปที่ใช้ jQuery ซึ่งจะใช้ Google และจะไม่พิจารณาใช้ Microsoft เนื่องจากหนึ่งในชัยชนะที่ยิ่งใหญ่ด้วย CDN สาธารณะคือการปรับปรุงการแคชการแบ่งการใช้งานระหว่าง CDN หลาย ๆ ตัวจะลดโอกาสในการได้รับประโยชน์นั้น
Google จะส่ง jQuery เวอร์ชันย่อให้คุณด้วยซอฟต์แวร์ของตัวเองรุ่นนี้จะเบากว่ารุ่น minified มาตรฐานขนาด 6kb ที่ MS ให้บริการ ไปที่ Google
สิ่งหนึ่งที่ควรพิจารณาคือทั้งสอง บริษัท มีไลบรารี "พิเศษ" ที่แตกต่างกันเล็กน้อย:
สิ่งนี้อาจเกี่ยวข้องกันขึ้นอยู่กับความต้องการของคุณ
ควรสังเกตว่าเนื่องจาก ajax.microsoft.com เป็นโดเมนย่อยของคำขอ microsoft.com ส่งคุกกี้ microsoft.com ทั้งหมดที่เพิ่มไปยังเวลาโดยรวมที่ใช้ในการรับไฟล์กลับ
นอกจากนี้ ajax.microsoft.com ยังใช้การบีบอัด IIS7 ที่เป็นค่าเริ่มต้นซึ่งด้อยกว่าการบีบอัดมาตรฐานที่เว็บเซิร์ฟเวอร์อื่นใช้
http://ajax.microsoft.com/ajax/jquery/jquery-1.4.4.min.js - 33.4K
http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js - 26.5K
นอกจากนี้ยังมีคนอื่น ๆ ที่กล่าวถึง google CDN เป็นวิธีที่นิยมมากขึ้นซึ่งจะเป็นการเพิ่มโอกาสของไฟล์ที่ถูกแคช
ดังนั้นฉันขอแนะนำให้ใช้ google
มันอาจไม่สำคัญ แต่คุณสามารถตรวจสอบได้ด้วยการทดสอบ A / B ส่งการรับส่งข้อมูลครึ่งหนึ่งของคุณไปที่ CDN หนึ่งอันและอีกครึ่งหนึ่งไปที่อื่นและตั้งค่าโปรไฟล์เพื่อวัดการตอบสนอง ฉันคิดว่ามันสำคัญกว่าที่จะสามารถสลับได้อย่างง่ายดายในกรณีที่หนึ่งหรืออื่น ๆ มีปัญหาบางอย่างไม่พร้อมใช้งานอย่างจริงจัง
ฉันรู้ว่าฉันกำลังตีระฆังสายเล็ก ๆ น้อย ๆ ที่นี่ แต่นี่คือรหัสที่ฉันใช้ในการผลิต ฉันไม่เคยมีปัญหากับมัน แต่ระยะทางของคุณอาจแตกต่างกันไป ตรวจสอบให้แน่ใจว่าคุณทดสอบในสภาพแวดล้อมของคุณเอง
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
!window.jQuery && document.write('<script src="/scripts/jquery-1.4.2.min.js"><\/script>')
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
!window.jQuery.ui && document.write('<script src="/scripts/jquery-ui-1.8.2.min.js"><\/script>')
</script>
มันเกี่ยวกับสถิติ: jquery.comโหลด jQuery จาก Google และ Twitter ก็เช่นกัน, Stackoverflow และอื่น ๆ อีกมากมาย ดังนั้นจึงมีความเป็นไปได้สูงมากที่ผู้ใช้เว็บไซต์ของคุณมีแคชอยู่แล้ว = ไม่มีการดาวน์โหลดเลย
ลืม validator, bandwith และ speed เพราะนี่คือข้อดีหลัก ๆ มิฉะนั้นตัวเลือก CDN อื่น ๆ จะทำงานเป็นหลักในระดับเดียวกัน
หนึ่งอาจเร็วกว่าอีกหรือไม่
จริง ๆ แล้วฉันสงสัยตัวเองดังนั้นฉันจึงติดตั้งหน้าทดสอบ jsbin โดยใช้สิ่งต่อไปนี้แล้วเรียกใช้ผ่านเครื่องมือเปรียบเทียบภาพของ webpagetest.org ฉันทดสอบแล้ว:
ใครที่เร็วที่สุด: code.jquery.com 0.1 วินาทีในการทดสอบทั้งคู่
ใครที่ช้าที่สุด: ajax.aspnetcdn.com 0.7 วินาทีในการทดสอบครั้งแรกและajax.googleapis.com 1 วินาทีในการทดสอบครั้งที่สอง
นี่คือการทดสอบครั้งแรก ( การทดสอบแต่ละครั้งมี 3 ครั้ง):
วิดีโอ: http://www.webpagetest.org/video/view.php?id=121019_16c5e25eff2937f63cc1714ed1eac814794e62b3
นี่คือการทดสอบครั้งที่ 2 (อีก 3 ครั้ง):
วิดีโอ: http://www.webpagetest.org/video/view.php?id=121019_a7b351f706cad2c25664fee7ef349371f17c4e74
ตามที่ระบุไว้โดยPingdom :
เมื่อมีคนเยี่ยมชมเว็บไซต์ของคุณหากพวกเขาได้เยี่ยมชมเว็บไซต์อื่นที่ใช้ไฟล์ jQuery เดียวกันใน CDN เดียวกันไฟล์นั้นจะถูกแคชและไม่จำเป็นต้องดาวน์โหลดเลย ไม่สามารถรับได้เร็วกว่านี้อีกแล้ว
ซึ่งหมายความว่า CDN ที่ใช้กันอย่างแพร่หลายจะมีอัตราต่อรองอยู่ด้านข้างซึ่งสามารถชำระสำหรับไซต์ของคุณ
ข้อสังเกตบางประการเกี่ยวกับประสิทธิภาพ: CDN ของ Google นั้นช้าที่สุดทั้งสามในอเมริกาเหนือและยุโรป ในยุโรป CDN ของ Microsoft นั้นเร็วที่สุด
ฉันคิดว่ามันขึ้นอยู่กับว่ากลุ่มเป้าหมายของคุณอยู่ที่ไหน คุณสามารถใช้ alertra.com เพื่อตรวจสอบความเร็ว CDN จากสถานที่ต่างๆทั่วโลก
ข้อควรพิจารณาเพิ่มเติมประการหนึ่ง - หากเว็บไซต์ของคุณเป็น SSL และคุณต้องรองรับ Android 2.1 (หรือรุ่นก่อนหน้า) ใบรับรอง SSL ของ Microsoft CDN รุ่น HTTPS จะทำให้เบราว์เซอร์ Android เวอร์ชันดังกล่าวขัดข้อง: http: // code .google.com ไม่ใช่ "ความผิดพลาด" ของ Microsoft เนื่องจากใบรับรอง SSL นั้นถูกต้องทางเทคนิคและข้อบกพร่องอยู่ในการใช้งาน SSL ของ Android ... แต่จะทำให้เว็บไซต์ของคุณเสียหาย แต่อย่างไรก็ตาม
ใบรับรอง SSL ใน CDN ของ Google ไม่ได้ตกอยู่ในปัญหานี้โดยเฉพาะ (เกี่ยวข้องกับ "ชื่อเรื่องหัวเรื่องของใบรับรอง" ของใบรับรอง)
ดังนั้นสำหรับการสนับสนุน SSL + Android 2.1 ให้ใช้ Google CDN
คำตอบของฉันแตกต่างจากคนอื่นเล็กน้อยฉันจะไปกับ microsoft ถ้าคุณต้องการ jQuery validator ซึ่งเกือบทุกคนต้องการถ้าคุณใช้ jquery
การเชื่อมต่อ http ของ Microsoft CDN คือ Keep-Alive ซึ่งเป็นข้อดีอย่างมากเมื่อคุณร้องขอหลายรายการ
ดังนั้นหากคุณต้องการการตรวจสอบ jquery จากนั้นใช้ Microsoft CDN แม้ว่าคุณจะต้องการ jquery ui ใช้ microsoft เพราะ google ไม่ได้เก็บข้อมูลไว้ดังนั้นทุกคำขอก็เป็นของตัวเอง ดังนั้นการผสมในลักษณะนั้นจึงเป็นบวก ถ้าคุณใช้ microsoft สำหรับตัวตรวจสอบความถูกต้องคุณกำลังทำการเชื่อมต่อแยกกับเซิร์ฟเวอร์ google สำหรับแต่ละคำขอ
นอกจากนี้ควรพิจารณาเมื่อใช้ Google CDN ว่าบางครั้งผู้คนพิมพ์ผิดเช่น ajax.googelapis.com สิ่งนี้อาจสร้างการโจมตี xss ที่น่ารังเกียจจริงๆได้ ฉันได้ทำการทดสอบสิ่งนี้จริง ๆ โดยการลงทะเบียนพิมพ์ผิด googlapis.com และพบว่าตัวเองอย่างรวดเร็วให้บริการการร้องขอสำหรับ javascript, แผนที่, CSS และอื่น ๆ
ฉันส่งอีเมลไปยัง Google และขอให้พวกเขาลงทะเบียน CDN typo URL ที่คล้ายกัน แต่ไม่ได้รับการตอบกลับ นี่อาจเป็นเหตุผลที่แท้จริงที่จะไม่พึ่งพา CDN เพราะมีผู้โจมตีที่อาจเป็นอันตรายรอการร้องขอการพิมพ์ผิดและสามารถให้บริการ jquery กลับด้วย xss payload ได้อย่างง่ายดาย
ขอบคุณ
คุณอาจไม่ต้องการใช้ CDN ที่จัดการโดยองค์กรอื่นทั้งนี้ขึ้นอยู่กับอุตสาหกรรมที่แอปพลิเคชันเป้าหมาย มักทำให้เกิดปัญหาเกี่ยวกับการปฏิบัติตามกฎระเบียบความเป็นส่วนตัวและความลับ
ตัวอย่างเช่นเมื่อคุณรวม Google Analytics ในแอปพลิเคชันที่ปลอดภัยเบราว์เซอร์จะยังคงส่ง URL ปัจจุบันเป็นส่วนหัว "อ้างอิง" ตัวระบุใด ๆ พูดว่ารหัสเซสชันหรือโทเค็นลับอาจปรากฏในบันทึกของพวกเขา ตัวอย่างเช่นหาก IP ของลูกค้าเป็น 192.0.2.5references https: //healthsystem.example/condition/impotenceคุณก็สามารถอนุมานข้อมูลที่ถือว่าเป็นส่วนตัวได้
กรณีอื่น ๆ รวมถึงข้อมูลที่เป็นผลลัพธ์เช่นหมายเลขบัญชีหมายเลขประกันสังคมหรือข้อมูลเซสชันใน URL ข้อมูลประเภทนั้นไม่ควรอยู่ใน URL เนื่องจากสามารถใช้ภายนอกแอปพลิเคชันได้
ในขณะที่คุณอาจเชื่อถือ Google, Microsoft หรือ Yahoo ผู้ใช้ของคุณอาจไม่
สำหรับอุตสาหกรรมเช่นการเงินกฎหมายและการดูแลสุขภาพคุณอาจต้องการสร้าง CDN ของคุณเองด้วยความช่วยเหลือของผู้ขาย (เช่น Akamai) ซึ่งคุณสามารถลงนามใน BAA
เราขอแนะนำให้คุณอ้างอิงการใช้งานของคุณตามตำแหน่งทั่วไปของผู้ใช้ที่คุณกำหนดเป้าหมาย
หากเว็บไซต์ของคุณกำหนดเป้าหมายสำหรับบุคคลทั่วไปการใช้ CDN ของ Google จะเป็นตัวเลือกที่ดี
หากเว็บไซต์ของคุณมีการกำหนดเป้าหมายที่ประเทศจีนการใช้ CDN ของ Microsoft จะเป็นตัวเลือกที่ดีกว่า ฉันรู้จากประสบการณ์ของฉันเนื่องจากเซิร์ฟเวอร์ของ Google ยังคงถูกบล็อกโดยรัฐบาลจีนทำให้การแสดงผลเว็บไซต์ที่ใช้เว็บไซต์นั้นไม่สามารถโหลดได้
* โปรดทราบว่าคุณสามารถสร้างเว็บไซต์เฉพาะภูมิภาคเช่น cn.mysite.com เพื่อรองรับเฉพาะสำหรับประเทศจีน แต่ถ้าคุณมีทรัพยากรและเวลาเหลือน้อย
รายการทั้งหมดของ Microsoft CDN ที่นี่ http://www.asp.net/ajaxlibrary/cdn.ashx
พวกเขาได้เปลี่ยนชื่อเป็นajax.aspnetcdn.comซึ่งช่วยลดโอกาสในการบล็อกโดยกฎไฟร์วอลล์
ฉันจะใช้ทั้งสอง!
เนื่องจากโฮสติ้ง Jquery ของ Google ใช้เวลานานกว่ามากโอกาสสูงกว่ามากที่ผู้คนจะมีแคชอยู่แล้วเมื่อเทียบกับ Microsoft หนึ่งดังนั้นฉันจะมีมันก่อน
โดยส่วนตัวฉันจะใช้สิ่งนี้ -
if (typeof jQuery == 'undefined') {
// jQuery is not loaded
document.write("<scr" + "ipt type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"></scr" + "ipt>");
}
} else {
// jQuery is loaded
}
(ไม่แน่ใจว่าใช้งานได้ 100% แต่ฉันเพิ่งจะเขียนความคิดและไม่ใช่ตัวอย่าง - นี่เป็นการอ้างอิง Jquery ที่โฮสต์โดย Google และไม่ใช่ Microsoft เพราะฉันหาลิงค์ไม่พบ)
jQuery
จะไม่ถูกกำหนดเว้นแต่คุณจะโหลดมันอย่างแข็งขัน ในสคริปต์ของคุณสาขาแรกจะถูกเรียกใช้งานเสมอ (เว้นแต่คุณจะมี jQuery inclusion ข้างต้นอยู่) ให้เรนเดอร์สคริปต์ไม่จำเป็น