Wb-rules 2.0: различия между версиями

(Подготовка страницы к переводу)
Строка 1: Строка 1:
<languages/>
<translate>
В обновлённом движке правил wb-rules присутствует ряд важных нововведений, касающихся логики написания сценариев.
В обновлённом движке правил wb-rules присутствует ряд важных нововведений, касающихся логики написания сценариев.


= Сценарии =
= Сценарии =


== Изоляция сценариев ==
== Изоляция сценариев ==
Строка 7: Строка 10:
Начиная с версии wb-rules 2.0, каждый файл сценария запускается в своём отдельном пространстве имён - '''контексте'''. Таким образом, каждый сценарий может определять
Начиная с версии wb-rules 2.0, каждый файл сценария запускается в своём отдельном пространстве имён - '''контексте'''. Таким образом, каждый сценарий может определять
свои функции и глобальные переменные без риска изменить поведение других сценариев.
свои функции и глобальные переменные без риска изменить поведение других сценариев.


=== Пример ===
=== Пример ===
В качестве примера приведём два сценария, одновременно запускаемых в движке правил.
В качестве примера приведём два сценария, одновременно запускаемых в движке правил.
Каждый сценарий определяет глобальные переменные и функции.
Каждый сценарий определяет глобальные переменные и функции.
Строка 43: Строка 48:
}, 1000);
}, 1000);
</syntaxhighlight>
</syntaxhighlight>


=== Примечание ===
=== Примечание ===
Строка 56: Строка 62:
Начиная с версии 2.0, в подобной конструкции нет необходимости. Тем не менее, старые сценарии,
Начиная с версии 2.0, в подобной конструкции нет необходимости. Тем не менее, старые сценарии,
использующие эту конструкцию, продолжат работу без изменений в поведении.
использующие эту конструкцию, продолжат работу без изменений в поведении.


=== Обходные пути ===
=== Обходные пути ===
Строка 61: Строка 68:
Если в вашей системе использовалось общее глобальное пространство для хранения общих данных и функций,
Если в вашей системе использовалось общее глобальное пространство для хранения общих данных и функций,
есть несколько способов реализации такого поведения:
есть несколько способов реализации такого поведения:


==== Использование модулей ====
==== Использование модулей ====


