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

Omh

Lotus team
04.07.2007
2 210
1
#1
Выкладываю небольшую тулузку для разработчиков.

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

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

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

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

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

Вложения

TIA

:-)
Lotus team
15.05.2009
790
3
#2
На счёт зависимости быстродействия от избыточных "Use" - это подтверждённый факт? И на сколько сильна зависимость?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#3
На счёт зависимости быстродействия от избыточных "Use"
быстродействие не считал, но глюки были, например, с глобальными переменными формы.
после рекомпиляции базы клиент матерился, что не знает таких функций, точный текст ошибки не помню. хотя и не функции это были.
после оптимизации юзов проблема исчезла... других проблем не вспомню уже, может и были...
 

Omh

Lotus team
04.07.2007
2 210
1
#4
TIA
У меня тут в базке одной структура из 70-ти библиотек.
Раньше смело встявлял Use, даже если они не очень нужны (типа errorhandler подключал к каждой биб-ке).
По достижению какого-то момента, всё стало очень долго думать, причём не нагружать сеть, а тупо, нажал кнопку и жди 4 секунды пока там всё залинкуется.

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

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

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

TIA

:-)
Lotus team
15.05.2009
790
3
#5
У меня ошибки посыпались. Сначала в статус баре

...
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
 

Omh

Lotus team
04.07.2007
2 210
1
#6
Хм, интересно.
На той строке перебор аррея.
Может аррей не иницализировался.

Я гляну.
 

TIA

:-)
Lotus team
15.05.2009
790
3
#7
Я уверен, что это сильно зависит от кол-ва и иерархичности библотек.
На 5-10 бибках не будет заметно, но если есть какой-то framework с кучей библиотек нижнего/верхнего уровня прирост будет заметный невооружённым глазом.
Нелинейная зависимость времени загрузки модуля от количества используемых уникальных библиотек мне известна (кстати, ещё хуже дела с кол-вом подформ). Но оставался вопрос, есть ли зависимость от глубины иерархии и не уникальных Use. На сколько я представляю, основные задержки происходят из-за проверки подписи библиотек и из-за процедуры установления соответствия экспортируемых публичных переменных и методов с импортируемыми. Каждая новая подгружаемая библиотека требует анализа всё большей таблицы экспорта. Также известно, что библиотеки грузятся один раз. Т.о. повторная загрузка библиотеки должна приводить в проверке, загружена ли она, но не должны выполняться более тяжёлые - установка соответствия и проверка подписи.

Хм, интересно.
На той строке перебор аррея.
Может аррей не иницализировался.
Под 8.0.2 таже ошибка. Только в конце ещё появился диталог "Uncompilable libraries".

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#8
А не пересохранение ли и сопутствующая перекомпиляция, устанило проблему.
нет-нет, как раз пересохранение и последующая рекомпиляция приводили к проблеме! :)
первые разы я думал, что это просто глюк, и после рекомпиляции открывал форму и пересохранял ее.
а потом начал ковыряться, мне посоветовали проверить юзы, я поубирал лишние (те которые повторно использовались), и проблема перестала проявляться вообще. являлось ли источником проблемы повторное использование библиотек или, просто, от большого их кол-ва в форме нотес чудил, я точно не могу сказать. но, если есть возможность упорядочить юзы, то лучше это сделать :) а рабочая тулза тут очень к стати, думаю, многим известно, что такое проверить юзы в "большой" базе...
 

Omh

Lotus team
04.07.2007
2 210
1
#9
Akupaka
А у тя работает-то?

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

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

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

TIA

:-)
Lotus team
15.05.2009
790
3
#10
Omh
У меня только Use "LibName". Но есть ещё динамическая подгрузка, когда Use внутри Execute и ещё Use внутри комментариев.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#11
Но есть ещё динамическая подгрузка, когда Use внутри Execute.
ага! подлый читер, вот мы тебя и ... от елки, снова слова забыл - не играть мне на большой сцене... :)

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

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

(Archive) (LOCAL:D:\lotus\notes6\data\archive\a.nsf)

0. level design elements
- Sametime_ru-RU
- SwiftfileLibrary_ru-RU
- AddressBookSync_ru-RU
- TIMEUtilities_ru-RU

1. level design elements
- Common_ru-RU

2. level design elements
- CSEventClass_ru-RU
- ACLManagement_ru-RU
- CoreEmailClasses_ru-RU
- Rules_ru-RU
- CommonUI_ru-RU

3. level design elements
- FollowUpUtilities_ru-RU
- CSEventWeb_ru-RU
- BlockUserRule_ru-RU
- DocumentConversions_ru-RU
- CSEventNotes_ru-RU

4. level design elements
- CSCalendarEntry_ru-RU
- CSUIViewClass_ru-RU
типа необязательные юзы нашло? забавно, айбиэм уже знает? :)
SCRIPTLIBRARIES FollowUpUtilities_ru-RU
- TIMEUtilities_ru-RU

AGENTS (wAppointmentOpen)
- Common_ru-RU
ну, я думал будет паутина библиотек каким-нить опенжиэлем ;)
ошибок не было никаких. 6.5.4
 

hosm

* so what *
18.05.2009
2 442
6
#12
Аналогично случаю 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
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#13
все вопросы с ошибками к Билу Гейтсу! уверен вы пользуетесь виндой :)
 

Omh

Lotus team
04.07.2007
2 210
1
#14
Обновил аттач в первом посту.
Добавил несколько проверок и убрал (временно) агентов из анализа.

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

TIA

:-)
Lotus team
15.05.2009
790
3
#15
Ну почему же. Это весьма распространённый паттерн проектирования. Работает надёжно - проверено годами. Не без нюансов, но они все изучены. В частности, позволяет решить обсуждаемую проблему долгой загрузки модуля с большим числом библиотек, за счёт отложенной загрузки по-требованию.
 

Omh

Lotus team
04.07.2007
2 210
1
#16
TIA
Анализируется только секция declarations.
Execute будут игнорироваться.
 

TIA

:-)
Lotus team
15.05.2009
790
3
#17
Теперь так.

CFINDOBSOLETEUSES: 337
Type mismatch

Stack:
CFINDOBSOLETEUSES: 337
NEW: 73
ACTION_CMP_SL_CODE_ANALYSE: 12
CLICK: 10
 

Omh

Lotus team
04.07.2007
2 210
1
#18
Обновил опять.
Кстати, довольно удобно на форуме управление аттачами сделано.

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

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

hosm

* so what *
18.05.2009
2 442
6
#19
У меня сообщение об ошибках CFINDOBSOLETEUSES во 2-й версии на той же БД нет, остались только несколько ворнингов:
---------------------------
Warning
---------------------------
List item error:SCRIPTLIBRARIES_ <имя>
---------------------------
ОК
---------------------------
Причем, 1-я версия проги несколько раз ругалась на 3 либы, эта - на 2.
Что в них такого особенного, не понятно :)
 

Omh

Lotus team
04.07.2007
2 210
1
#20
Я чёт вообще не помню, что за ошибка такая :)
Код:
List item error
Тьфу! Это же моя ошибка...
Сам генерю.

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

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