The Jerusalem Post‘Hager (Land),’ an epic story of Ethiopian immigrants, wins Best Israeli Film at Haifa festESPNWeek 5 Power Rankings: Miami moves up, Missouri and Pitt join the top 25PunchTwo dead, one missing as floods hit Spain cityDaily MaverickSOCIAL (IN)SECURITY: A Cape Town mother buys bread on credit to stretch her children’s grants, then spends payday settling the debtRTP Desporto12h30 Henrique Calisto quer saída digna para Cristiano RonaldoSky TG24Istat, la pressione fiscale aumenta al 43,5%. Cala il potere d'acquisto delle famiglieZDF heuteAktuelle Pressemitteilungen des ZDFObservador DesportoAs notícias das 13hGlobal NewsU.S. Coast Guard suspends search for missing Ontario air ambulanceStraits Times SportFrom jiu-jitsu fighter Noah Lim a lovely lesson: Grace after gritABC NewsSouth Korea blames North Korean mines for border blast injuries and demands apologyسكاي نيوز عربيةمقاعد من الركام.. رحلة غزاوي لإعالة أسرته ومساعدة الطلاب
The Daily Newsstand · Free, Always
Monday, October 5, 2026

Меня достала реклама, и я сделал свой торрент-клиент для Windows

Translate

Меня достала реклама в торрент-клиентах. Я открываю такую программу с довольно скромным намерением: скачать файл, посмотреть скорость и свернуть окно. Предложение купить что-нибудь ещё в этот сценарий у меня не помещается.

В какой-то момент захотелось сделать клиент под себя. С приятным интерфейсом, выбором файлов перед загрузкой и нормальным поведением в фоне. Так появился Tern, бесплатный торрент-клиент для Windows с открытым кодом под MIT.

На момент написания статьи опубликована версия 1.2.0. По пути к ней пришлось разбираться с зависаниями на больших торрентах, ценой красивой полоски прогресса и удалением файлов. Последнее оказалось заметно сложнее, чем нарисовать кнопку с корзиной.

Главное окно Tern в тёмной теме

Главное окно Tern в тёмной теме

Интерфейс Tern с демонстрационными загрузками. Скриншоты в статье сделаны на тестовых данных; показанные скорости не являются результатами бенчмарка.

Реклама была первым поводом

У µTorrent Classic отсутствие рекламы выделено в отдельную платную редакцию Ad-Free. Это можно увидеть прямо на странице сравнения версий. Я понимаю, что разработку нужно оплачивать. Просто у меня нет желания видеть рекламу внутри утилиты для скачивания файлов.

При этом хорошие альтернативы уже существуют. qBittorrent открыт и не содержит рекламы, а у Transmission прямо заявлены отсутствие рекламных дополнений и отслеживания пользователей. Для избавления от баннеров вполне достаточно установить один из них.

Собственный клиент понадобился мне ещё и потому, что хотелось самому определять, как он выглядит и ведёт себя. Какие действия доступны из главного окна, что происходит после нажатия на крестик, как устроено обновление. И иметь возможность исправить то, что раздражает.

Я хотел оставить в центре внимания загрузки: название, состояние, скорость, оставшееся время, нужные файлы. Настройки очереди и ограничения скорости тоже нужны, но открывать их при каждом запуске я не собираюсь. Из этих довольно бытовых пожеланий и сложился Tern.

Как это выглядит в работе

Tern принимает .torrent-файлы и magnet-ссылки. Перед началом загрузки можно выбрать папку и убрать галочки с ненужных файлов. Набор скачиваемых файлов можно изменить и позже: например, сначала скачать один файл из раздачи, а потом вернуться за остальными.

В главном окне есть список торрентов, поиск, сортировка и фильтры по состоянию. Под выбранной загрузкой открывается панель с файлами, трекерами и сведениями о раздаче. Там же можно поставить торрент на паузу или изменить его место в очереди.

Вместо сплошной полосы прогресса я добавил карту частей торрента. Она показывает, как собирается загрузка: в списке это узкая полоса, в подробностях ещё и небольшая мозаика. В работающем клиенте рисунок строится по состоянию частей. Мне нравится, что по нему видно чуть больше, чем просто «62%».

Светлая и тёмная темы следуют настройке Windows. Интерфейс сейчас на русском.

Главное окно Tern в светлой теме

Главное окно Tern в светлой теме

Светлая тема, те же демонстрационные данные.

Из повседневных вещей есть ограничения скорости скачивания и отдачи, лимит одновременных загрузок, раздача после завершения и необязательный автозапуск вместе с Windows.

Tern можно назначить обработчиком .torrent и magnet:. Кнопка «Сделать по умолчанию» регистрирует приложение и открывает настройки Windows. Сам выбор остаётся за пользователем.

Да, внутри Electron

Стек проекта: Electron, обычные HTML/CSS/JavaScript для интерфейса и WebTorrent в качестве торрент-движка. За обновления отвечает electron-updater.

Готовый движок дал возможность сосредоточиться на приложении: интерфейсе, работе с файлами, интеграции с Windows. Реализацию BitTorrent с нуля я не писал. WebTorrent работает внутри настольного приложения и подключается к обычным BitTorrent-пирам.

У Electron есть цена в размере дистрибутива и памяти. Поэтому называть Tern самым лёгким торрент-клиентом я не буду. Для меня практический вопрос был в том, какую лишнюю работу приложение делает, пока я им не пользуюсь.

При закрытии в трей Tern уничтожает окно и освобождает его renderer. При повторном открытии создаёт окно заново. Пока видимого окна нет, движок не собирает снимки состояния для списка загрузок, а служебный таймер приложения работает реже. Скачивание и раздача при этом продолжаются.

