İndirmelerim neden 300 KB/s'de takılıyordu
8 MB/s'lik bir hat, 300 KB/s'lik bir indirme ve yanlış şeyi suçladığım bir hafta. All in One Downloader'daki sınır hiçbir zaman hat değildi — tek bağlantı kullanmaktı.
Belirti basitti: tarayıcıdaki hız testinde rahatça 8 MB/s yapan bir hat, bir videoyu 300 KB/s'de indiriyordu. Önce siteden, sonra internet sağlayıcımdan, sonra bilgisayardan şüphelendim. Hiçbiri değildi.
Sınırlar bağlantı başına
Tek bir indirmeyi yavaşlatan şeylerin neredeyse hepsi dosya başına değil bağlantı başına işliyor. Sunucular her bağlantıyı ayrı kısıyor. Gidiş-dönüş süresi, tek bir TCP akışının aynı anda yolda tutabileceği veri miktarını sınırlıyor. Aradaki bir kutu tek bir akışa "yeter" diyor. Hız testi aynı anda birçok bağlantı açıyor — hızlı görünmesinin sebebi de tam olarak bu.
Çözüm de bir dosyayı tek borudan indirmeyi bırakmak. Artık bir ayar var — dosya başına bağlantı, varsayılan dört — ve iki yerde iş görüyor:
- 01Düz dosyalar gerçekten bölünüyor: her bağlantı kendi bayt aralığını istiyor, kendi konumuna yazıyor ve ne kadar ilerlediğini günlüğe işliyor. Duraklatılan bir indirme yalnızca eksik parçaları sürdürüyor.
- 02Akış halindeki video (HLS ve DASH) zaten parçalardan oluşuyor, ama yt-dlp varsayılan olarak onları tek tek çekiyor — film başına binlerce kez, parça başına bir gidiş-dönüş. Birkaçını aynı anda çekmek aynı fikrin parçalara uygulanmış hali.
GET /video.mp4 Range: bytes=0-104857599 → part 1
GET /video.mp4 Range: bytes=104857600-209715199 → part 2
GET /video.mp4 Range: bytes=209715200-314572799 → part 3
GET /video.mp4 Range: bytes=314572800- → part 4Ne zaman yapmayacağını bilmek
Bölmek yalnızca sunucu aralık isteklerine uyuyorsa işe yarıyor. 206 Partial Content dışında bir şey dönerse indirme, dosyanın başının dört kopyasını yazmak yerine sessizce tek bağlantıya düşüyor. Daha fazlası da her zaman daha iyi değil: sekiz civarını geçince bazı siteler 429 Too Many Requests ile cevap vermeye başlıyor. Dört ile sekiz arasının en iyi aralık olduğu ortaya çıktı.
Darboğaz hiçbir zaman hat değildi. İsteğin biçimiydi.
300 KB/s'de sürünen aynı indirme artık hattı dolduruyor. Arayüz de bunu gösteriyor: süren her aktarım her bağlantı için bir çubuk çiziyor; parçaların sona doğru birbiriyle yarışını izleyebiliyorsun.