Skip to content

perf(tiktok): короткие ссылки без второй загрузки страницы, карусели быстрее - #118

Open
catboysense wants to merge 1 commit into
masterfrom
claude/trusting-heisenberg-l2pp3x
Open

catboysense wants to merge 1 commit into
masterfrom
claude/trusting-heisenberg-l2pp3x

Conversation

@catboysense

@catboysense catboysense commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Ускорено скачивание из TikTok: короткие ссылки больше не загружают страницу поста дважды, фото каруселей качаются и обрабатываются параллельно.

Что изменилось

  • Короткие ссылки (vm.tiktok.com, vt.tiktok.com, tiktok.com/t/). После редиректа первый же ответ — это страница поста со всеми данными. Раньше его выбрасывали и запрашивали ту же страницу второй раз, а TikTok рендерит её заново на каждый запрос. Теперь пост берётся из первого ответа. Если поста там нет (вход, проверка на бота, ошибка), страница поста запрашивается, как раньше. Cookies для CDN ставит и этот ответ.
  • Фото-карусели. Шесть загрузок одновременно вместо трёх: CDN картинок TikTok (и TikWM) работает по HTTP/2, всё идёт одним соединением. Каждое фото перекодируется сразу после загрузки, а не все после последней. Фото, которое не удалось обработать, как и раньше переводит попытку на TikWM.

Насколько быстрее

Замеры всей задачи на живом TikTok, два прогона каждой версии:

было стало
tiktok.com/t/… — до начала загрузки видео 1,22 / 1,43 с 0,98 / 0,98 с
vt.tiktok.com/… — до начала загрузки видео 2,48 / 2,19 с 1,51 / 2,04 с
карусель из 16 фото — до готовности 2,98 / 2,38 с 1,66 / 1,99 с
карусель из 2 фото — до готовности 1,37 / 1,34 с 1,01 / 0,79 с

Прямые ссылки на пост и сама скорость скачивания видеофайла не менялись.

Совместимость с #117 (Telegram 13.1.1)

  • Загрузчик и хук отправки в Обновление до Telegram 13.1.1 #117 не менялись, все используемые API те же. Изменения накладываются на feat/telegram-13.1 без конфликтов, тесты TikTok там проходят.
  • В режиме призрака с «Использовать отложку» скачанное видео тоже уходит в отложку: это делает сам enqueueMessages в TelegramCore, и в 13.1.1 он на месте.
  • HEVC 1080p на сайте TikTok сейчас без звуковой дорожки (ссылки /media-video-hvc1/, так же их помечает yt-dlp), поэтому выбор только H.264 оставлен как есть.

Проверено

  • Tests/tiktok_banned_chats: добавлены тесты — короткая ссылка, пришедшая на страницу поста, не запрашивает её снова; TikWM при этом получает чистую ссылку на пост; страница без поста ведёт на страницу поста. На старом коде новый тест падает.
  • Задача целиком прогнана на живых ссылках (видео, карусели, отмена во время загрузки, сбой обработки фото → TikWM).
  • Сборку iOS локально проверить было нельзя: ошибки компиляции, если они есть, покажет сборка этого PR.

…быстрее

Короткая ссылка (vm./vt.tiktok.com, tiktok.com/t/) после редиректа уже
приходит на страницу поста со всеми данными (проверено на живых ссылках),
но её ответ выбрасывался и та же страница запрашивалась второй раз, а
TikTok рендерит её заново на каждый запрос. Теперь пост берётся из первого
ответа; страница поста запрашивается, только если на первой его нет
(вход, проверка на бота, ошибка). Замер: 0,3–1 с на каждой короткой ссылке.
Cookies для CDN ставит и этот ответ, видео качается как раньше.

Фото каруселей: шесть загрузок одновременно вместо трёх (CDN картинок
TikTok и TikWM отвечает по HTTP/2, всё идёт одним соединением), и каждое
фото перекодируется сразу после загрузки, а не все после последней.
Фото, которое не удалось обработать, по-прежнему отправляет попытку в TikWM.
Замер всей задачи на посте из 16 фото: 1,7–2,0 с вместо 2,4–3,0 с.

Тесты: короткая ссылка, пришедшая на страницу поста, не запрашивает её
снова, TikWM при этом получает чистую ссылку на пост, а страница без
поста ведёт на страницу поста.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant