Почему сообщения с большим количеством эмодзи могут замедлять работу вашего приложения на телефоне

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

Вы отправляете сообщение в групповом чате. Через несколько секунд ветка взрывается реакциями, стикерами и стеной эмодзи. Затем ваше приложение зависает, тормозит или тратит целую вечность на загрузку остальной части переписки. Вы перезапускаете приложение, думаете, что это баг, и идёте дальше. Но реальное объяснение интереснее, чем программный сбой, и оно напрямую связано с тем, как эмодзи на самом деле работают «под капотом».

Ключевые выводы:

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

Эмодзи — это не просто текстовые символы

Большинство людей воспринимают эмодзи как обычный текст. Вы вводите сокращение, и появляется жёлтый смайлик. Дело сделано. Но за этой крошечной графикой происходит гораздо больше, чем вы можете ожидать.

Почему сообщения с большим количеством эмодзи могут замедлять работу вашего приложения на телефоне

Эмодзи находятся на пересечении двух миров. Первый — это стандарт Unicode, который присваивает каждому эмодзи определённую кодовую точку, по сути, уникальный идентификационный номер. Второй — это уровень визуального отображения, и вот здесь всё усложняется. Согласно стандарту символов Unicode, спецификация Unicode теперь охватывает более 3600 кодовых точек эмодзи, и многие из них имеют несколько визуальных вариаций.

WhatsApp использует собственную графику эмодзи. Slack использует другой набор. Apple, Google и Microsoft поддерживают отдельные библиотеки изображений. Поэтому, когда вы получаете сообщение, наполненное эмодзи от контакта на другом устройстве или в другой версии приложения, на вашем телефоне может не оказаться локальных копий этих точных изображений. Ему приходится загружать их с сервера доставки контента. Эта загрузка занимает время. При быстром соединении это незаметно. При медленном или перегруженном — время накапливается.

Объяснение проблемы загрузки ресурсов

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

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

Emojiguide.com отслеживает обширный каталог этих ресурсов, и поражает количество различных файлов изображений, поддерживающих один эмодзи на разных платформах. Простой большой палец вверх — это не одно изображение. Это потенциально десятки, распределённые по тонам кожи, версиям платформ и размерам отображения. Когда ветка содержит 40 или 50 различных эмодзи от нескольких отправителей, вы можете инициировать 40 или 50 отдельных запросов ресурсов в быстрой последовательности.

Почему мобильные соединения усугубляют ситуацию

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

Каждая загрузка ресурса включает в себя цикл. Ваш телефон отправляет запрос на сервер, сервер его обрабатывает, и ответ возвращается обратно. При стабильном соединении LTE или 5G один цикл может занять от 20 до 50 миллисекунд. При слабом соединении 3G или в переполненном стадионе он может растянуться до 300, 500 или даже 1000 миллисекунд на запрос.

Умножьте это на 40 эмодзи в одной ветке. Даже если каждый запрос стоит дополнительных 100 миллисекунд, вы получаете четыре полных секунды дополнительной задержки, прежде чем ветка полностью отобразится. Вот то самое торможение и зависание, которое вы винили в приложении.

Как помогает кэширование и где его возможности ограничены

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

Проблемы возникают в нескольких конкретных ситуациях:

  • Вы присоединяетесь к новому групповому чату с незнакомыми контактами, которые используют эмодзи, с которыми вы раньше не сталкивались.
  • Обновление приложения очищает локальный кэш, вынуждая повторно загружать все ресурсы.
  • Вы меняете устройство или переустанавливаете приложение, начиная с нуля.
  • Эмодзи представляют собой сложные последовательности или новые дополнения, которые ваша текущая версия приложения обрабатывает иначе, чем версия отправителя.

В любом из этих случаев ваш телефон снова начинает выполнять «живые» серверные запросы для изображений, которых у него нет в локальном хранилище. При стабильном соединении вы этого почти не заметите. При нестабильном — качество работы быстро ухудшается.

Как определить реальное узкое место

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

Способ выяснить это прост. Прежде чем винить приложение, запустите тест скорости мобильного интернета, чтобы в реальном времени увидеть фактическую скорость загрузки, скорость выгрузки и пинг. Обратите особое внимание на значение пинга. Пинг измеряет время, необходимое для того, чтобы небольшой пакет данных дошёл от вашего телефона до сервера и обратно, и выражается в миллисекундах. Пинг ниже 50 мс — отлично. Выше 150 мс — вы начнёте замечать задержки в приложениях, требовательных к ресурсам. Выше 300 мс — даже скромная ветка, насыщенная эмодзи, будет работать медленно.

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

Различия платформ и что они значат для вас

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

WhatsApp довольно агрессивно сжимает медиаресурсы, чтобы поддерживать скорость работы на слабых соединениях. Slack, разработанный в первую очередь для настольного использования, как правило, отдаёт приоритет качеству изображения и загружает больше ресурсов на одну ветку. Это одна из причин, по которой Slack может казаться заметно тяжелее на мобильных устройствах, особенно в каналах, где люди в течение дня часто публикуют реакции-эмодзи.

Telegram находится где-то посередине, предлагая настраиваемые параметры загрузки медиа, которые позволяют пользователям решать, сколько предварительно кэшировать. Понимание того, какое приложение вы используете и как оно управляет ресурсами, помогает установить правильные ожидания и решить, когда стоит разбираться с замедлением.

Сетевая задержка и как она накапливается

Техническая концепция, лежащая в основе всего этого, — сетевая задержка, то есть задержка между отправкой запроса и получением ответа. Задержка накапливается, когда несколько запросов должны выполняться последовательно, а не параллельно. Большинство современных приложений группируют запросы или используют мультиплексирование HTTP/2 для обработки нескольких запросов одновременно, но есть пределы. Когда десятки ресурсов необходимо загрузить одновременно, даже мультиплексированные соединения испытывают нагрузку при низкой пропускной способности или высокой задержке мобильных каналов.

Вот почему одна и та же ветка с эмодзи, которая мгновенно загружается дома по Wi-Fi, может казаться невыносимо медленной в поезде или в подвале. Контент не изменился. Ресурсы имеют тот же размер. Единственная переменная — это качество соединения, и эта единственная переменная может означать разницу между плавной работой и застывшим экраном.

Что вы можете сделать прямо сейчас

Вам не обязательно мириться с медленной работой приложения. Несколько практических настроек дадут заметный эффект:

  • По возможности переключайтесь на Wi-Fi для групповых чатов с большим количеством эмодзи, особенно в больших ветках.
  • Проверьте уровень сигнала, прежде чем делать вывод, что приложение сломалось.
  • Периодически очищайте кэш приложения, чтобы удалить устаревшие или повреждённые ресурсы, а затем дайте ему восстановиться при стабильном соединении.
  • Уменьшите настройки автоматической загрузки медиа в таких приложениях, как WhatsApp и Telegram, если вы часто находитесь в зонах со слабым сигналом.
  • Регулярно обновляйте свои приложения для обмена сообщениями, так как новые версии часто содержат улучшенную логику кэширования и лучше сжатые библиотеки ресурсов.

Почему ваш чат тормозит и что делать дальше

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

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

Читать о Почему сообщения с большим количеством эмодзи могут замедлять работу вашего приложения на телефоне на