Отимизация Scriptlib'ов

Omh

Lotus team
04.07.2007
2 210
1
#1
Вот и всплыл Omh с очередной задачей, котоая ему не под силу.

Разросся мой монстр (программулина для всего под лотусъ) до неприличных размеров.
64 библиотеки, сильно залинкованые, можно сказать, 10-ти уровневая хиерархия.

В связи с этим, начали притормаживать ф-ии вызываемые из библиотек верхних уровней.
Сразу скажу, на Initialize нигде ничего нету.
Тормозит из-за того, что много библиотек подлючено через Use.
Все биб-ки LS, никаких джав.
Парочка библиотек примерно по 200 кб
Остальные меньше.
Средний размер, думаю килобайт 50-70...

Вопрос прост: что делать?

Сокращать кол-во бибиотек, наращивая размер?
Увеличивать кол-во библиотек, сокращая размер?
Не юзать библиотеки, а по 100 раз декларить одни и те же ф-ии под кнопками/агентами? :lol:

Заранее спасибо!
 

morpheus

скриптописец
07.08.2006
3 915
1
#2
возможно имеет смісл использовать динамические библиотеки ? ( Execute )

что там ещё... использование Replace(Get)ItemVAlue вместо прямого обращения

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

Kee_Keekkenen

Well-known member
05.09.2006
639
4
#3
единственный вариант использовать только то, что нужно в текущем приложении, если конечно, там не все имеющееся используется ..
 

Omh

Lotus team
04.07.2007
2 210
1
#4
Да, я тут уже немного раздробил одну тяжёлую библиотеку.
И вот в планах заюзать Execute.
Оказывается, если объект обьявлен глобально, то он виден и внутри, и вне Execut'a.
Что, в принципе, логично, но не совсем прозрачно :)
 

Murtas

Lotus team
11.04.2006
128
0
#5
1. сомневаюсь, что использование вложенности из 10-ти уровней библиотек везде нужно ... разбивай на 2, 3 уровня и плоди еще больше библиотек
2. местами попробуй заинклюдить lss файлы сделанные из наиболее не изменяемых библиотек
3. Execute тоже хорошая весч, но подключение аналогичного набора (например полного) библиотек будет еще медленнее чем есть). Динамически оно на то и хорошо - только тогда когда надо.
 
K

K-Fire

#6
Не так давно прочитал в буржуйском блоге. У человека была точно такая же проблема, куча кода, куча либ. Путем экспериментов было выяснено что если объединить весь код (там у него это было 300кб) в одну библиотеку, то тормоза практически исчезают. Попробуйте сделать так же и нам напишите, проверим насколько там верная инфа :)

Думаю что еще можно попробовать варианты:
- Вырезать текст из библиотеки (или проще вынести текст во внешнюю лсс-ку).
- Если в либах есть классы, то попробовать перекомпоновать либы (т.е. что-то вынести, что-то внести, как-то упростить наследование). Мне помогло однажды.
- про Execute уже писали, но там надо быть крайне аккуратным, недавно наткнулся на странный баг, в клиенте вызываемый через Execute код отрабатывал на ура, на сервере падал, т.к. не мог найти некую вызываемую функцию, которая была определена во вложенных библиотеках. Когда вручную добавил нужную либу, все заработало. Клиент 7.0.3.
 

Omh

Lotus team
04.07.2007
2 210
1
#7
C Execute я уже попробовал.
Результат довольно удручающий: тот выигрыш времени, который появляется за счёт использования Execute, и, соответсвенно, без загрузки библиотеки, потом компенсируется 3-х кратными тормозами при подгрузке этой библиотеки в Execute.

Пока я сделал вот что: убрал лишние Use.

На примере:
у нас есть Lib1, Lib2, Lib3
Lib1 - допустим, ErrorHandler
Lib2, Lib3 - обычные библиотеки
Так вот, если в Lib3 уже юзается библиотека Lib2 (которая в свою очередь использует Lib1), то в Lib3 не надо подключать Lib1.
При 3-х библиотеках это, я думаю, будет не заметно, но вот при 63-ёх выигрыш примерно в 3-4 раза.
Пропадают тормоза на пустом месте, типа "нажал кнопку и сидишь".

Правда, это немного усложняет разработку: если поменял Use промежуточной библиотеки, то надо проверить Use всего, что выше, но, повторюсь, выигрыш есть и заметный.
Тем более, что я это дело хочу автоматизировать.
Сделать волшебную кнопку "Optimize ScriptLibraries" :)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#8
самое первое то, к чему ты уже пришел - лишние USE, т.к. при этом лотус подгружает код, линкует его, проверяет нет ли его уже в памяти (личное мнение) и при множественных лишних USE это отнимает больше всего времени...

по организации библиотек, если у тебя есть три библиотеки: Л1, Л2, Л3, которые организованы примерно Л3 use Л2 use Л1, то скорее всего их объединение не даст особого прироста, но кроме того, каждая из этих библиотек может содержать свои особые функции, которые могут быть использованы в других местах, но без потребности подгрузки библиотек более высокого уровня, т.е. какая-то Л4 use Л2, бо то, что находится в Л3 ей не нужно. Соответственно, в тех местах где это не нужно, нужно уменьшать уровень используемой библиотеки. т.е. если кнопка на форме не юзает функции из Л3, то лучше чтобы она тянула только Л2...
кроме этого, следует провести анализ используемости функций и реорганизовать библиотеки вообще, т.е. поперемещать какие-то функции в другие либы, чтобы из-за них не подгружать лишний код, например, если Л3 содержит 50 функций, и только Ф10 вызывается из нее в формах, то следует задуматься о переносе Ф10 в Л2, либо в Л1...

надеюсь понятно выразился :) все это ах... очень большой объем работы :)

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

Omh

Lotus team
04.07.2007
2 210
1
#9
Уже всё сделано.
Написал модуль, который анализирует use в библиотеках и выдаёт иерархию.
При этом выдаёт список лишних юзов, анализирую их после пострения иерархии.

Ну и на сладкое убирает автоматом лишние юзы (через DXL)

Энивей, спасибо за предложение.
 

Omh

Lotus team
04.07.2007
2 210
1
#11
Ну в том виде в котором она уже реализована, выкладывать к сожалению, не могу.
Но есть у меня идея сделать махонький проектик по лотусу, глядишь, там и выложу с открытым кодом и т.д.
Но это чуть позже.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#12
надеюсь, что эта идея будет реализована, а не останется отложенной из-за постоянных задач и т.п. :)
 
N
#13
Omh

Уважаемый, Omh!!! Общественность ждет! Почему не выкладываете свой тул по анализу либов?? Пожалуйста, многим будет интересен ваш тул!
 

Omh

Lotus team
04.07.2007
2 210
1
#14
Потому что не могу выкроить время и выдрать этот модуль отдельно из программы.
А тот тул, который я когда-то выкладывал, и, собственно, частью которого является этот анализатор библиотек, уже не могу выложить по коммерческим соображениям.
Вот такие пироги :(

Надо сесть и сделать LITE версию, которую и смогу спокойно выкладывать в общий доступ.
Но пока, к сожалению, не до этого.

Как только жареный петух клюнет в жэпу, займусь :rolleyes:
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#15
все что здесь предлагается очень похоже на "расширение" либлоадера в джава, только "законными" методами :p
может не UI библы на джава переписать ;) ?