Ln долго подгружает все библиотеки

fedotxxl

Well-known member
09.11.2005
614
0
#1
Форма документа открывается достаточно долго. Причем обмена данными между сервером и клиентом нет. Видно, что клиент прогружает библиотеки. Может можно как-то ускорить этот процесс / прогрузить один раз?
 

Omh

Lotus team
04.07.2007
2 210
1
#2
Везде подключать минимально нужное кол-во библиотек.
Уже было об этом, сейчас поищу.

Нашёл
 

Murtas

Lotus team
11.04.2006
128
0
#3
Форма документа открывается достаточно долго. Причем обмена данными между сервером и клиентом нет. Видно, что клиент прогружает библиотеки. Может можно как-то ускорить этот процесс / прогрузить один раз?
В результате библиотеки "прогружаются" всегда один раз, а вот удаление лишних "Use" может значительно помочь.

Я имею в виду если модуль1 использует модуль2 то необходимо вызвать только модуль1 а не юзать два.

Посмотри на все экшены и бутоны формы - "Use" из них лучше вынести в Globals формы.
 

Omh

Lotus team
04.07.2007
2 210
1
#4
Посмотри на все экшены и бутоны формы - "Use" из них лучше вынести в Globals формы.
Я очень сильно против.
Если у тебя заюзана библиотека в globals, она будет подгружаться в любом случае при открытии формы.
Если биб-ка заюзана локально, он будет подгружаться только во время первого нажатия на этот самый локальный элемент (кнопка, экшн).
При активации других элементов использующих эту самую библиотеку, она грузиться не будет.

Я вообще против запихивания чего-либо в globals, кроме тех случаев, когда это действительно необходимо.
 

Murtas

Lotus team
11.04.2006
128
0
#5
Omh ты прав, но я хотел сказать если эти юсы используются также самой формой, например в эвентах формы, то можно исключить их из экшенов ... частенько встречаю, что одну и ту же библиотеку (обычно которая включает все под библиотеки) вставляют во все что можно.
 

Omh

Lotus team
04.07.2007
2 210
1
#6
По моему глубокому убеждению, если библиотеки используются формой, но их надо подключать в Declarations формы, но никак не в globals.
Мало ли я потом решу, что мне никакие ивенты формы не нужны, а глобалс останется и будет опять-таки грузиться каждый раз при открытии.

Для себя я решил (и пока не будут какие-либо изменения в с этой стороны лотусе), что всё надо подключать локально и минимально возможное кол-во.
Я не только для себя это решил, я, вообще, уверен, что это правильно.

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

fedotxxl

Well-known member
09.11.2005
614
0
#7
Если биб-ка заюзана локально, он будет подгружаться только во время первого нажатия на этот самый локальный элемент (кнопка, экшн).
При активации других элементов использующих эту самую библиотеку, она грузиться не будет.
Инфа точная? Т.е. если у меня 10 кнопок используют одну и туже библиотеку, то при нажатии на первую библиотека прогрузится, а при нажатии на остальные уже будет в памяти?

Все-таки я предпочитаю везде писать Use (т.е. если у меня в форме используются функция из библиотеки L1 и я точно знаю, что он L1 инклудится в L2, L2 инклудится в форму, то все-равно лучше проинклудить в форму и L1... на мой взгляд)
 

Omh

Lotus team
04.07.2007
2 210
1
#8
Инфа точная
Специально приложайку делал, что бы камрадам проилюстрировать.
Т.е. с момента открытия формы до её закрытия каждая библиотека принициализируется 1 раз, в скольки бы местах на этой форме она не вызывалась.

Вот последнее твоё предположение "все-равно лучше проинклудить в форму и L1... на мой взгляд" неверно.
У меня после очистки базы от лишних юзов скорость работы повысилась многократно (повторюсь, там была большая иерархия библиотек, на малой, думаю, будет не так заметно).
 

Murtas

Lotus team
11.04.2006
128
0
#9
Мало ли я потом решу, что мне никакие ивенты формы не нужны, а глобалс останется и будет опять-таки грузиться каждый раз при открытии.
... с таким подходом можно забыть и в Declarations формы убрать эту библиотеку :rolleyes: ... а секцию Globals видно не зря просто придумали ... и в случае использования одной библиотеки и формой и экшенами минимально возможное кол-во подключений будет достигнуто также + будут отсутствовать лишние строчки в экшенах (которые будут проверять загружена библа или нет) и замену названия библиотеки можно осуществлять в одном месте. Это лишь один из вариантов имплементации логики программы, и утверждать не верность такого подхода я бы не стал.


