ความหมายของ polyfills ใน HTML5 คืออะไร?


387

ความหมายของ polyfills ใน HTML5 คืออะไร? ฉันเห็นคำนี้ในเว็บไซต์หลายแห่งเกี่ยวกับ HTML5 เช่นHTML5-Cross-Browser-Polyfills

ดังนั้นที่นี่เรากำลังรวบรวม shims, fallbacks และ polyfills ทั้งหมดเพื่อปลูกฝังการทำงานของ HTML5 ในเบราว์เซอร์ที่ไม่สนับสนุนพวกมัน

ที่จริงฉันไม่เข้าใจความหมายของ polyfills คืออะไร

มันเป็นเทคนิค HTML5 ใหม่หรือไลบรารี JavaScript หรือไม่ ฉันไม่เคยได้ยินคำนี้มาก่อน HTML5

และความแตกต่างระหว่าง shims, fallbacks และ polyfills คืออะไร?


1
คุณสามารถตรวจสอบความเข้าใจที่ดีขึ้นblogs.msdn.com/b/jennifer/archive/2011/08/04/…

@ user3400622 ขอบคุณสำหรับลิงค์คำอธิบายในลิงค์นั้นชัดเจนมาก
Andrew Lam

คำตอบ:


377

โพลีฟิลเป็นทางเลือกเบราว์เซอร์ที่สร้างขึ้นใน JavaScript ซึ่งช่วยให้การทำงานที่คุณคาดหวังว่าจะทำงานในเบราว์เซอร์ที่ทันสมัยเพื่อทำงานในเบราว์เซอร์รุ่นเก่าเช่นเพื่อสนับสนุน Canvas (ฟีเจอร์ HTML5) ในเบราว์เซอร์รุ่นเก่า

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

นี่คือโพสต์ที่ดี:

http://remysharp.com/2010/10/08/what-is-a-polyfill/

นี่คือรายการที่ครอบคลุมของ Polyfills และ Shims:

https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills


6
ดังนั้นหมายความว่า ie7.js ก็เป็นโพลีฟิลด้วย
Jitendra Vyas

1
ใช่: "การแก้ไขหลายอย่างรวมถึงความโปร่งใส PNG, สไตล์ CSS / ตัวเลือก, การแก้ไขข้อผิดพลาด ฯลฯ " กำลังเพิ่มฟังก์ชันนี้ผ่านทาง javascript ซึ่งเบราว์เซอร์ไม่สนับสนุน
Calvin Froedge

1
ฉันคิดว่าคำว่า Polyfills เกิดขึ้นหลังจาก HTML5 Shim แตกต่างจาก Polyfills หรือไม่?
Jitendra Vyas

16
ชิมเป็นแนวทั่วไปมากขึ้น polyfill เป็นประเภทของชิม นี่เป็นคำถามที่อธิบายได้ดี: stackoverflow.com/questions/6599815/…
Calvin Froedge

6
remysharp.com/2010/10/08/what-is-a-polyfillลิงก์นี้เป็นมากกว่า "โพสต์ที่ดี" จริงๆแล้วมันเป็นคำจำกัดความที่สมบูรณ์ & ที่มาของคำโดยบุคคลที่สร้างคำขึ้นมา ข้อความที่ตัดตอนมา: "ผลิตภัณฑ์ Polyfilla (spackling ในสหรัฐอเมริกา) เป็นยาที่สามารถใส่เข้าไปในผนังเพื่อปกปิดรอยแตกและรู" โพสต์ยังครอบคลุมแนวคิดที่ชิมก่อนหน้าและแตกต่างจาก polyfill มันเป็นสิ่งที่ต้องอ่าน IMO
aaron-coding

64

ก่อนอื่นมาอธิบายให้ชัดเจนว่า polyfil ไม่ได้เป็นอย่างไร: polyfill ไม่ได้เป็นส่วนหนึ่งของมาตรฐาน HTML5 Nor เป็น polyfill จำกัด จาวาสคริปต์แม้ว่าคุณมักจะเห็น polyfills ถูกอ้างถึงในบริบทเหล่านั้น

คำว่า polyfill นั้นอ้างถึงรหัสบางส่วนที่ "อนุญาตให้คุณมีฟังก์ชั่นเฉพาะบางอย่างที่คุณคาดหวังในเบราว์เซอร์ปัจจุบันหรือ" ทันสมัย ​​"เพื่อทำงานในเบราว์เซอร์อื่น ๆ ที่ไม่ได้รับการสนับสนุนสำหรับการทำงานนั้น ๆ

แหล่งที่มาและตัวอย่างของ polyfill ที่นี่:

http://www.programmerinterview.com/index.php/html5/html5-polyfill/


31

โพลีฟิลเป็นส่วนหนึ่งของรหัส (หรือปลั๊กอิน) ที่ให้บริการเทคโนโลยีที่คุณผู้พัฒนาคาดหวังว่าเบราว์เซอร์จะให้บริการแบบเนทีฟ


2
อธิบายได้ดี
Eugen Sunic

16

polyfill คือ shim ซึ่งแทนที่การโทรเดิมด้วยการเรียกไปที่ shim

ตัวอย่างเช่นสมมติว่าคุณต้องการใช้วัตถุ navigator.mediaDevices แต่ไม่ใช่ทุกเบราว์เซอร์ที่รองรับสิ่งนี้ คุณนึกภาพห้องสมุดที่ให้ชิมซึ่งคุณอาจใช้ในลักษณะนี้:

<script src="js/MediaShim.js"></script>
<script>
    MediaShim.mediaDevices.getUserMedia(...);
</script>

ในกรณีนี้คุณเรียก shim อย่างชัดเจนแทนที่จะใช้วัตถุหรือวิธีการดั้งเดิม ในทางตรงกันข้าม polyfill แทนที่วัตถุและวิธีการในวัตถุต้นฉบับ

ตัวอย่างเช่น:

<script src="js/adapter.js"></script>
<script>
    navigator.mediaDevices.getUserMedia(...);
</script>

ในรหัสของคุณดูเหมือนว่าคุณกำลังใช้วัตถุ navigator.mediaDevices มาตรฐาน แต่จริงๆแล้ว polyfill (adapter.js ในตัวอย่าง) ได้แทนที่วัตถุนี้ด้วยตัวของมันเอง

สิ่งที่มันแทนที่ด้วยมันคือชิมแปนซี สิ่งนี้จะตรวจสอบว่าคุณลักษณะนั้นได้รับการสนับสนุนตามธรรมชาติและใช้งานได้หรือไม่หรือมันจะแก้ไขโดยใช้ API อื่นหากไม่ได้ใช้

ดังนั้นโพลีฟิลล์จึงเป็นแบบ "โปร่งใส" และนี่คือสิ่งที่ Remy Sharp (ซึ่งเป็นคนบัญญัติศัพท์คำ) หมายถึงเมื่อพูดว่า " ถ้าคุณลบสคริปต์ polyfill รหัสของคุณจะยังคงทำงานต่อไปโดยไม่มีการเปลี่ยนแปลงใด ๆ ที่จำเป็นแม้ว่าโพลีจะถูกลบ "


9
ชิมคืออะไร?
Oliver Watkins

3
@Oliver Watkins ถ้าคุณคุ้นเคยกับรูปแบบของอะแดปเตอร์แล้วคุณจะรู้ว่า shim คืออะไร Shims สกัดการเรียก API และสร้างเลเยอร์นามธรรมระหว่างผู้โทรและเป้าหมาย โดยทั่วไปจะใช้ shims เพื่อความเข้ากันได้แบบย้อนหลัง
Anurag Ratna

@AnuragRatna ฉันจะไม่ใช้ 'การสกัดกั้น' เพื่อหลีกเลี่ยงความสับสน .. การสกัดกั้นมักจะหมายถึงรหัสที่สกัดกั้น (โปร่งใส) เช่นไม่มีผู้โทรที่รู้ Shims ให้การเรียกใช้ API สำหรับความเข้ากันได้แบบย้อนหลัง
Qetesh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.