Большая статья про больше баги на Айфоне 😫

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

Основная суть.
Айфон на всех браузерах очень долго выполняет самые простые БП по переводу моего сайта (да и не только их). Также большие проблемы с загрузкой листов.

В то время как с компа или андроид устройств все работает корректно.

Берём при примера главную страницу, страницу с листом (где всего 3 записи очень простые) и самую лайтовую страницу.

На айфоне как будто есть какой-то кеш, который мешает сильно всей работе. Если я публикую проект, то при первой загрузке все норм. Далее все начинает тупить и долго грузиться. Очень часто даже едет верстка, все контейнеры становятся квадратами. (примерно 4 раза из 10 перезагрузок страницы) что тоже СИЛЬНЫЙ баг который надо исправить.

Пример: (со страницы baliway.online/404

Пример: (со страницы baliway.online)

Вернемся к проблемам с переводом.

Как реализована у меня логика. Я на текстах через onCreate запускаю БП где на входе уже лежат у меня текста.

Здесь как мы видим, заранее записан текст и вызывается бизнес процесс, ниже подробнее его опишу.

p.s Хоть и на скриншоте h текст это не играет не какой роли, с обычными такая же проблема.

Бизнес процесс на перевод:

Вся суть перевода строится по принципу:

  1. Берём глобалку постоянную и проверяем что там написано.
    Например если в глобалке Language установлено “RU” значит текст в БП что ниже приложу установится как Русский

Поехали

На входе у нас есть текста которые мы добавили к каждому тексту, также прокинули в БП ID элемента

БП довольно простой, он проверяет какое значение в глобалке Language, устанвливает нужный текст в text update data либо вовсе игнорирует если язык EN (он по умолчанию уже вбит у меня во всех элемента). Также мы добавим к нему delay чтобы текст отрабатывал чуть позже т.к нам надо время чтобы отработали БП по смене языка.

Внимание: On app launch ставит всегда при первом входе EN если глобалка пустая, далее если вы переключите его через меню или через ?lang=ru то он будет проверять это + повесил сигнал что On app launch начался и закончил обработку БП

И вот тут как раз начинается проблема.

Начнем с простого к сложному.

  1. Bali Way

БП для смены языка мы добавляем ?lang=ru или ?lang=zh

У него есть show toast который вы увидите сразу, скажет нам изначальный язык и прокричит Начали1 чтобы понять что БП сразу запустился.

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

Также повесим сигналы на text translage о старте БП и финише.

Заходим впервые по ссылке что выше скинул и видим:

Скорее всего у вас нормально все загрузится на EN языке при первом заходе, давайте его поменяем через ?lang=ru

Тут начинается пляска.

Либо поедет верстка, либо язык не прогрузится, либо БП до конца не отработают (Должны быть все оповещения о Text Start и Text Finish)

Прикладываю различные варианты:

Мы видим что язык изначально у нас EN был, переключение работает нормально, текст обрабатывается следом после всех важных нам БП

Тестим на ПК и Андроид, все окей

КЕЙС №2:

Страница baliway.online/office/catalog
Зайдите сначала через ПК на нее, увидите что все сразу переводится быстро, принцип тот же. Например если мы закончили тесты на странице “404” с ?lang=zh то тут если зайти без lang= то автоматом мы получим ZH ведь он уже лежит в глобалке.

На айфоне у вас будет сразу англ язык и вы увидите как БП с текстом начинают очень долго выполняться. Если посидеть на странице около 30 сек до 60 секунд у вас будет вылезать постоянно новые show toast + текст будет поэтапно один за одним меняться.

Также обратим внимание на шапку шаблона

  • учитываем что я отключил все листы в шаблоне чтобы они не грузили нас (с ними ситуация в 1 раза хуже)

Кейс №3

Главная страница baliway.online

Все делаем тоже самое, текст сам обновится спустя 30 секунд примерно либо крашнется верстка

Кейс №4 (работа с БД)
Страница: baliway.online/events

Там у текст описание мероприятия изначально по умолчания Loading… далее он должен тянуть описание для этого языка согласно ячейке. Тот же принцип, проверяем EN=EN - true - text update

Требуется примерно около 40 сек чтобы вся страница нормально изменилась

Кейс №5

Откройте меню и смотрите в него 30 секунд, увидите кк он долго меняет текст. Принцип тот же самый у БП только там update data LINK а не TEXT

Дополнительные проблемы:

Нагрев телефона, я не знаю ни одну игру чтобы она так нагревала телефон пока я все это тестировал и писал статью эту. Давайте брать за внимание что тесты я провожу на айфон 15 и айфон 12, мы все прекрасно понимаем что это очень технологичные телефоны, люди на них не такое запускают и что попросить Тим Кука исправить что-то мы не можем т.к с долей вероятности 99.999999% баг точно не в железе айфона

Примечание:

Старайтесь как можно чаще обновлять страницу, чтобы увидеть больше вариаций различных поведений всех Кейсов, что я описал выше. Не делайте вывод, пожалуйста, что все работает если 1 раз у вас получилось, каждый кейс просмотрите 10 раз и я уверен на 100% у вас получится все за несколько секунд чтобы работало (как на ПК) только 1-2 раза из 10.

За эталон мы берем версию ПК гугл хром + мак

Вывод:

Я не использую супер сложные БП которые требуют огромных ресурсов и нужно иметь фабрику супер модного железа от Intel или Nvidea чтобы обработать что-то. У меня довольно простой сайт и очень простой логикой. Но почему то на айфоне такие жуткие лаги.

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

Проблема именно в скорости, где она, я не знаю и проверить не могу. Все приложения, сайты, не лагают так и не нагружают железо

1 Like

Надеюсь я не зря тратил время писав эту статью да и в целом практически год уже жизни только разбираясь с багами. Спасибо за понимание и жду

Да и давайте исключим проблемы со скоростью интернета, он очень хороший даже с прокси, впн и без всего

е

Вот еще вы можете менять язык через верхнее меню, но у вас это врятли получится. БП начнем работу только через минуту.

Но с ПК без проблем, попробуйте обязательно с ПК и с Айфона

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

Самый очевидным вариантом кажется замена множества Equal и If-Else на один Switch. И вот уже вместо цепочки из десятка блоков, каждый из которых выполняет какое-то вычисление, достаточно будет одного.
Switch → Update Data. Все.

А если уж делать более глобальные правки, то логичным кажется переход на использование i18n. Это позволяет нормально создать метки и переводы для них, которые будут использованы вообще без каких-то лишних бизнес-процессов.

Для различных списочных данных (типа list и grid) тоже нужно избавляться от всех операций по подбору языка. Зачем запрашивать все языки, а потом перебором подбирать подходящий, если можно сразу с бека прислать тот самый единственный нужный?
Если я правильно представляю структуры базы, то, например, для события типа Event поле Description повторяется десяток раз в вариациях для всех языков. Я бы рекомендовал все таки выносить эти переводы в отдельную модель, тогда процесс их запроса стал бы легче. В структуре было бы что-то типа Event, как основная модель, с неизменяемыми данными (обложка, дата и т.д.) и связанная с ней модель Event_local, которая в свою очередь содержит указатель на язык.
С фронта приходит запрос выдать список ивентов на французском языке. На беке идет запрос типа Search Event_local с параметрами (with = event, lang = fr). И обратно на фронт передаются сильно минимизированные данные, которые и сеть не грузят, и из базы лишнего не запрашивают, и, главное, избавляют от необходимости перебора для подстановки нужного языка во всех полях фронта.

Еще один вариант, если оставить базу практически неизменной - прямое использование SQL-запросов на беке.
На примере того же Event. Добавляется поле Description (без указания языка). И идет запрос Select id, artist, category (и прочие необходимые поля), description_fr as decription from event.
Тут fr в description_fr является переменной частью. То есть запрашивается именно то, что прописано во французской версии, но отдается как поле description (всегда и для любого языка одинаковое). На фронте, опять же, появляется полная свобода от переборов. Получили значение - вывели значение. И все летает.

Логика приложения очень сильно усложнена. Это четко видно если запустить отладчик в любом браузере. См. скриншот ниже

Chrome, Win11: Главный поток постоянно занят перерисовкой элементов, в течении 10 секунд с момента загрузки постоянно происходят анимации.

Если мигрировать на i18n то они все сразу исчезнут (скорее всего).

Что касается Safari и браузеров на его движке webkit (любой браузер в IOS), то мы знаем о проблеме в проектах с большим количеством сложной логики: в какой-то момент браузер начинает тротлить внутренние сообщения внутри приложения и они начинают долетать с задержкой в несколько секунд. Над этой проблемой мы сейчас работаем и наверняка сможем ее решить в ближайшем будущем.

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

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

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

Зайдите сначала на https://baliway.online/
потом в меню нажмите Events
Из 10 заходов так у меня 2 раза только грузится

На страницах где статика все норм, на страницах где листы вот такие баги бывают

Вот кстати и квадрат как на айфоне

@Nikita_Nosolenko перепубликуйте проект и проверьте

На ПК стало вроде лучше, но на айфоне все также очень часто ломается верстка

@Nikita_Nosolenko работаем над проблемой

Ребят, ну что? Когда сможете исправить это?

Почему мне никто не отвечает?

@Nikita_Nosolenko когда проблема будет решена - мы вас оповестим.