Праска-чат

Швидкість

Сповіщення є, а повідомлення в чаті немає?

Телефон із карткою сповіщення над екраном і бульбашка чату, що летить у відкритий чат їй назустріч

Якщо сповіщення показує нове повідомлення, а в чаті його ще немає, повідомлення не загубилося. Сповіщення й чат їдуть до тебе різними дорогами, і дорога чату була повільнішою. У Праска-чаті (Iron Messenger) після дотику до сповіщення ця пауза могла тривати близько трьох секунд. Ми знайшли причину у власних логах і прибрали її: відкритий чат тепер одразу питає про нові повідомлення, а застосунок, що повертається після короткої перерви, отримує лише пропущене, а не завантажує все наново.

Чому сповіщення приходить раніше за повідомлення?

Поки Праска-чат відкритий на екрані, він тримає одне живе з’єднання з нашим сервером. Сервер надсилає туди кожне нове повідомлення тієї ж миті, коли зберігає його, тож відкритий чат оновлюється сам. Ніхто не питає «є щось нове?» за таймером.

Коли ти перемикаєшся на інший застосунок, Праска-чат закриває це з’єднання. З’єднання, відкрите у фоні, не дає радіомодулю заснути й з’їдає батарею, та й Android таких застосунків не любить. Відтак наш сервер достукується до тебе через пуш-сервіс телефона: Firebase Cloud Messaging від Google на більшості Android-телефонів або Huawei Push Kit на телефонах Huawei без сервісів Google. Пуш-сервіс показує сповіщення, навіть коли Праска-чат зовсім не запущений.

Отже, сповіщення — це швидка дорога. Чат — повільна: коли ти торкаєшся сповіщення, застосунок прокидається, з’єднується знову й питає, що нового. Якась пауза між ними є в кожному месенджері. Питання лише в тому, наскільки вона довга.

Що ми знайшли, коли це сталося з нами?

24 жовтня хтось із нас помітив це у власній робочій групі. Прийшло сповіщення, дотик відкрив групу, а нового повідомлення там не було. Воно з’явилося секунди за три. Це недовго, але досить, щоб подумати, що застосунок загубив повідомлення.

Логи сервера розповіли все з точністю до секунди. Спершу повідомлення збереглося, і лише потім пішло сповіщення. Коли телефон повернувся, усі його запити прийшли протягом однієї секунди, і на кожен сервер відповів менш ніж за секунду. Сервер не гальмував. Телефон чекав, перш ніж спитати.

Чекав він тому, що відкритий чат покладався на живе з’єднання: воно, мовляв, усе й наздожене. Застосунок мав розбудити радіомодуль, знайти наш сервер, установити шифроване з’єднання, підтвердити, хто ти, підписатися на твої події, і лише після цього питав про нові повідомлення. На щойно розбудженому телефоні ці кроки забирали близько трьох секунд, і весь цей час чат показував стару сторінку. Найгірше було зі сповіщенням із того самого чату, який був відкритий, коли ти виходив: застосунок бачив, що ти вже в ньому, і навіть не оновлював екран.

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

Торкнувся сповіщення — бачиш повідомлення. Без трьох секунд витріщання на старий чат.

Завантажити Праска-чат Спробувати в браузері

Що змінилося в Праска-чаті?

  • Відкритий чат питає про нові повідомлення, щойно ти повертаєшся. Він більше не чекає на живе з’єднання: одне й друге відбувається водночас. Після дотику до сповіщення повідомлення з’являється, щойно відповість один короткий запит. Відкритий чат ще й позначається прочитаним, тож галочки в автора теж змінюються тієї ж миті (про галочки — у тексті хто прочитав твоє повідомлення в групі).
  • У фоні застосунок пам’ятає, де зупинився. Для кожної людини наш сервер тримає події за останні 15 хвилин, до 50 штук, і лише в оперативній пам’яті. Якщо ти повертаєшся в межах цього часу, застосунок каже, де зупинився, і отримує тільки пропущене: нові повідомлення, редагування, реакції й галочки прочитання.
  • Старе «друкує…» більше не воскресає. Сигнали набору тексту в цій історії не зберігаються, а застосунок ігнорує застарілі, тож після повернення ти не побачиш, що хтось «друкує», хоча той замовк кілька хвилин тому.
  • Страховка для поганої мережі. Якщо живе з’єднання не піднялося за чотири секунди після повернення (слабкий Wi-Fi, сторінка входу в мережу кав’ярні), застосунок оновлює екран по-старому. А якщо пропущені події приходять уже після цього, він оновлює екран ще раз, щоб лічильник непрочитаних не порахував одне повідомлення двічі.

Чи не з’їдає це батарею або мобільний інтернет?

Навпаки, тепер виходить дешевше. Досі кожне повернення в застосунок наново завантажувало список чатів, а ще й відкритий чат. Список чатів — найбільше, що застосунок завантажує регулярно, бо в ньому по рядку на кожен твій чат.

Тепер повернення в межах 15 хвилин завантажує лише відкритий чат і короткий перелік пропущених подій. Якщо ти повертаєшся до списку чатів, а не в чат, — тільки ці події. Закритий застосунок, як і раніше, не тримає з нами жодного з’єднання: сповіщення доставляє пуш-сервіс телефона. Якщо телефон старенький або інтернет повільний, зазирни в текст про месенджер для старих телефонів і слабкого інтернету.

Месенджер, який сам наздоганяє пропущене. Безкоштовно і без номера телефону.

Завантажити Праска-чат Спробувати в браузері

Коли я отримаю виправлення?

  • Android і Windows: з оновленням після версії 3.9.0. Якщо в тебе версія 3.9.0 чи старіша, пауза ще є. Повідомлення не губиться: зачекай мить, і воно з’явиться.
  • Веб-версія на m.ironmess.app: з її наступною публікацією. Після неї просто онови сторінку.
  • Праска-лайт, застосунок для слабких телефонів, має те саме виправлення, і воно вийде в наступній збірці.
  • iPhone: застосунку для iPhone немає, тож і оновлювати нічого.

Події, які сервер тримає для застосунку, що повертається, живуть у його пам’яті 15 хвилин і ніде не записуються. Що й скільки зберігає Праска-чат, розповідаємо в тексті про те, як влаштована приватність у Праска-чаті. А який застосунок ставити на який пристрій, — у тексті Праска-чат на Android, Windows і в браузері.

Часті питання

Чому Праска-чат показує сповіщення раніше, ніж повідомлення з'являється в чаті?

Сповіщення приходить через пуш-сервіс телефона, а чат Праска-чату оновлюється через власне з'єднання, яке відновлюється, коли ти відкриваєш застосунок. З оновленням після версії 3.9.0 відкритий чат одразу питає про нові повідомлення.

Чи губиться повідомлення, якщо Праска-чат показав сповіщення, а чат порожній?

Ні. Праска-чат зберігає повідомлення на сервері ще до того, як надсилає сповіщення, тож воно вже там. Чат покаже його, щойно застосунок про нього спитає.

Чи тримає Праска-чат з'єднання відкритим у фоні?

Ні. Праска-чат закриває живе з'єднання у фоні й покладається на пуш-сповіщення, що береже батарею. Якщо повернутися протягом 15 хвилин, він отримає лише пропущені події.

У якій версії Праска-чату є це виправлення?

Праска-чат для Android і Windows має виправлення з оновлення після версії 3.9.0, а веб-версія — з наступної публікації. Праска-лайт отримає його в наступній збірці.

Досить читати. Напиши комусь.

Безкоштовно на Android, Windows і в браузері. Без номера телефону, без стрічки, без реклами.