Можно написать модуль для организации взаимодействия. У модулей есть статическое хранилище,
Можно написать модуль для организации взаимодействия. У модулей есть статическое хранилище,
общее для всех файлов, импортировавших модуль. (см. [[#Модули|Модули]])
общее для всех файлов, импортировавших модуль. (см. [[Special:MyLanguage/#модули|Модули]])
 


==== Постоянное хранилище ====
==== Постоянное хранилище ====
Строка 81: Строка 90:
ps.myvar = "value"; // это значение доступно для всех пользователей хранилища с именем "my-global-storage"
ps.myvar = "value"; // это значение доступно для всех пользователей хранилища с именем "my-global-storage"
</syntaxhighlight>
</syntaxhighlight>


==== Прототип глобального объекта ====
==== Прототип глобального объекта ====
Строка 111: Строка 121:


Таким образом, первый способ обращения будет работать только в том случае, если myVar не определена в верхних областях видимости.
Таким образом, первый способ обращения будет работать только в том случае, если myVar не определена в верхних областях видимости.


== Анонимные правила ==
== Анонимные правила ==
Строка 123: Строка 134:
'''ВНИМАНИЕ:''' начиная с версии 2.0, при объявлении правил с одинаковыми
'''ВНИМАНИЕ:''' начиная с версии 2.0, при объявлении правил с одинаковыми
именами в одном файле теперь будет возвращаться ошибка.
именами в одном файле теперь будет возвращаться ошибка.


=== Пример ===
=== Пример ===
Строка 134: Строка 146:
});
});
</syntaxhighlight>
</syntaxhighlight>


== Управление правилами ==
== Управление правилами ==
Строка 144: Строка 157:


По умолчанию, все правила включены.
По умолчанию, все правила включены.


=== Пример ===
=== Пример ===
Строка 163: Строка 177:
// на текущий момент не поддерживается передача аргументов в then
// на текущий момент не поддерживается передача аргументов в then
</syntaxhighlight>
</syntaxhighlight>


== Постоянное хранилище данных ==
== Постоянное хранилище данных ==
Строка 188: Строка 203:


Если такое хранилище уже было создано когда-либо ранее, сценарий получит к нему доступ.
Если такое хранилище уже было создано когда-либо ранее, сценарий получит к нему доступ.


== Виртуальные устройства ==
== Виртуальные устройства ==
Строка 217: Строка 233:
Начиная с версии 2.0, в движке правил wb-rules появилась поддержка подключаемых JS-модулей (похожая по поведению на
Начиная с версии 2.0, в движке правил wb-rules появилась поддержка подключаемых JS-модулей (похожая по поведению на
аналогичную в Node.js, но с некоторыми особенностями).
аналогичную в Node.js, но с некоторыми особенностями).


== Расположение ==
== Расположение ==
Поиск модулей происходит по следующим путям (в заданном порядке):
Поиск модулей происходит по следующим путям (в заданном порядке):


Строка 234: Строка 252:
...
...
</syntaxhighlight>
</syntaxhighlight>


== Подключение модуля к сценарию ==
== Подключение модуля к сценарию ==
Строка 266: Строка 285:
и заново выполнен весь код модуля. Если модулю требуется использовать данные, общие для всех файлов сценариев,
и заново выполнен весь код модуля. Если модулю требуется использовать данные, общие для всех файлов сценариев,
для хранения данных следует использовать объект module.static.
для хранения данных следует использовать объект module.static.


== Создание модуля ==
== Создание модуля ==
Строка 274: Строка 294:
В этом файле будут доступны все стандартные функции wb-rules, а также набор специальных объектов, с помощью  
В этом файле будут доступны все стандартные функции wb-rules, а также набор специальных объектов, с помощью  
которого можно реализовать необходимый функционал модуля.
которого можно реализовать необходимый функционал модуля.


=== Объект exports ===
=== Объект exports ===


С помощью объекта exports можно передавать пользовательскому сценарию параметры и методы.
С помощью объекта exports можно передавать пользовательскому сценарию параметры и методы.


==== Пример ====
==== Пример ====
Строка 318: Строка 340:
};
};
</syntaxhighlight>
</syntaxhighlight>


=== Объект module ===
=== Объект module ===


Объект module содержит параметры, относящиеся непосредственно к файлу модуля.
Объект module содержит параметры, относящиеся непосредственно к файлу модуля.


==== module.filename ====
==== module.filename ====
Содержит полный путь до файла ''модуля''. Например, для модуля, сохранённого в /etc/wb-rules-modules/myModule.js:
Содержит полный путь до файла ''модуля''. Например, для модуля, сохранённого в /etc/wb-rules-modules/myModule.js:


Строка 329: Строка 354:
log(module.filename); // выведет /etc/wb-rules-modules/myModule.js
log(module.filename); // выведет /etc/wb-rules-modules/myModule.js
</syntaxhighlight>
</syntaxhighlight>


==== module.static ====
==== module.static ====
Объект, хранящий данные, общие для всех экземпляров данного модуля. Его следует использовать для тех данных,
Объект, хранящий данные, общие для всех экземпляров данного модуля. Его следует использовать для тех данных,
которые должны быть доступны сразу во всех сценариях, использующих данный модуль.
которые должны быть доступны сразу во всех сценариях, использующих данный модуль.
Строка 369: Строка 396:
Number of calls: 5
Number of calls: 5
</syntaxhighlight>
</syntaxhighlight>


=== __filename ===
=== __filename ===
Строка 392: Строка 420:


= Замеры производительности =
= Замеры производительности =
Cм. [[Движок_правил_wb-rules_2.0/Производительность|Замеры производительности]]
Cм. [[Special:MyLanguage/Движок_правил_wb-rules_2.0/Производительность|Замеры производительности]]
</translate>