ประโยชน์เทียบกับข้อผิดพลาดของการโฮสต์ jQuery ในเครื่อง [ปิด]


85

เรากำลังดึงไลบรารี jQuery และ jQueryUI (และ jQueryUI CSS) จาก google CDN ฉันชอบสิ่งนี้เพราะฉันสามารถโทรได้google.load("jquery", "1");
และ jQuery 1.xx ล่าสุดจะถูกใช้

ตอนนี้ฉันต้องการดึงไลบรารีในเครื่องเนื่องจากความปลอดภัย

ฉันมีความสุขที่จะดึงพวกเขามาในพื้นที่ แต่ฉันสงสัยว่าอะไรคือประโยชน์และข้อผิดพลาดอื่น ๆ ที่ต้องระวัง?


6
เรากำลังพูดถึงประเด็นด้านความปลอดภัยอะไรบ้าง?
Ascherer

ฉันไม่ได้ถาม ฉันเดาว่ามันไม่ได้มีความปลอดภัยมากนัก แต่พยายามควบคุมแบนด์วิดท์โดยไฟร์วอลล์ gmail เป็นต้น
orolo

คำตอบ:


109

ประโยชน์หลักของการมีไว้ใน CDN คือสามารถดาวน์โหลดไฟล์ควบคู่ไปกับไฟล์ที่ดาวน์โหลดจากเว็บไซต์ของคุณเองได้ ซึ่งจะช่วยลดเวลาแฝงในทุกหน้า ดังนั้นพลิกด้านของนี้เป็นหลุมพรางของพื้นที่ในประเทศ - เพิ่มขึ้นแอบแฝง สาเหตุหลักคือเบราว์เซอร์ถูก จำกัด จำนวนการเชื่อมต่อที่สามารถเชื่อมต่อกับโดเมนเว็บเดียวกันได้ในเวลาเดียวกัน ใน IE6 นี้เป็นค่าเริ่มต้นของการเชื่อมต่อพร้อมกัน 2 รายการไปยังโดเมนเดียวกัน - แชร์ระหว่างหน้าต่างที่เปิดอยู่ทั้งหมดของ IE !! ใน IE8 + ได้รับการปรับปรุงโดยมีค่าเริ่มต้นเป็น 6 ซึ่งสอดคล้องกับ FF / Chrome แต่ถึงกระนั้นหากคุณมีรูปภาพจำนวนมากและคุณไม่ได้ใช้สไปรต์คุณจะพบกับเวลาแฝงที่หนักหน่วง

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

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

อย่าลืมอ่านคำตอบอื่น ๆ ของคำถามนี้โดย @Xaver นี่เป็นเคล็ดลับที่ดีมาก


5
ข้อดีอีกอย่างของการตั้งค่าเวอร์ชันไลบรารีอย่างชัดเจนคือ google ให้เวลาแคชนานขึ้นตัวอย่างเช่นการระบุ 1.9.1 จะให้อายุการใช้งานแคชนานกว่าการขอ 1.9 (เนื่องจาก jQuery 1.9 เวอร์ชันใหม่อาจจะออก แต่ 1.9.1 จะเป็นเสมอ เหมือน).
Barry

เอ่อ - revaxarts ? ฉันไม่เห็นคำตอบดังกล่าวไม่ว่าจะเป็นปัจจุบันหรือไม่ถูกลบ "เคล็ดลับดีๆ" คืออะไร?
ashleedawg

145

ฉันใช้ CDN (Content Delivery Network) จาก Google เสมอ แต่ในกรณีที่ออฟไลน์:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="jquery-1.4.2.min.js"><\/script>')</script>

คว้า jQuery ของ Google CDN และทางเลือกกลับไปที่ท้องถิ่นหากจำเป็น

แก้ไข : หากคุณไม่ต้องการรองรับ IE6 และไซต์ของคุณมีการใช้ https บางส่วนคุณสามารถลบ http ได้เช่นกัน:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

4
เครดิตชุมชน: stackoverflow.com/questions/1014203/…
oucil

25
XVIDEOS ใช้โซลูชันนี้ในขณะนี้: P
Shougo Makishima

ฉันต้องขาดอะไรบางอย่างที่นี่ ... วิธีนี้ไม่ถือว่า jQuery ที่โหลด CDN จะโหลดและถูกตีความก่อนที่บรรทัดถัดไป ( !window.jQuery...) จะถูกตีความ? <script>แท็กถูกประมวลผลแบบอะซิงโครนัสใช่ไหม
rinogo

2
<script>แท็กถูกประมวลผลพร้อมกัน! ในบรรทัดที่สองต้องโหลด jQuery ไว้แล้ว แต่ในกรณีที่ไม่เราฉีด JS บางส่วนเพื่อโหลดในเครื่อง document.writeจะไม่ถูกดำเนินการถ้า jQuery มีอยู่แล้ว
Xaver

24

คนอื่น ๆ ได้ครอบคลุมผลประโยชน์ หลุมพราง:

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

  • ไซต์ใด ๆ ที่คุณดึง<script>มาสามารถควบคุมประสบการณ์ของผู้ใช้บนไซต์ของคุณได้อย่างสมบูรณ์ หาก Google รู้สึกชั่วร้ายพวกเขาสามารถใส่บางสิ่งบางอย่างลงในสำเนาของ jQuery เพื่อบันทึกการกดแป้นของคุณขโมยข้อมูลส่วนบุคคลจากหน้าที่คุณกำลังเชื่อมโยงกับฐานข้อมูลการติดตามเว็บทำให้คุณโพสต์“ ฉันรัก Google!” แสดงความคิดเห็นในทุกรูปแบบและอื่น ๆ

Google อาจจะไม่ทำเช่นนั้นจริง ๆ แต่เป็นปัจจัยที่อยู่นอกเหนือการควบคุมของคุณและแน่นอนว่าเป็นสิ่งที่ต้องกังวลกับบริการโฮสต์สคริปต์อื่น ๆ มีเหตุการณ์ก่อนหน้านี้ที่สคริปต์สถิติถูกโจมตีด้วยตัวโหลดมัลแวร์

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


21
Google จะไม่ทำอย่างนั้น ... ฉันรัก Google ... :-p
JasCav

1
จุดที่ยอดเยี่ยมเกี่ยวกับปัญหาด้านความปลอดภัย
Naltroc


1
จุดดี: ไม่เคยคิดเลยว่าสคริปต์ CDN ระยะไกลจะถูกแฮ็กได้อย่างไรแล้วดึงลงมาที่ไซต์ของฉัน อาจไม่ใช่เรื่องปกติสำหรับไลบรารีหลัก ๆ เช่น jQuery, jQueryUI, Boostrap และอื่น ๆ แต่เช่นเดียวกับที่ระบุไว้ไลบรารีที่เล็กกว่าและรองรับน้อยกว่าอาจตกเป็นเหยื่อได้โดยเฉพาะอย่างยิ่งหากไม่ได้รับการอัปเดต จุดดี +1
twknab

14

Google CDN:

  • แคชดีต่อประสิทธิภาพผู้ใช้จำนวนมากมีแนวโน้มที่จะมีอยู่แล้วและดาวน์โหลดพร้อมกัน
  • ถ้าเคย heaver ห้าม cdn ลงไป คุณเมา
  • หากเวอร์ชันใหม่ทำลายปลั๊กอินหรือไซต์ที่มีอยู่คุณจะรู้ว่าอาจจะสายเกินไป

ในพื้นที่:

  • การพัฒนาโดยไม่ต้องเชื่อมต่อกับเน็ตเป็นไปได้
  • ยังคงได้รับประโยชน์ด้านประสิทธิภาพบางอย่างโดยการบีบอัดนอกเหนือจากการย่อขนาด

5
อย่างไรก็ตาม jquery u โหลดจาก cdn ของ Google ถูกลดขนาด ข้อดีอีกอย่างในการใช้ cdn คือมันจะสะอาดกว่าสำหรับโครงสร้างไดเร็กทอรีของคุณ :)
Ascherer

if a new version breaks your existing plugins or site, you'll know about it possibly too lateคุณสามารถระบุเวอร์ชันในลิงค์ CDN เพื่อหลีกเลี่ยงสิ่งนั้น
Adam

13

ฉันชอบใช้เวอร์ชันท้องถิ่นของฉันมากกว่าเพราะฉันไม่สามารถควบคุมสิ่งที่จะให้ได้ ตัวอย่างเช่นฉันไม่ต้องการให้ผู้ใช้ของฉันได้รับผลกระทบจาก google-analytics หรืออะไรที่คล้ายกันเพราะนี่เป็นปัญหาทางกฎหมายในประเทศของฉัน


9

ประโยชน์: (โดยเฉพาะสำหรับ CDN ของ Google)

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

2

แทบทุกวิธีที่คุณมองการใช้ CDN ของ Google เป็นสิ่งที่ดี

ประสิทธิภาพจะดีขึ้น (แม้ว่าไซต์ของคุณจะไม่ว่างจริงๆ) และจำนวนข้อมูลที่เซิร์ฟเวอร์ของคุณต้องส่งจะลดลง (แม้ว่า jQuery จะไม่ใช่สิ่งที่ต้องดาวน์โหลดมากนัก) เป็นต้น

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