точная
 

Omh

Lotus team
04.07.2007
2 210
1
#10
Murtas
Полемизировать конечно можно, но мне ближе подход, когда каждый экшн/кнопка и т.д. является standalone (по отношению к библиотекам).
Т.е. могу взять кнопку и перекопировать в другую форму, не заботясь о том, подключена ли библиотека в той форме (globals), куда я копирую.
Проще мантейнить.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#11
и на сладкое переопределить неприватную глобальную переменную из библиотеки
а я в таких случаях еще люблю убирать Option Declare!
ну зачем она там уже?! путать следы, так путать! :rolleyes:

замену названия библиотеки можно осуществлять в одном месте
а это (переименование библиотек) уже огрехи проектирования
 

fedotxxl

Well-known member
09.11.2005
614
0
#14
Omh
Гм... 8ка хорошо работает с библиотеками, но вот семерка...
Результаты моих тестов:
Если библиотеки инклудить только в кнопки (не в глобал, не в форму), то при открытии все библиотеки для каждой кнопки будут прогружены. Т.е. если у меня 10 кнопок используют одну и ту же библиотеку, то библиотека прогрузится 10 раз. Задержка на открытие растет практически линейно
Если подгружать библиотеку в форму, то скорость открытия не зависит от кол-ва кнопок
Самый лучший результат - поместить библиотеку в Globals. Открывается быстрее всего. Может так и сделать? Globals подформы не распространяется ведь на всю форму?

Так что ты не прав
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#15
Господа, предлагаю вам не линейкой орудовать, а составить список ваших "Best practices" :)
 

Murtas

Lotus team
11.04.2006
128
0
#16
fedotxxl вот с семеркой судьба не свела на долго ... если такая глюкавая - избавляйся быстрей

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

да кстати, расскажи как тестировал - чет слабо верится
 

Omh

Lotus team
04.07.2007
2 210
1
#17
Я тока под семёркой и шестёркой девелоплю.
Восьмёрку смотрел, но усиленно не использовал.

Библиотека не грузиться 10 раз.
Я только что проверил.
Инициализируется один раз при первом нажтии кнопки, либо при подгрузке, если заюзана в глобалах или декларации формы.

Тестовая база приложена :)
 

Вложения

Omh

Lotus team
04.07.2007
2 210
1
#18
Господин fedotxxl, есть какие новости?
Мне очень интересно, чем всё закончилось :)
 

fedotxxl

Well-known member
09.11.2005
614
0
#19
Omh
Да, получается метод Initialize срабатывает один раз. Но я тут немного о другом - как долго грузятся библиотеки при открытии формы. Вот мои практические результаты для 7.0.3 (для восьмерки все лучше) (ps под кнопкой я подразумевал кнопку на actionBar'e, но не суть важно) (pss врямя открытия в относительных единицах... по-моему в мс)
кол-во кнопок - время открытия
1 - 951
2 - 1802
4 - 3350
8 - 7000

теперь библиотека, которая используется кнопкой вынесена в Globals формы
кол-во кнопок - время открытия
1 - 30
2 - 30
4 - 50
8 - 70

Вот такие пироги...

Возник ещё один вопрос:
предположим у меня есть два набора функций (по штук 10). Логически наборы связаны (их можно объеденить в одну базу по логике), но выполняют несколько разные задачи. Один набор используется чаще другого. Имеет ли смысл наборы разделять в разные библиотеки или же объединить одной?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#20
кол-во кнопок - время открытия
1 - 951
2 - 1802
4 - 3350
8 - 7000

теперь библиотека, которая используется кнопкой вынесена в Globals формы
кол-во кнопок - время открытия
1 - 30
2 - 30
4 - 50
8 - 70
че-то я не понял, а как это у тебя результаты во 2-м так сильно отличаются от 1-го?
если предположить, что загрузка библиотеки занимает в любом случае какое-то время, то, по-идее, в 1-м и 2-м вариантах в случае одноразовой подгрузки библиотеки время будет равно некоторому постоянному значению (пусть с небольшой разницей в зависимости от текущей нагрузки системы), а у тебя разница на 100 порядков!
не укладывается :)

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