Это убирает работу, которая нужна только интерфейсу. Сеть, запись на диск и проверка данных всё равно требуют ресурсов, даже если окно закрыто.

Потом мой клиент сам начал тормозить

На больших торрентах и высокой скорости ранние версии Tern начали подвисать. Получилось неловко: хотелось удобную утилиту, а пришлось чинить свою.

Одна из причин была в повторных обходах частей торрента. После получения очередной части движок мог снова просматривать длинный уже проверенный участок файла. Отдельно похожую работу делали проверки интереса пиров и расчёт прогресса для интерфейса. На большом количестве частей эти проходы становились дорогими.

Добавлялась частота сетевых событий. При 60 МиБ/с блоки размером 16 КиБ поступают примерно 3840 раз в секунду. Если после каждого блока заново запускать часть логики пополнения запросов к пирам, небольшая операция превращается в постоянную нагрузку.

В результате в Tern появились несколько изменений:

  • Сеть, хеширование и работа с диском вынесены в отдельный utilityProcess Electron. Главный процесс, который управляет окном, не выполняет эту работу в своём цикле событий.

  • Пополнение запросов к пирам объединяется в короткие пачки с таймером на 5 мс.

  • Проверки завершения и интереса пиров учитывают уже проверенный префикс, чтобы не проходить его заново.

  • Список торрентов, вкладка файлов и сохранение состояния используют общий расчёт прогресса.

Проверка хешей при этом осталась включённой.

Для сравнения использовался локальный тест: Windows x64, Ryzen 7 5700X, файл 256 МиБ, части по 4 МиБ и шесть пиров на loopback. Лимит передачи составлял 60 МиБ/с. Выполнены три парных прогона, порядок старого и нового вариантов чередовался.

Показатель

База 1.0.2

Оптимизации 1.0.3

Среднее процессорное время движка на передачу

1,932 с

1,510 с

Средняя скорость

59,56 МиБ/с

60,36 МиБ/с

Максимальные задержки цикла событий в трёх прогонах

516 / 586 / 541 мс

28 / 31 / 30 мс

В этом тесте среднее процессорное время уменьшилось на 21,8%, а полусекундные задержки перестали воспроизводиться. На коротких задержках p95/p99 заметного улучшения не было. Размер и SHA-256 скачанных файлов проверялись.

Эти цифры относятся к движку в конкретном локальном тесте. Они не включают весь интерфейс приложения и не предсказывают результат многочасовой загрузки из интернета. Сравнения с qBittorrent или Transmission здесь тоже нет. Условия, исходные измерения и команду запуска я сохранил в отчёте о производительности.

Есть и цена сопровождения: часть оптимизаций опирается на внутренние методы WebTorrent. Его версия закреплена в зависимостях, а при обновлении движка эти места нужно проверять заново.

Проверка файлов тоже умеет загрузить компьютер

Скачивание оказалось только одной частью задачи. Когда клиент открывает уже существующие файлы и проверяет их целостность, он может активно читать диск и считать хеши, хотя скорость сетевой загрузки равна нулю.

Для этой операции в Tern есть отдельный общий лимит: по умолчанию 256 МиБ/с на все проверяемые торренты. Его можно изменить в настройках или убрать, выставив ноль. К ограничению скорости скачивания он отношения не имеет.

При таком ограничении полная проверка может занимать больше времени. Это осознанный компромисс: мне важнее продолжать пользоваться компьютером во время проверки большого объёма данных. В интерфейсе её прогресс показывается отдельно от скачивания. Методика и результаты тестов этой части лежат в отдельном отчёте.

Удаление, обновления и несколько ограничений

В версии 1.2.0 появилось подтверждение удаления. По умолчанию галочка удаления файлов снята: торрент исчезает из списка, а скачанные данные и исходный .torrent остаются на диске.

Если отметить галочку, Tern отправит скачанные файлы и сохранённый исходный .torrent в корзину Windows. Исходный путь известен для новых импортов обычных .torrent-файлов; у magnet-ссылок и старых записей его может не быть.

Перед отправкой в корзину клиент проверяет пути и принадлежность файлов. Общие файлы других торрентов, изменившийся исходник и небезопасные пути он сохраняет. Если часть файлов удалить не удалось, показывает предупреждение. Подробности поведения описаны в документации удаления.

Обновления приходят из GitHub Releases. Установленное приложение проверяет их перед запуском торрент-движка. Если новая версия есть, скачивает её и перезапускается после установки. При ошибке проверки или загрузки можно повторить попытку либо запустить установленную версию. Дополнительные фоновые проверки отключаются в настройках; проверка при запуске при этом остаётся.

Рекламы и телеметрии в Tern нет. Список загрузок и настройки хранятся локально. Приложение, конечно, общается с торрент-сетью и обращается к GitHub за обновлениями.

Проект пока небольшой. Готовая сборка рассчитана на Windows 10/11 x64, интерфейс доступен только на русском, uTP и web seeds отключены. У установщика ещё нет цифровой подписи, поэтому Windows SmartScreen может показывать предупреждение. SHA-256 опубликован в описании релиза и позволяет сверить скачанный файл, но цифровую подпись не заменяет.

Где попробовать и что мне интересно услышать

Скачать установщик можно со страницы последнего релиза. Исходники, инструкция по сборке и история изменений находятся в репозитории Tern.

Если попробуете клиент, мне особенно полезны конкретные неудобства: где непонятен статус, каких действий не хватает в главном окне, как ведёт себя приложение на больших раздачах. Ошибки можно описать в Issues, а изменения предложить через pull request; для этого есть инструкция для участников.

И мне интересно, что раздражает вас в торрент-клиентах помимо рекламы. Из моих претензий уже получилась отдельная программа. Возможно, следующий полезный пункт обнаружится в комментариях.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.