Мой блог
Как я создал свой торрент-клиент Tern без рекламы и лишнего мусора
Подробности изложены в материале первоисточника. Меня давно утомляла назойливая реклама в классических программах для скачивания файлов. Когда запускаешь утилиту, хочется просто получить нужный контент, оценить скорость и свернуть окно, а не изучать маркетинговые баннеры. Именно поэтому я решил написать собственный торрент-клиент — подробнее об этом проекте можно прочитать в моей оригинальной статье на Хабре.
Так появился Tern — бесплатный инструмент для Windows с открытым исходным кодом, распространяемый под лицензией MIT. Разрабатывая его с нуля под свои привычки, я стремился сделать программу максимально аккуратной, быстрой и лишённой всего наносного.


Почему стандартные решения перестали меня устраивать
Главным толчком к разработке стало засилье рекламы. Например, в µTorrent Classic разработчики даже выделили избавление от баннеров в отдельную платную редакцию Ad-Free. Конечно, труд программистов должен оплачиваться, но видеть коммерческие предложения внутри утилиты для загрузки файлов мне откровенно надоело.
Конечно, на рынке есть отличные альтернативные варианты вроде qBittorrent или Transmission, которые изначально лишены рекламных модулей и трекеров. Тем не менее, мне захотелось самостоятельно контролировать каждую мелочь: как выглядит интерфейс, что происходит при закрытии окна, каким образом доставляются обновления и как программа ведет себя в фоновом режиме.
Особенности интерфейса и повседневная работа
Архитектура приложения заточена под то, чтобы не отвлекать пользователя от главного. Интерфейс принимает стандартные торрент-файлы и magnet-ссылки, позволяя детально настроить загрузку еще до ее старта.
Управление файлами и визуализация прогресса
Перед началом процесса можно сразу указать нужную директорию и снять галочки с тех файлов, которые скачивать не требуется. При необходимости состав раздачи легко скорректировать и позже. Главное окно включает в себя удобный поисковик, систему сортировки и фильтры по текущему состоянию загрузок.
Вместо привычной монолитной шкалы выполнения я реализовал наглядную карту частей. В общем списке она отображается в виде компактной полоски, а на детальной панели превращается в подробную мозаику, позволяющую в реальном времени видеть процесс сборки данных.
Интеграция с системой
Программа поддерживает темную и светлую темы оформления, автоматически подстраиваясь под параметры операционной системы Windows. Интерфейс полностью переведен на русский язык. Пользователь может гибко ограничить скорость отдачи и скачивания, задать лимит одновременных задач и активировать интеграцию с системными ассоциациями файлов.
Технологический стек и оптимизация работы в фоне
В основе проекта лежат технологии Electron и веб-технологии HTML/CSS/JavaScript для отрисовки интерфейса, а за непосредственную сетевую часть отвечает движок WebTorrent. Использование готового движка позволило мне полностью сосредоточиться на юзабилити, стабильности и взаимодействии с файловой системой Windows.
Поскольку приложения на Electron часто критикуют за потребление памяти, я уделил особое внимание фоновому поведению. Когда пользователь закрывает окно, Tern полностью уничтожает процесс визуализации (renderer) и освобождает ресурсы. Пока интерфейс неактивен, фоновые таймеры замедляют свою работу, а скачивание и раздача при этом продолжают идти в штатном режиме.
Борьба с зависаниями и оптимизация производительности
На больших объемах данных и высокой скорости скачивания ранние версии утилиты начинали заметно притормаживать. Проблема крылась в частых повторных обходах уже проверенных участков файлов и избыточной частоте сетевых запросов при интенсивном входящем потоке данных.
Чтобы избавиться от микролагов, я внедрил несколько важных архитектурных улучшений:
- Сетевые операции, хэширование и дисковый ввод-вывод были вынесены в отдельный изолированный utilityProcess.
- Запросы к пирам теперь объединяются в короткие пачки с помощью таймера на 5 миллисекунд.
- Проверки интереса пиров стали учитывать уже пройденный префикс данных, исключая лишние вычисления.
- Алгоритмы расчета прогресса для главного окна были объединены в общие процедуры.
Проведенные локальные тесты показали снижение среднего процессорного времени движка более чем на 21% и полное устранение неприятных полусекундных задержек интерфейса.
Проверка целостности данных и безопасное удаление
Интенсивное чтение диска во время предварительной хэш-проверки существующих файлов способно сильно нагрузить систему. Чтобы этого избежать, в программе предусмотрен отдельный регулируемый лимит скорости проверки, который можно настраивать независимо от ограничений интернета.
В последних версиях также появилась продуманная система удаления. При стирании раздачи можно отправить файлы и исходный торрент в корзину Windows, причем утилита предварительно проверяет пути, защищая общие файлы других задач от случайного повреждения.

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