Почему программа может работать медленно и как это лечится
IMS — веб-приложение без сборки (это сознательный выбор: весь код открыт
и читаем, ничего не спрятано в скомпилированном виде). Из-за этого на
экран загружается не один файл, а полсотни отдельных — и есть несколько
типичных причин, из-за которых это ощущается медленно. Ниже — что мы уже
исправили, и что можно проверить самостоятельно, если снова станет
медленно.
Уже исправлено в этой поставке
-
Адрес
127.0.0.1вместоlocalhost. На части Windows-компьютеров
словоlocalhostсначала пробует подключиться по IPv6, не получает
ответа около 2 секунд, только потом пробует обычный адрес — и это на
КАЖДОЕ новое соединение, а их за один экран уходит несколько десятков.
Мы измерили это напрямую (см. ниже, «Как проверить») — реальная работа
программы отвечает за 40-130 миллисекунд, а вот ожидание подключения
съедало по 4 секунды. Поэтому во всех наших скриптах и в адресе
в браузере используется именноhttp://127.0.0.1:8010, неlocalhost. -
Кеш браузера для файлов интерфейса. Раньше при каждом заходе в
программу браузер заново скачивал все файлы интерфейса. Теперь сервер
говорит браузеру «этот файл можно запомнить», и при повторном заходе
всё, что не изменилось, берётся с диска, а не по сети. -
Курсор "занято" на время ответа сервера. Раньше при нажатии кнопки
не было видно, что программа уже работает — это подталкивало нажимать
ещё раз, пока идёт обработка. Теперь курсор превращается в "часы" на
время запроса. -
Не хранить программу внутри OneDrive/Google Drive/Dropbox. Папки,
которые синхронизируются в реальном времени, заметно замедляют доступ
к файлам — а у нас их много. ДержитеIMSDна обычном локальном диске.
Если снова стало медленно — как проверить, в чём дело
Самый надёжный способ — не гадать, а посмотреть, где реально теряется
время:
- Открыть программу в браузере, нажать
F12(откроются инструменты
разработчика). - Перейти на вкладку Network (Сеть).
- Поставить галочку Preserve log (Сохранять журнал), если есть.
- Повторить то действие, которое кажется медленным (открыть экран,
нажать кнопку). - Правой кнопкой по списку запросов → Save all as HAR (Сохранить
всё как HAR) — сохранится файл.har.
Этот файл можно передать для анализа — по нему точно видно, сколько
времени ушло на подключение, сколько на ответ сервера, сколько на
загрузку файла. Так и была найдена причина №1 выше — без такого файла
это была бы просто догадка.
Что мы сознательно не делаем (и почему)
- Не собираем JS в один файл (так называемый "бандлинг"). Это
ускорило бы загрузку, но тогда код перестанет быть напрямую читаемым
файл-в-файл — весь проект построен на принципе "что видишь, то и
выполняется", без шага сборки. Мы считаем это более важным для проекта,
чем выигрыш в скорости первой загрузки (тем более что кеш браузера уже
решает это при повторных заходах). - Не переходим на Electron/Tauri (упаковка в отдельное десктоп-
приложение). Это дало бы скорость на уровне старой Delphi-версии (код
один раз стоит на диске, по сети/локально идут только данные) — но это
отдельный, более крупный этап работы, не точечная правка. Рассматриваем
как возможное следующее направление. - Не подгоняем программу под слабые/старые компьютеры. Браузеру нужно
разобрать код интерфейса при каждом первом заходе (дальше берёт из
кеша) — на старом процессоре это заметно медленнее, и это ограничение
конкретного компьютера, не настроек программы. Требования — см.
RUN_ME.md, раздел «Требования к компьютеру». Если компьютер им не
соответствует, разумный путь — заменить компьютер, а не пытаться
бесконечно оптимизировать программу под старое железо.