เวลาใช้ในการทำงาน
คำสั่งไม่หยุดหรือรอบางสิ่งบางอย่างเสียเวลา
จริง ๆ แล้วมันทำงานที่ใช้เวลา อาจใช้เวลามากที่สุดโดยเพิ่มความล่าช้าเครือข่ายขนาดเล็กหลายรายการ แต่อาจเป็นไปได้ว่ามีความล่าช้าในด้าน youtube ที่เพิ่มขึ้น
แค่เพียงเวลาดาวน์โหลด HTML ที่จำเป็นเท่านั้น
คำสั่งจำเป็นต้องทำการร้องขอ HTTP อย่างน้อยสองคำร้องต่อกันและอาจมากกว่า
ดังนั้นหากมีสิ่งใดที่ช้ามันจะถูกคูณด้วยจำนวนคำขอที่มีอยู่แล้ว
สำหรับฉันใช้เวลา 1.5 วินาทีบนสายที่เร็วมาก - ซึ่งไม่ไกลจาก 8 วินาที
วิธีการหา
ฉันจะแสดงคำสั่งที่ฉันใช้เพื่อค้นหา:
เพื่อให้ตัวอย่างเป็นระเบียบมากขึ้นเราใช้ตัวแปรสำหรับ URL:
$ u="https://www.youtube.com/watch?v=k4JGSAmu4lg"
เราต้องการวัดระยะเวลาของคำสั่ง; การใช้คำสั่งtime
ต้องระวังไม่ให้มิกซ์คำสั่งกับเชลล์บิวด์อิน เราใช้ฟังก์ชั่นเล็ก ๆ เพื่อทำให้เส้นสั้นลง:
$ t(){/usr/bin/time -f 'Time: %es' "$@";}
คำสั่งของคุณเขียน URL ของไฟล์วิดีโอ (ตัดออกเป็น 80 คอลัมน์):
$ youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823
ลองวัดเวลาที่ใช้ในคอมพิวเตอร์ของฉัน:
$ t youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823
Time: 1.44s
ตกลงหนึ่งและครึ่งวินาที เร็วกว่าในคำถาม แต่ไม่เร็วเท่าไหร่ แต่มันใช้เวลาอย่างไร อาจจะดาวน์โหลดวิดีโอในทางที่ซ่อนอยู่และทิ้งมันไป? วิดีโอคือ 11 นาทีใน 360p เพียงดาวน์โหลดโดยไม่มีตัวเลือกใช้เวลาประมาณ 13 วินาที - นานกว่าสิบเท่า
จำเป็นต้องดูอย่างใกล้ชิดด้วยตัวเลือก verbose -v
:
$ t youtube-dl -v -g "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-g', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?sparams=id%2Cinitcwn
Time: 1.40s
โอ้มีความล่าช้าก่อนที่จะพิมพ์บรรทัด '[debug]' ดูเหมือนว่าyoutube-dl
ใช้เวลาในการตั้งค่าการกำหนดค่าของตัวเอง มันเป็นหนึ่งในสี่ของวินาทีหรือมากกว่านั้นไม่ใช่ความล่าช้าที่เรากำลังมองหา แต่สิ่งที่เราสามารถเรียนรู้ได้จากมันคือการyoutube-dl
ใช้งานเองอาจช้า
หลังจากข้อความแล้วจะไม่มีอะไรเกิดขึ้นจนกว่าจะพิมพ์ URL ผลลัพธ์ ดังนั้นเรายังไม่เห็นส่วนที่น่าสนใจ
ตัวเลือก-g
คือ "จำลอง" การดาวน์โหลดวิดีโอในแง่ที่ว่ามันเป็นส่วนที่ซับซ้อนในการค้นหา URL กึ่งลับนั้นพิมพ์ออกมา แต่จากนั้นข้ามการดาวน์โหลดจริงในตอนท้าย มีตัวเลือกที่คล้ายกัน-s
ที่ไม่ได้ส่งออก URL และดูเหมือนว่าจะเป็นอย่างอื่น สมมติว่ามันคล้ายกันมากถ้าใช้เวลาประมาณเดียวกัน เราต้องตรวจสอบสิ่งนั้น
$ t youtube-dl -v -s "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-s', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
[youtube] Setting language
[youtube] k4JGSAmu4lg: Downloading webpage
[youtube] k4JGSAmu4lg: Downloading video info webpage
[youtube] k4JGSAmu4lg: Extracting video information
Time: 1.45s
ตกลง-s
ใช้เวลาเหมือนกัน-g
ดังนั้นจึงเป็นการดีที่จะแทนที่พวกเขาสำหรับการทดสอบ
ที่น่าสนใจกว่าคือตอนนี้เราได้ผลผลิตเพิ่มขึ้นแล้ว และมันถูกพิมพ์โดยมีช่วงเวลาที่น่าสนใจ: เส้นที่พิมพ์ออกมามีความล่าช้าคล้าย ๆ กันดังนั้นดูเหมือนว่าพวกมันจะเกี่ยวกับการกระทำที่ใช้เวลาจริงในการค้นหา
จากข้อความจะมีการดาวน์โหลดหน้าเว็บอย่างน้อยสองหน้า แต่เราสามารถสันนิษฐานได้ว่าคำว่า "หน้า" จะไม่หมายถึงคำขอ HTTP เดียวและเอกสาร HTML เดียว
เราเรียนรู้อะไร
ประเด็นหลักคือการทำงานของโปรแกรมใช้เวลาจริงไม่รออะไรหรือแขวน
นอกจากนี้เราเห็นหลายขั้นตอนใช้เวลาใกล้เคียงกัน การคำนวณนั้นมีไม่มากนักดังนั้นมันจึงเป็นการปัดเศษของเครือข่ายด้วยวิธีใดวิธีหนึ่งเพิ่มขึ้น
นั่นหมายความว่าความล่าช้าในการเชื่อมต่อของเรามีความสำคัญเฉพาะที่นี่ ทรูพุตของการเชื่อมต่อนั้นไม่เกี่ยวข้องเลย
หากคุณจะทำให้การเชื่อมต่ออินเทอร์เน็ตของคุณเร็วขึ้นดังนั้นมันสามารถถ่ายโอนข้อมูลด้วยความเร็วสองเท่าซึ่งไม่ได้ช่วยอะไรเลย แต่ถ้าคุณได้ping
เวลาที่ดีกว่านั่นจะทำให้เร็วขึ้นมาก
แม้ว่ามันจะไม่เกี่ยวกับ 'ping' กับผู้ให้บริการอินเทอร์เน็ตของคุณ เวลา ping ตลอดจน YouTube สิ่งที่สำคัญ - และอาจไม่สามารถเปลี่ยนแปลงได้
ที่น่าสนใจสำหรับขั้นตอนต่อไปคือการดาวน์โหลดวิดีโอข้อกำหนดสำหรับสายด่วนนั้นตรงกันข้าม: latency ไม่เกี่ยวข้องเลยและทรูพุตมีความสำคัญจริงๆ
ไม่เหนื่อยเหรอ?
ต้องการรายละเอียดเพิ่มเติมเพื่อทำความเข้าใจว่าเวลาจริง ๆ ใช้เวลาเท่าไร?
ขั้นตอนต่อไปคือการติดตามการเชื่อมต่อ HTTP; ฉันสงสัยว่ามันอาจแสดง roundtrips มากกว่าสองตัวอย่างเช่นการเปลี่ยนเส้นทาง คุณสามารถใช้wireshark
หรือพร็อกซี HTTP การบันทึกหรือstrace
เพียงแค่นับการเรียกระบบสำหรับการเชื่อมต่อหรือการเขียน
สำหรับวันนี้เราทั้งคู่มองลึกเข้าไปในโพรงกระต่ายของเครือข่าย