Очень медленная реакция подсказки в конце большого модуля

tormozit Открыто Высокий

Уже много раз замечал что чем дальше от начала модуля тем дольше окно автодополнения (Т9) открывается. При этом код скрипта вместе с кодом 1С отрабатывает за одинаковое время, судя по замерам из служебных сообщений - 70мс. А по наблюдению в приведенном тесте на строке с номером 20000 видно что открывается примерно за 500мс.

7IaviMbalE.mp4

Ссылка скрыта

Ссылка скрыта

Вот тот же тест в начале модуля - примерно в 5 раз быстрее и наблюдение примерно соответствует длительности из служебных сообщений.

0tkfOHMbU4.mp4

Чем может быть обусловлено такое замедление?

Комментарии

tormozit
#1, ред. 27 апреля 2025 17:31

Нашел похоже этот фрагмент в логе

Ссылка скрыта

В нем есть строка, выводимая Турбоконфом:

---Ощеее время T9 = 560ms

Что примерно соответствует наблюдению. Но в служебных сообщениях не видно этой строки.

А в быстром тесте (в начале модуля) вижу в логе строку

---Ощеее время T9 = 95ms


tormozit
#2, 27 апреля 2025 17:34

Проблема очевидно тут

[27.04.25 16:46:04:957] GetUIAutomationCachedInfo() 33ms, total calls 230
[27.04.25 16:46:04:957] Set CurText, length = 1091448
[27.04.25 16:46:04:957] Set CurrentPos =929382
[27.04.25 16:46:04:957] Set CurSelectedText, length = 0
[27.04.25 16:46:05:359] char = '
', hasCloseWord: False
[27.04.25 16:46:05:359] T9CurrentControlType=документ

Те самые 400мс


bolsun
#3, 27 апреля 2025 18:20

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


tormozit
#4, 27 апреля 2025 18:23

Я давно уже сохраняю такие параметры сеанса

Процедура УстановитьРежимЗаменыШтатнойПодсказки(Знач НовоеЗначение) Экспорт
	ТурбоКонф.СохранитьЗначениеСеанса(Строка(Конфигуратор.ГлавноеОкно)+"_"+"T9AlwaysShowOnCtrlSpace", НовоеЗначение);
ТурбоКонф.СохранитьЗначениеСеанса(Строка(Конфигуратор.ГлавноеОкно)+"_"+"T9AllowAutoInvokeInsideCommonStrings", НовоеЗначение);
КонецПроцедуры

Думал их будет достаточно.


bolsun
#5, ред. 27 апреля 2025 18:27

(4) tormozit, где здесь флаг конфигуратора "показывать подсказку после точки"?


tormozit
#6, ред. 27 апреля 2025 18:32

(5) bolsun, эти параметры я всегда устанавливаю одновременно с подавлением штатной подсказки. Могу добавить еще один.


bolsun
#7, 27 апреля 2025 18:33

(6) tormozit, ты проверяешь этот флаг в последующих сеансах? Вдруг пользователь включит его обратно.


bolsun
#8, 27 апреля 2025 18:34

Я про этот флаг


tormozit
#9, ред. 27 апреля 2025 18:40

(7) bolsun, Если коротко, то да, проверяю при подключении новых сеансов.
Подразумевается, что пользователь выключает/включает штатную подсказку через всплывающее уведомление, т.к. это намного удобнее. Если же пользователь напрямую поменяет ее настройки, то скрипт это не увидит до перезапуска конфигуратора или выполнения явной тяжелой проверки с открытием окна настроек. И мы тут не сможем что либо улучшить.


bolsun
#10, 27 апреля 2025 18:54

(9) tormozit, я могу убрать эту проверку, но возможны ошибки в случае если флаг окажется включенным.


tormozit
#11, 27 апреля 2025 19:00

(10) bolsun, понял, протестирую эту ситуацию


bolsun
#12, ред. 27 апреля 2025 19:16

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


tormozit
#13, ред. 27 апреля 2025 20:03

(12) bolsun, да, это слабое место у многих подобных механизмов - серию точек не тестируют. Но и реальный пользователь очень редко зажимает точку =) В моем коде кругом есть защита от такого. И в твоем уже тоже. Если говорить про скорость работы штатного анализатора кода конфигуратора в общем, то с учетом выделенных на него скромных трудочасов наверное это нормальная скорость.


tormozit
#14, 27 апреля 2025 22:24

И думаю имеет смысл вернуть вывод события "Ощеее время T9" в служебные сообщения, чтобы мне было легче контролировать этот показатель. Ну и заодно опечатку в нем поправить хорошо бы.


bolsun
#15, ред. 29 апреля 2025 13:35

6.4.9250.27909
https://disk.yandex.ru/d/HalnaWbUugl0Cw

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


tormozit
#16, 29 апреля 2025 15:45

(15) bolsun, Теперь реакция стала очень быстрой. Позже еще буду делать тесты с нетипичными настройками.


tormozit
#17, ред. 01 мая 2025 08:36

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

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

Прошу в Турбоконфе при появлении окна штатной подсказки при включенном флаге T9AlwaysShowOnCtrlSpace вызывать метод скрипта "ПриПоявленииШтатнойПодсказки". Там я буду показывать уведомление с действием отключения подсказок конфигуратора.


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера