Кэшировать набор данных в Vega-lite или Vega-embed

У меня есть пример использования, когда пользователь может создавать разные визуализации с одним набором данных методом проб и ошибок. Можно ли кэшировать загруженный и проанализированный набор данных в Vega для повышения производительности?

Обновление:

Согласно ответу @dominik, я попытался поместить данные в строку как объект JavaScript. Однако похоже, что Vega-lite все еще анализирует данные, на что уходит много времени. Спецификация, которую я использовал, показана ниже, что показывает, что данные действительно встроены.

Спецификация Vega-lite со встроенными данными

Снимок экрана инструмента профилирования Chrome показывает, что функция parse занимает большую часть времени.

Стек, показанный в инструменте профилирования Chrome


person Snowfish    schedule 21.07.2018    source источник


Ответы (1)


Не из коробки, потому что нет никаких гарантий, что данные не изменятся. Однако вы можете прочитать набор данных за пределами Vega, а затем передать его либо встроенным в спецификацию, либо через API представления.

person dominik    schedule 11.08.2018
comment
В моем случае я гарантирую, что данные не изменятся. Когда я передаю данные в соответствии со спецификацией, он все равно будет их анализировать, верно? Можно ли пропустить этап разбора? Может быть, переопределив базовый конвейер? - person Snowfish; 18.08.2018
comment
Vega-Lite только что передала ссылку на Vega, поэтому накладных расходов нет. Просто убедитесь, что вы передаете объект JavaScript с типами, максимально близкими к тому, что вам нужно (например, строки, анализируемые как числа, ...). - person dominik; 19.08.2018
comment
Неплохо подмечено. В этом случае я должен убедиться, что объект JavaScript соответствует формату Vega. Как мне прочитать / проанализировать набор данных (например, файл csv) в объект JavaScript, который следует формату Vega? Предоставляет ли Vega / D3 / Vega-Embed такой API? - person Snowfish; 20.08.2018
comment
Это массив с объектами. Подойдет любой анализатор CSV, такой как D3 или datalib. - person dominik; 21.08.2018
comment
Встраивание данных, похоже, не помогает. Я отредактировал вопрос, чтобы показать результаты профилирования. Похоже, что Vega-lite решает проанализировать данные несмотря ни на что. - person Snowfish; 22.08.2018
comment
Vega-Lite вычисляет хэш, так что когда две ветви потока данных используют одни и те же данные, они объединяются. Я не знал, что вы спрашиваете о Vega-Lite. Одно из решений - вставить данные через API представления после компиляции спецификации. В любом случае, если вы могли бы сообщить о хешировании, я могу сделать это быстрее. - person dominik; 23.08.2018
comment
Отчет об ошибке создан: github.com/vega/vega-lite/issues/ 4146 # issue-354491476. Поскольку я не знаком с внутренним устройством Vega-Lite, я не уверен, что вы имеете в виду, говоря о слиянии двух ветвей потока данных (какие преимущества это дает?). Что касается предложения API представления, означает ли это, что я использую фиктивный набор данных для спецификации Vege-Lite и вставляю данные позже? - person Snowfish; 28.08.2018
comment
Это было исправлено в последней версии. - person dominik; 30.11.2018