Skip to content

Latest commit

 

History

History
113 lines (82 loc) · 5.06 KB

File metadata and controls

113 lines (82 loc) · 5.06 KB

Демонстрация кэширования скриптов для библиотек OneScript

Обзор

Система кэширования скриптов интегрирована с загрузчиком библиотек OneScript и автоматически работает с методами ДобавитьКласс и ДобавитьМодуль.

Как работает кэширование

  1. Автоматическая интеграция: Когда LibraryLoader использует методы ДобавитьКласс() или ДобавитьМодуль(), вызывается цепочка:

    • LibraryLoader.CompileFile()
    • AttachedScriptsFactory.CompileModuleFromSource()
    • ScriptCacheService.TryLoadFromCache() и ScriptCacheService.SaveToCache()
  2. Кэш-файлы: Для каждого скрипта создаются:

    • script.os.metadata.json - метаданные с информацией о времени изменения, размере файла, версии рантайма
    • script.os.obj - объектный файл с информацией о модуле
  3. Валидация кэша: Кэш автоматически становится недействительным при:

    • Изменении исходного файла (время модификации или размер)
    • Обновлении версии рантайма OneScript

Тестирование кэширования

Включение отладочного режима

export OS_CACHE_DEBUG=1

Включение трассировки загрузки библиотек

export OS_LRE_TRACE=1

Создание тестовых файлов

  1. Тестовый модуль (/tmp/test_module.os):
// Тестовый модуль для демонстрации кэширования
Функция ПолучитьВремя() Экспорт
    Возврат ТекущаяДата();
КонецФункции
  1. Тестовый класс (/tmp/test_class.os):
// Тестовый класс для демонстрации кэширования
Перем Значение;

Процедура ПриСозданииОбъекта()
    Значение = "Тест";
КонецПроцедуры

Функция ПолучитьЗначение() Экспорт
    Возврат Значение;
КонецФункции
  1. Загрузчик библиотеки (/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.