Repository navigation
TaleEngine v1.17.0 Beta
Исправлено
- Интерфейс уезжал за экран после тапа по любому полю (iPhone). Главная
причина «на телефоне не вмещается»: 18 полей ввода имели шрифт 12px, а iOS
Safari принудительно зумит страницу при фокусе на поле мельче 16px — и
обратно сам не отъезжает. Один тап по полю — и весь интерфейс за краем экрана.
На мобильных полям задан шрифт 16px. - Текст вылезал из пузыря сообщения. У
.bubbleне было переноса
неразрывных строк: длинная ссылка, путь к файлу, строка base64 или длинное
слово распирали пузырь и выходили за его границы. Добавленoverflow-wrap,
ссылки и inline-код рвутся принудительно. - Таблицы в ответах ломали вёрстку — теперь прокручиваются внутри пузыря, а
не сплющиваются в нечитаемые столбики по букве. - Панель настроек прокручивалась вбок на телефоне. Ползунки с
width:100%
плюс браузерные поля по 2px вылезали за подпись на 4px. Проверено: переполнений
в панели больше нет. - По кнопкам было трудно попасть пальцем — 22 элемента были высотой 24–32px
при рекомендованных 44px. На мобильных задан минимум 40px, ширина не тронута,
чтобы плотные ряды не разъехались. На десктопе размеры прежние. - Учтены вырезы и полоса жестов iPhone (
viewport-fit=cover+ safe-area):
панель ввода больше не заезжает под скруглённые углы.
Изменено — скорость загрузки
Сайт долго открывался на мобильном интернете. Найдены три причины:
- Ничего не кэшировалось. Стояло
Cache-Control: no-storeна весь интерфейс —
чтобы обновления доходили без хард-рефреша. Цель верная, средство слишком
грубое: КАЖДЫЙ заход заново тянул ~266 КБ. Теперь адрес файла версионируется
хэшем содержимого (/app.js?v=…), сам файл кэшируется навсегда, а index.html —
нет. Обновления по-прежнему доходят сразу, но повторный заход берёт всё из кэша. - Не было сжатия. Включён gzip: 266 КБ → 69 КБ, в 3.8 раза меньше.
- Скрипты блокировали отрисовку. Пять
<script>в<head>безdefer:
браузер останавливал разбор страницы на каждом и не рисовал ничего, пока все не
скачаются. Добавленdefer— качаются параллельно.
Плюс к этому:
- KaTeX и lamejs больше не грузятся заранее. Вдвоём они тяжелее всего
остального фронтенда, а нужны редко — только если в ответе есть формула или
нажата запись голоса. Теперь подгружаются по факту надобности; формула в уже
показанном сообщении проявляется сама, без перезагрузки. Кодировщик голоса
тянется параллельно с записью, поэтому задержки не появляется. - Библиотеки переведены на один CDN (было два — unpkg и jsdelivr): лишние
DNS + TLS на мобильном стоят дороже, чем кажется. Добавленpreconnect.