Система кэширования скриптов интегрирована с загрузчиком библиотек OneScript и автоматически работает с методами ДобавитьКласс и ДобавитьМодуль.
-
Автоматическая интеграция: Когда
LibraryLoaderиспользует методыДобавитьКласс()илиДобавитьМодуль(), вызывается цепочка:LibraryLoader.CompileFile()AttachedScriptsFactory.CompileModuleFromSource()ScriptCacheService.TryLoadFromCache()иScriptCacheService.SaveToCache()
-
Кэш-файлы: Для каждого скрипта создаются:
script.os.metadata.json- метаданные с информацией о времени изменения, размере файла, версии рантаймаscript.os.obj- объектный файл с информацией о модуле
-
Валидация кэша: Кэш автоматически становится недействительным при:
- Изменении исходного файла (время модификации или размер)
- Обновлении версии рантайма OneScript
export OS_CACHE_DEBUG=1export OS_LRE_TRACE=1- Тестовый модуль (
/tmp/test_module.os):
// Тестовый модуль для демонстрации кэширования
Функция ПолучитьВремя() Экспорт
Возврат ТекущаяДата();
КонецФункции- Тестовый класс (
/tmp/test_class.os):
// Тестовый класс для демонстрации кэширования
Перем Значение;
Процедура ПриСозданииОбъекта()
Значение = "Тест";
КонецПроцедуры
Функция ПолучитьЗначение() Экспорт
Возврат Значение;
КонецФункции- Загрузчик библиотеки (
/tmp/package-loader.os):
Функция ПриЗагрузкеБиблиотеки(ПутьКБиблиотеке, СтандартнаяОбработка, ОтменитьЗагрузку)
// Добавляем модуль - будет создан кэш
ДобавитьМодуль("/tmp/test_module.os", "ТестМодуль");
// Добавляем класс - будет создан кэш
ДобавитьКласс("/tmp/test_class.os", "ТестКласс");
СтандартнаяОбработка = Ложь;
КонецФункцииПосле выполнения загрузки библиотеки должны появиться файлы:
/tmp/test_module.os.metadata.json/tmp/test_module.os.obj/tmp/test_class.os.metadata.json/tmp/test_class.os.obj
{
"FormatVersion": 1,
"SourceModifiedTime": "2025-06-19T09:30:15.123456+00:00",
"SourceSize": 145,
"SourcePath": "/tmp/test_module.os",
"CacheCreatedTime": "2025-06-19T09:30:16.789012+00:00",
"RuntimeVersion": "2.0.0.0"
}✅ Готово:
- Интеграция кэша с
AttachedScriptsFactory - Автоматическое кэширование при использовании
ДобавитьКлассиДобавитьМодуль - Валидация кэша по времени изменения файла, размеру и версии рантайма
- Создание метаданных и объектных файлов
- Конфигурируемое включение/отключение кэширования
- Полная сериализация/десериализация
IExecutableModule - Загрузка скомпилированных модулей из кэша
Система кэширования уже работает с методами загрузчика библиотек ДобавитьКласс и ДобавитьМодуль. Кэш-файлы создаются автоматически, валидация работает корректно.
Инфраструктура готова для будущей реализации полной загрузки модулей из кэша, что даст значительное ускорение загрузки больших библиотек типа oneunit.