ใช้แอตทริบิวต์ preload เพื่อให้คำแนะนำเบราว์เซอร์ว่าควรโหลดสื่อ (Audio/Video) อย่างไรเมื่อโหลดหน้า เพื่อประสบการณ์ผู้ใช้ที่ดีที่สุด ทำงานกับ <audio> และ <video>
ตัวอย่าง
ลองรันโค้ดต่อไปนี้เพื่อใช้งานแอตทริบิวต์ preload:
<!DOCTYPE HTML>
<html>
<body>
<video width="300" height="200" preload="none" controls>
<source src="/html5/foo.ogg" type="video/ogg" />
<source src="/html5/foo.mp4" type="video/mp4" />
Your browser does not support the video element.
</video>
</body>
</html>
ค่าของ preload
| ค่า | คำอธิบาย | เหมาะสำหรับ |
|---|---|---|
none |
ไม่โหลดสื่อล่วงหน้า เฉพาะ Metadata | |
metadata |
โหลด Metadata เท่านั้น (Duration, Dimensions, First frame) | ต้องการแสดง Duration/Poster ก่อนเล่น (Default ในบางเบราว์เซอร์) |
auto |
โหลดทั้งไฟล์ (ถ้าเบราว์เซอร์คิดว่าเหมาะสม) | หน้าที่มีวิดีโอหลัก, คาดว่าผู้ใช้จะเล่นแน่นอน |
| (ไม่ระบุ) | ขึ้นอยู่กับ Browser Default (มักเป็น metadata) | - |
Preload vs Autoplay
| สถานการณ์ | พฤติกรรม |
|---|---|
autoplay (ไม่มี muted) |
Preload = auto (บังคับโหลดเพื่อเล่น) |
autoplay muted |
Preload = auto (บังคับโหลด) |
preload="none" + autoplay |
Autoplay ชนะ - จะโหลดเพื่อเล่น |
การควบคุมด้วย JavaScript
<video id="myVideo" preload="metadata">
<source src="video.mp4">
</video>
<script>
const video = document.getElementById('myVideo');
// ตรวจสอบสถานะโหลด
console.log(video.readyState); // 0=none, 1=metadata, 2=current, 3=future, 4=enough
// เปลี่ยน preload แบบไดนามิก
video.preload = 'auto'; // เริ่มโหลดเต็มที่
// Event เมื่อโหลด Metadata เสร็จ
video.addEventListener('loadedmetadata', () => {
console.log('Duration:', video.duration);
console.log('Dimensions:', video.videoWidth, 'x', video.videoHeight);
});
// Event เมื่อโหลดพอเล่นได้
video.addEventListener('canplay', () => {
console.log('Can start playing');
});
// Event เมื่อโหลดพอเล่นจบโดยไม่หยุด
video.addEventListener('canplaythrough', () => {
console.log('Can play through');
});
</script>
แนวทางปฏิบัติที่ดีที่สุด
- หน้าที่มีวิดีโอหลายตัว: ใช้
preload="none"หรือ"metadata"เพื่อประหยัด Bandwidth - Hero Video (วิดีโอหลัก): ใช้
preload="auto"หรือpreload="metadata"+poster - Mobile: ควรใช้
noneหรือmetadataเสมอ (ประหยัด Data) - Autoplay: ต้อง
mutedไม่งั้นเบราว์เซอร์จะบล็อก
Poster Attribute (รูปปกขณะโหลด)
<video preload="metadata" poster="thumbnail.jpg" controls>
<source src="video.mp4">
</video>