หากคุณหวาดระแวงเรื่องความปลอดภัยสิ่งนี้อาจเพียงพอที่จะโน้มน้าวให้คุณไม่ใช้งานได้ (ท้ายที่สุดแล้วการโฮสต์ด้วยตัวเองไม่ได้ทำให้เว็บไซต์ของคุณช้าลงอย่างแน่นอน) แต่โดยทั่วไปแล้วคนส่วนใหญ่จะใช้มุมมองเชิงปฏิบัติ Google รู้ดีเกี่ยวกับไซต์ของตนอยู่แล้วว่าการเพิ่มสิ่งนี้จะไม่สร้างความแตกต่างมากนัก


1

ฉันอาจเป็นคนส่วนน้อยในปัจจุบัน แต่ฉันจะบอกว่าคุณไม่ต้องการใช้ CDN เว้นแต่คุณจะจำเป็นจริงๆ ปัจจัยสำคัญในการเริ่มใช้งาน ได้แก่ :

  • ผู้ใช้ข้ามพื้นที่ หากคุณโฮสต์เว็บไซต์ของคุณในสหรัฐอเมริกา แต่มีผู้ใช้ในยุโรปจำนวนมาก - CDN จะปรับปรุงเวลาในการโหลด
  • ผู้ใช้จำนวนมากและ \ หรือเนื้อหาขนาดใหญ่ดังนั้นเซิร์ฟเวอร์หลักเพียงเครื่องเดียวจึงไม่เพียงพออีกต่อไป คุณอาจนึกถึงเว็บไซต์วิดีโอโป๊ (หรือ Netflix ก็ได้ถ้าคุณต้องการ) สตรีมวิดีโอเป็นงานหนักโดย CDN จะโหลดบนเซิร์ฟเวอร์หลักน้อยกว่ามาก

แต่ ... ประเด็นก็คือคะแนนเหล่านี้ใช้ไม่ได้กับ 90% ของเว็บไซต์ทั่วโลก ฉันพนันได้เลยว่าคุณไม่ใช่ Facebook ที่มีผู้ใช้ออนไลน์หลายล้านคนทั่วโลกคุณไม่ใช่ Pornhub ที่มีการถ่ายโอนข้อมูลหลายร้อย GB ทุกวินาที

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


เป็นข้อมูลเพิ่มเติมเกี่ยวกับ CDN โดยทั่วไปตอนนี้ให้ฉันเข้าใกล้คำถามจริงเกี่ยวกับ jQuery หรือไลบรารีอื่น ๆ

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

จากประสบการณ์ล่าสุดของฉัน - ฉันอัปเดต TinyMCE บนเว็บไซต์ที่ฉันดูแลจาก 3.xx (วันที่ 2012) เป็น 5.xx (ลงวันที่ Spring 2019) เว็บไซต์นี้ใช้งานได้ 7 (เจ็ด!) ปีโดยไม่มีการบำรุงรักษาใด ๆ ในส่วนนี้ของตรรกะ ในตอนนั้นไม่มีแนวคิด "ลดขนาด" และ CDN ก็ไม่ธรรมดาเหมือนตอนนี้ แต่ถึงแม้ว่ามันจะเป็นเรื่องธรรมดา - คุณไม่มีทางรู้ว่าจะเกิดอะไรขึ้นใน 3-5-10 ปีนับจากนี้ โดยปกติแล้วคุณต้องการให้เว็บไซต์ของคุณมีชีวิตอยู่แม้ว่าคุณจะไม่ได้ดูแลเว็บไซต์ใช่หรือไม่? อย่างไรก็ตามหากคุณดึง jQuery จาก CDN ในวันนี้ลิงก์นี้อาจ (และอาจจะ) พังใน 5 ปี

การแก้ปัญหาด้วย CDN และทางเลือกกลับเป็นเวอร์ชันท้องถิ่นตามที่ @Xaver แนะนำอาจเป็นการประนีประนอมที่ดี แต่ ... อาจจะแค่กำจัดลิงค์ CDN? ;)


0

สำหรับฉันแล้วมันขึ้นอยู่กับว่าคุณต้องการควบคุมมากแค่ไหน หากคุณเป็นเหมือนฉันและต้องการพัฒนาโฮสต์ท้องถิ่นเมื่อทำงานและเดินทาง การมีไฟล์ jquery ในเครื่องดีกว่าการโฮสต์บน Google หรือที่อื่น

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