Waktu dihabiskan untuk melakukan pekerjaan
Perintah tidak menggantung atau menunggu sesuatu membuang-buang waktu,
itu sebenarnya bekerja yang membutuhkan waktu; Kemungkinan besar membutuhkan waktu dengan menambahkan beberapa penundaan jaringan kecil. Tapi bisa juga ada penundaan di sisi youtube, yang bertambah.
Itu hanya waktu yang diperlukan untuk mengunduh HTML yang diperlukan;
Perintah perlu membuat setidaknya dua permintaan HTTP, satu demi satu, dan mungkin lebih.
Jadi, jika ada yang lambat, sudah dikalikan dengan jumlah permintaan.
Bagi saya perlu 1,5 detik pada jalur yang sangat cepat - tidak jauh dari 8 detik.
Cara mengetahuinya
Saya akan menunjukkan perintah yang saya gunakan untuk mencari tahu:
Untuk membuat contoh lebih rapi, kami menggunakan variabel untuk URL:
$ u="https://www.youtube.com/watch?v=k4JGSAmu4lg"
Kami ingin mengukur durasi perintah; Menggunakan perintah time
perlu berhati-hati untuk tidak mencampur perintah dan shell builtin. Kami menggunakan fungsi kecil untuk membuat garis lebih pendek:
$ t(){/usr/bin/time -f 'Time: %es' "$@";}
Perintah Anda menulis URL file video (terpotong ke 80 kolom):
$ youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823
Mari kita ukur waktu yang diperlukan untuk berjalan di komputer saya:
$ t youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823
Time: 1.44s
Oke, satu setengah detik. Lebih cepat dari pada pertanyaan, tapi tidak lebih cepat. Tapi bagaimana cara menghabiskan waktu? Mungkin itu mengunduh video dengan cara tersembunyi dan membuangnya? Video ini berukuran 11 menit dalam 360p. Mengunduhnya tanpa opsi membutuhkan waktu sekitar 13 - sepuluh kali lebih lama.
Perlu melihat lebih dekat, dengan opsi 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
Oh, ada beberapa keterlambatan sebelum baris '[debug]' dicetak. Sepertinya youtube-dl
menghabiskan waktu untuk pengaturan konfigurasi sendiri. Sekitar seperempat detik, bukan penundaan yang kita cari. Tetapi yang dapat kita pelajari darinya adalah bahwa youtube-dl
implementasinya sendiri mungkin lambat.
Setelah pesan, tidak ada yang terjadi sampai URL hasil dicetak. Jadi kita masih belum melihat bagian yang menarik.
Pilihannya -g
adalah untuk "mensimulasikan" unduhan video dalam arti bahwa ia melakukan bagian yang rumit untuk mengetahui URL semi-rahasia itu, mencetaknya, tetapi kemudian melewatkan unduhan yang sebenarnya pada akhirnya. Ada opsi serupa -s
yang tidak menampilkan URL, dan tampaknya serupa. Mari kita asumsikan itu cukup mirip jika membutuhkan waktu yang hampir bersamaan; Kita perlu memeriksanya.
$ 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
Ok, -s
membutuhkan waktu yang sama -g
, jadi tidak apa-apa untuk menggantinya untuk pengujian.
Lebih menarik adalah bahwa kita mendapat lebih banyak output sekarang. Dan itu dicetak dengan waktu yang menarik: Garis-garis dicetak dengan penundaan yang sama satu sama lain, jadi sepertinya mereka tentang tindakan yang sebenarnya mengambil waktu yang kita cari.
Dari pesan, setidaknya dua halaman web diunduh. Tetapi kita dapat mengasumsikan bahwa kata "halaman" tidak akan berarti satu permintaan HTTP dan satu dokumen HTML.
Apa yang kami pelajari?
Intinya adalah, pekerjaan program sebenarnya membutuhkan waktu, tidak menunggu sesuatu, atau menggantung.
Kami juga melihat beberapa langkah mengambil jumlah waktu yang sama. Tidak banyak yang bisa dihitung, jadi itu adalah perjalanan pulang-pergi dalam beberapa cara, bertambah.
Itu artinya, latensi koneksi kita hanya penting di sini. Throughput koneksi tidak relevan.
Jika Anda membuat koneksi internet Anda lebih cepat sehingga dapat mentransfer data dengan kecepatan ganda - itu tidak akan membantu sama sekali. Tetapi jika Anda bisa mendapatkan ping
waktu yang lebih baik , itu akan membuatnya lebih cepat.
Ini bukan tentang 'ping' kali ke penyedia layanan internet Anda; Waktu ping sampai ke YouTube itu yang penting - dan mungkin tidak mungkin diubah.
Menariknya, untuk langkah selanjutnya, mengunduh video, persyaratan untuk jalur cepat adalah kebalikannya: latensi tidak relevan sama sekali, dan throughput sangat penting.
Belum lelah?
Ingin lebih detail untuk memahami apa yang sebenarnya menghabiskan waktu?
Langkah selanjutnya adalah melacak koneksi HTTP; Saya menduga bahwa itu mungkin menunjukkan lebih banyak bolak-balik daripada dua, untuk pengalihan misalnya. Anda dapat menggunakan wireshark
, atau proksi HTTP logging, atau strace
hanya menghitung panggilan sistem untuk menghubungkan atau menulis.
Untuk hari ini, kami berdua telah melihat cukup dalam ke dalam lubang jaringan kelinci.