Снегопат

Обсуждение Снегопата
Текущее время: 27 апр 2024, 11:18

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: 31 окт 2011, 21:55 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:53
Сообщения: 448
Откуда: Саратов
Всем привет!

Предлагаю обсудить такую идею. Скрипты Снегопата удобно использовать в качестве "библиотек" функций, как альтернативу использования WSC.

По сравнению с WSC у них как минимум есть неоспоримое преимущество: их не надо регистрировать.

Но есть и существенный недостаток: если использовать их "как есть", все библиотечные функции на момент исполнения скрипта/макроса должны быть загружены (причем загружены до скриптов, которые их будут использовать). Сейчас это не проблема, но, вспоминая случай OpenConf'а, скоро Снегопат обрастет кучей различных скриптов и кучей библиотек, а соответственно получим уже знакомую историю: все скрипты будут загружаться во время запуска конфигуратора и тормозить его.

Предлагаю к рассмотрению вариант "динамической" подгрузки скриптов-библиотек (по требованию), которая может осуществляться как при старте того или иного скрипта, так и при вызове макроса (выбор остается на откуп разработчику макроса).

Также динамическая подгрузка библиотек избавляет нас от необходимости явным образом следить за порядком загрузки скриптов (чтобы не ломались зависимости от библиотек, когда скрипт загружается раньше библиотеки).

Для этого в stdlib.js (3_std.js) я добавил метод require(libFileName) и сделал незначительные правки в snegopat.js и snegopatwnd.js.

Измененные файлы из моего экспериментального бранча прилагаю (сделать push в мастер-репозиторий не могу в связи с отсутствием прав).

Пример использования:

Код:
$engine JScript
$uname TestRunner
$dname Менеджер юнит-тестов скриптов
$addin global
$addin stdlib

var jsUnit = stdlib.require("jsUnitCore.js");


В качестве параметра require() может быть передан либо полный путь к файлу скрипта, либо имя скрипта. В последнем случае скрипт-библиотека ищется в подкаталоге scripts/Libs каталога Снегопата.


Вложения:
core.zip [11.86 КБ]
Скачиваний: 429

_________________
С уважением,
Александр Кунташов
Канал про 1С в Телеграме: @kuntashov_devnotes
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 ноя 2011, 07:20 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:36
Сообщения: 1085
Нужное дело. Поддерживаю по всем пунктам


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 ноя 2011, 07:58 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Добавил в основной репозитарий.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 ноя 2011, 23:00 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:53
Сообщения: 448
Откуда: Саратов
Саша, эта версия работала не так, как работает директива $addin. Последняя возвращает addin.object, а require() возвращает addin.

Думаю, логичнее, если require() будет вести себя также, как и директива $addin.

В своей локальной ветке я внес изменения, исправленный скрипт прилагаю. Если ты не против, добавь в основной репозиторий.


Вложения:
3_std.zip [2.54 КБ]
Скачиваний: 404

_________________
С уважением,
Александр Кунташов
Канал про 1С в Телеграме: @kuntashov_devnotes
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 ноя 2011, 07:47 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Сделал.
И добавил тебе прав на коммит в основной репозитарий.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 ноя 2011, 08:32 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:53
Сообщения: 448
Откуда: Саратов
Спасибо!

_________________
С уважением,
Александр Кунташов
Канал про 1С в Телеграме: @kuntashov_devnotes


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 ноя 2011, 10:01 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:36
Сообщения: 1085
ИМХО сейчас одинаковый код юзается в 2-х скриптах
stdlib, testrunner
Код:
        var libGroupName = "Подгружаемые библиотеки";       
        var libGroup = addins.root.child;               
        var libFound = false;
       
        while (libGroup)
        {
            if (libGroup.name == libGroupName)
            {
                libFound = true;
                break
            }
           
            libGroup = libGroup.next;
        }
       
        if (!libFound)
            libGroup = addins.root.addGroup(libGroupName);

1. создавать группу совсем необязательно, она в любом случае создается в snegopat.js
2. код поиска лучше выделить либо в stdlib в отдельный методв,
либо просто и без поиска в snegopat.js запоминать созданную группу и возвращать ее отдельным методом.
имхо второй вариант лучше.
Этот метод, возможно, пригодится в дальнейшем для других задач.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 ноя 2011, 10:23 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:53
Сообщения: 448
Откуда: Саратов
Я так сделал, потому что самостоятельно такие принципиальные решения принимать не стал, а так согласен.
Единственное, подчеркну, в testrunner'е мне нужен именно объект IAddin, а require возвращает IAddin::object, поэтому в testrunner'е я продублировал код и сделал модификацию.

Я вообще бы предпочел, чтобы для нужд тестирования и подобных была возможность загружать скрипты без отображения в дереве загруженных скриптов окна Снегопата.

Нужен также способ временно приостановить обновление дерева перед массовой загрузкой скриптов, а потом делать полное обновление (вместо обновления дерева окна снегопата при загрузке каждого отдельного скрипта).

Я сейчас прорабатываю этот вариант.

_________________
С уважением,
Александр Кунташов
Канал про 1С в Телеграме: @kuntashov_devnotes


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB