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

Тема в разделе "Lotus - Программирование", создана пользователем Omh, 19 ноя 2008.

  1. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Вот и всплыл Omh с очередной задачей, котоая ему не под силу.

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

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

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

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

    Заранее спасибо!
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    возможно имеет смісл использовать динамические библиотеки ? ( Execute )

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

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

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    единственный вариант использовать только то, что нужно в текущем приложении, если конечно, там не все имеющееся используется ..
     
  4. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Да, я тут уже немного раздробил одну тяжёлую библиотеку.
    И вот в планах заюзать Execute.
    Оказывается, если объект обьявлен глобально, то он виден и внутри, и вне Execut'a.
    Что, в принципе, логично, но не совсем прозрачно :)
     
  5. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    1. сомневаюсь, что использование вложенности из 10-ти уровней библиотек везде нужно ... разбивай на 2, 3 уровня и плоди еще больше библиотек
    2. местами попробуй заинклюдить lss файлы сделанные из наиболее не изменяемых библиотек
    3. Execute тоже хорошая весч, но подключение аналогичного набора (например полного) библиотек будет еще медленнее чем есть). Динамически оно на то и хорошо - только тогда когда надо.
     
  6. K-Fire

    K-Fire Гость

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

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    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" :)
     
  8. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    самое первое то, к чему ты уже пришел - лишние USE, т.к. при этом лотус подгружает код, линкует его, проверяет нет ли его уже в памяти (личное мнение) и при множественных лишних USE это отнимает больше всего времени...

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

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

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Уже всё сделано.
    Написал модуль, который анализирует use в библиотеках и выдаёт иерархию.
    При этом выдаёт список лишних юзов, анализирую их после пострения иерархии.

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

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    мне бы твою активность... :)

    зы: а вот такой законченый тулзень можно и выкладывать :)
    если кнешно, не жалко :)
     
  11. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну в том виде в котором она уже реализована, выкладывать к сожалению, не могу.
    Но есть у меня идея сделать махонький проектик по лотусу, глядишь, там и выложу с открытым кодом и т.д.
    Но это чуть позже.
     
  12. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    надеюсь, что эта идея будет реализована, а не останется отложенной из-за постоянных задач и т.п. :)
     
  13. nor

    nor Гость

    Omh

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Потому что не могу выкроить время и выдрать этот модуль отдельно из программы.
    А тот тул, который я когда-то выкладывал, и, собственно, частью которого является этот анализатор библиотек, уже не могу выложить по коммерческим соображениям.
    Вот такие пироги :(

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

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    все что здесь предлагается очень похоже на "расширение" либлоадера в джава, только "законными" методами :p
    может не UI библы на джава переписать ;) ?
     

Поделиться этой страницей