Я изучаю варианты использования потоковой передачи в XSL. Я знаю два очевидных случая:Использовать случай для XSL Streaming на небольшом документе, отличном от раннего выхода?
A. Вам нужно преобразовать очень большой документ, который не может храниться в памяти. B. Вам нужна только небольшая часть документа, и часто эта маленькая часть находится рядом с верхней частью. Затем вы можете сэкономить время через ранний выход.
Я пишу, чтобы спросить, на практике, есть третий реальный случай использования:
C. У вас есть простое преобразование и хотите отказаться, необходимое для построения дерева XML процессорного времени. Для примера, представьте поставки в магазине хранятся в структуре XML в следующем формате:
верхнего уровня = год
2-й уровень = месяц
3-го уровня = День отгрузки
4-й уровень = Пересылка ID
пятого уровня = Отдельные элементы в отгрузке
Ю. для примера рассмотрим преобразование, целью которого является вытащить информацию на уровне «месяц» .... нужны только данные, хранящиеся в атрибутах элементов месяца, и не нуждающиеся в информации о потомках этих узлов.
Возможно ли, что такое преобразование может извлечь выгоду из потоковой передачи, хотя весь документ должен быть прочитан? Я надеялся, что может быть достигнуто некоторое время, потому что нет необходимости строить деревья, но в моем ограниченном тестировании кажется, что это не так.
Я попробовал такой пример в SAXON 9.5.1.3, а потоковая передача была примерно на 20% медленнее, чем пример без потоковой передачи. Возможно, накладные расходы, связанные с выполнением потоковой передачи, почти всегда будут хуже, чем время, затраченное на не создание деревьев? (По крайней мере, в SAXON, где построение дерева происходит очень быстро.)
Или я делаю ошибку в своем тестировании, и есть ясные примеры, когда потоковая передача более эффективна, даже когда весь документ должен быть прочитан?
Я, вероятно, продолжу иногда пытаюсь это сделать, и я дам вам знать, если я в конечном итоге найду подлинный случай, когда один из моих реальных анализов в конечном итоге выиграл, отказавшись от строительства дерева. Моя работа на самом деле часто имеет очень небольшие затраты на сериализацию, потому что я использую XSL для анализа данных, а не для их преобразования. [Я предпочел бы работать на языке с родным XPath3, чем конвертировать все в PyTables ...] –
Еще один пример для сокращения требований к памяти, конечно, заключается в том, что у вас есть большое количество небольших документов, а не один большой документ. Это может быть пакетный процесс с использованием функции collection() или высокопроизводительный веб-сервис, выполняющий множество преобразований. –