Иерархия Библиотек, Лишние Use (запилил Новую Версию)

Тема в разделе "Разработки форумчан", создана пользователем Omh, 17 июн 2009.

  1. Omh

    Omh Lotus team
    Lotus team

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

    Щито делает?
    Анализирует библиотекив выбранной базе и показывает инфу след. типа:
    1. Иерерхию библиотек (по уровням)
    2. Лишние Use в библиотеках (т.е. те юзы, которые можно убрать безболезненно, тем самым улучшив быстродействие) (если такие есть)
    3. Некомпилируемые библиотеки (если такие есть)

    База ничего не меняет и не пересохраняет в анализируемой базе.

    Внутри делает следующее: выкидывает дизайн элементы в DXL и парсит именно DXL.
    В связи с этим работает только при открытом дизайне.

    В общем, жду отзывов.
    Посмотреть вложение DevToolPub.zip

    Товарищи, мы стали более лучше одеваться!!!
    В смысле, программа теперь показывает лишние юзы не только в самих библиотеках, но и агентах, view, формах и шаред экшенах.
    Мне не совсем нравится, как она это делает: не показывает конкретную секцию, где расположен лишний юз, но, надеюсь, и так кому-нить пригодится (анализ агентов точно нормально работают).
    Посмотреть вложение DevToolPub_v2.zip
     
  2. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    На счёт зависимости быстродействия от избыточных "Use" - это подтверждённый факт? И на сколько сильна зависимость?
     
  3. Akupaka

    Akupaka А че я?.. О.о

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    TIA
    У меня тут в базке одной структура из 70-ти библиотек.
    Раньше смело встявлял Use, даже если они не очень нужны (типа errorhandler подключал к каждой биб-ке).
    По достижению какого-то момента, всё стало очень долго думать, причём не нагружать сеть, а тупо, нажал кнопку и жди 4 секунды пока там всё залинкуется.

    После удаления лишних юзов всё стало быстрее раза в 3, а то и в 4.
    Тормозня на пустом месте пропала.

    Я уверен, что это сильно зависит от кол-ва и иерархичности библотек.
    На 5-10 бибках не будет заметно, но если есть какой-то framework с кучей библиотек нижнего/верхнего уровня прирост будет заметный невооружённым глазом.

    Кстати, эта тулузка именно для этого и была сделана :rolleyes:
     
  5. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    У меня ошибки посыпались. Сначала в статус баре

    ...
    Processing design element: 234 / 234 (AGENTS - qqq1)...

    Потом 22 мессаджа вида
    ---------------------------
    Warning
    ---------------------------
    List item error:<имя библ.>
    ---------------------------
    OK
    ---------------------------

    Потом сообщение об ошибке.
    ---------------------------
    Error
    ---------------------------
    CFINDOBSOLETEUSES: 331
    Type mismatch

    Stack:
    CFINDOBSOLETEUSES: 331
    NEW: 73
    ACTION_CMP_SL_CODE_ANALYSE: 12
    CLICK: 8
    ---------------------------
    OK
    ---------------------------

    Затем отображается список библ., но вроде как, без указания лишних.

    В Статус баре
    Pass: 1...
    Pass: 2...
    Pass: 3...
    Pass: 4...
    Pass: 5...
    Pass: 6...
    CFINDOBSOLETEUSES: 331-Type mismatch: CLICK: 8 -> ACTION_CMP_SL_CODE_ANALYSE: 12 -> NEW: 73 -> CFINDOBSOLETEUSES: 331

    Запускалось на Notes 7.0.2
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Хм, интересно.
    На той строке перебор аррея.
    Может аррей не иницализировался.

    Я гляну.
     
  7. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Нелинейная зависимость времени загрузки модуля от количества используемых уникальных библиотек мне известна (кстати, ещё хуже дела с кол-вом подформ). Но оставался вопрос, есть ли зависимость от глубины иерархии и не уникальных Use. На сколько я представляю, основные задержки происходят из-за проверки подписи библиотек и из-за процедуры установления соответствия экспортируемых публичных переменных и методов с импортируемыми. Каждая новая подгружаемая библиотека требует анализа всё большей таблицы экспорта. Также известно, что библиотеки грузятся один раз. Т.о. повторная загрузка библиотеки должна приводить в проверке, загружена ли она, но не должны выполняться более тяжёлые - установка соответствия и проверка подписи.

    Под 8.0.2 таже ошибка. Только в конце ещё появился диталог "Uncompilable libraries".

    А не пересохранение ли и сопутствующая перекомпиляция, устанило проблему.
    Если ошибка была "Type missmatch on external name" или "External name not fount", то дело точно было в перекомпиляции
     
  8. Akupaka

    Akupaka А че я?.. О.о

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Akupaka
    А у тя работает-то?

    TIA
    Там от версии нотеса зависимости не должно быть.
    Ещё 6-ка нормально экспортировала биб-ки.

    Думаю тут проблема в том, что я писал для тех примеров, что у меня перед глазами.
    По идее в декларешйнс можно юзать биб-ки по разному:
    Use "LibName"
    Use {LibName}
    Use |LibName|

    Я не все случаи обрабатываю.
     
  10. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Omh
    У меня только Use "LibName". Но есть ещё динамическая подгрузка, когда Use внутри Execute и ещё Use внутри комментариев.
     
  11. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ага! подлый читер, вот мы тебя и ... от елки, снова слова забыл - не играть мне на большой сцене... :)

    Omh, а я еще не пробовал...

    попробовал почтовую базу...

    типа необязательные юзы нашло? забавно, айбиэм уже знает? :)
    ну, я думал будет паутина библиотек каким-нить опенжиэлем ;)
    ошибок не было никаких. 6.5.4
     
  12. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Аналогично случаю TIA - пошли ошибочки-ворнинги для нескольких библиотек (на Pass 2... вроде?) ,
    а вместо следующей ошибки - ошибка в другой строке:
    ---------------------------
    Error
    ---------------------------
    CFINDOBSOLETEUSES: 322
    List item does not exist

    Stack:
    CFINDOBSOLETEUSES: 322
    NEW: 73
    ACTION_CMP_SL_CODE_ANALYSE: 12
    CLICK: 8
    ---------------------------
    ОК
    ---------------------------
    ну, в статус-баре, соответственно, аналогично TIA, только строка другая (322 вместо 331)

    P.S.: Akupaka
    И у меня почтовая БД - без ошибок прошла.
    Ошибки шли на нашей БД, где тоже есть use в Execute :)
    7.0.2
     
  13. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    все вопросы с ошибками к Билу Гейтсу! уверен вы пользуетесь виндой :)
     
  14. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Обновил аттач в первом посту.
    Добавил несколько проверок и убрал (временно) агентов из анализа.

    Т.е. в данной версии проводится только анализ библиотек.
     
  15. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Ну почему же. Это весьма распространённый паттерн проектирования. Работает надёжно - проверено годами. Не без нюансов, но они все изучены. В частности, позволяет решить обсуждаемую проблему долгой загрузки модуля с большим числом библиотек, за счёт отложенной загрузки по-требованию.
     
  16. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    TIA
    Анализируется только секция declarations.
    Execute будут игнорироваться.
     
  17. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Теперь так.

    CFINDOBSOLETEUSES: 337
    Type mismatch

    Stack:
    CFINDOBSOLETEUSES: 337
    NEW: 73
    ACTION_CMP_SL_CODE_ANALYSE: 12
    CLICK: 10
     
  18. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Обновил опять.
    Кстати, довольно удобно на форуме управление аттачами сделано.

    TIA, должно помочь :)

    Вообще, было бы идеально анализировать все элементы дизайна (event'ы во view, кнопки на форме, actions и т.д.), но пока до этого руки не доходят.
     
  19. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    У меня сообщение об ошибках CFINDOBSOLETEUSES во 2-й версии на той же БД нет, остались только несколько ворнингов:
    ---------------------------
    Warning
    ---------------------------
    List item error:SCRIPTLIBRARIES_ <имя>
    ---------------------------
    ОК
    ---------------------------
    Причем, 1-я версия проги несколько раз ругалась на 3 либы, эта - на 2.
    Что в них такого особенного, не понятно :)
     
  20. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Я чёт вообще не помню, что за ошибка такая :)
    Код (Text):
    List item error
    Тьфу! Это же моя ошибка...
    Сам генерю.

    OKEN
    А в конеце показывает что-то?
    Есть выхлоп?

    Прошу прощения, но перезалил опять.
    Теперь этого ворнинга быть не должно :)
     
Загрузка...

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