Объем памяти SVG для сложной страницы

У меня есть дизайн, который требует большого количества небольших гистограмм (размер спарклайна). Типичная страница может легко содержать более 60 графиков, показывающих более 100 точек данных на график. Будет ли объем памяти в браузере чем-то подобным непомерно высоким? Я также мог бы использовать серверный рендерер, который выводит png, но кажется, что с SVG можно сделать гораздо больше.

Другие соображения: SVG, скорее всего, будет преобразован в VML для IE с помощью Rapheal.js. Таким образом, объем памяти также должен быть разумным.

Любая помощь или методология поиска хорошего ответа приветствуется.


person Matt    schedule 11.02.2011    source источник
comment
Вам действительно легко проверить это, и трудно ответить кому-либо другому, потому что запретительное является субъективным. Я предлагаю вам запустить быстрый тестовый пример и определить, соответствует ли он вашим потребностям или нет.   -  person Phrogz    schedule 12.02.2011
comment
Есть несколько проблем с этим вопросом. Во-первых, объем памяти зависит от используемого браузера. Это также зависит от сложности структур памяти javascript, используемых для создания сюжета. Во-вторых, Raphael не превращает SVG в VML, он использует набор команд для рендеринга векторной графики и структурирует графику внутри DOM либо как SVG, либо как VML. Что вы, вероятно, захотите сделать, так это создать пробную страницу, которая создает 60 спарклайнов на одной странице, и наблюдать за потреблением памяти интересующими вас браузерами. Это почти наверняка будет НАМНОГО больше, чем PNG.   -  person Pridkett    schedule 15.02.2011
comment
+1 просто попробовать. Кроме того, в отличие от таргетинга на VML, я бы рекомендовал изучить библиотеку svg-web как способ отображения SVG в браузерах, которые не поддерживают его изначально: code.google.com/p/svgweb   -  person jbeard4    schedule 16.02.2011


Ответы (3)


Количество описанных вами элементов svg, безусловно, может создать проблему с точки зрения потребления памяти.

В отличие от элемента canvas, SVG требует, чтобы браузер поддерживал объектную модель для всех представленных элементов. Эта объектная модель упрощает привязку события к щелчку определенного элемента. Вам не нужно отслеживать, где находится квадрат на экране, насколько он велик, масштабируется и т. д. Однако это происходит за счет требований к памяти и резко контрастирует с тегом холста, который просто беспокоит. о том, каким цветом рисовать пиксели, и вам нужно беспокоиться об отслеживании того, какой «объект» был нажат.

Итак, пытаясь выяснить, будет ли производительность проблемой, обычно разумно начинать с наименьшего общего знаменателя, так сказать, с точки зрения вашего целевого оборудования. Вы ориентируетесь на мобильные устройства? Вы ориентируетесь на ноутбуки и настольные компьютеры?

Получив ответ на этот вопрос, создайте фиктивное приложение, предназначенное для этого оборудования, которое использует один фиктивный график (100 точек данных) снова и снова 60 раз. Создавайте достаточно, чтобы вы могли взаимодействовать с дисплеем таким образом, который отражает то, как ваши пользователи будут взаимодействовать с ним (если вы хотите, чтобы пользователи могли перемещать графики, это должно быть включено и т. д.)

Используя этот упрощенный прототип, теперь попробуйте использовать базовое взаимодействие, и если производительность соответствует вашим требованиям (т. е. ожиданиям аудитории вашего приложения).

Что касается повышения производительности приложения такого рода, я бы предложил использовать комбинацию ajax и svg. Я бы генерировал эскизы графиков (используя SVG, они были бы намного меньше благодаря уменьшенной детализации), и когда пользователь решит получить больше деталей, я бы использовал ajax, чтобы получить более подробное SVG-представление этого конкретного график.

Наслаждайтесь созданием своего приложения :)

person AdamJonR    schedule 18.02.2011
comment
Спасибо за вдумчивый ответ. Я не знаю ничего, что заменит настоящую попытку, но здорово пройти проверку на вменяемость, прежде чем погрузиться. - person Matt; 18.02.2011

Нравится идея Адама использовать заменитель PNG для спарклайнов SVG и вытягивать SVG по мере необходимости. Их можно легко отобразить на стороне сервера, используя тот же исходный код SVG, загруженный в библиотеку, например librsvg или, может быть, Каир.

Если вы ищете что-то, что использует холст (с автоматическими обходными путями для IE), взгляните на спарклайны jQuery., возможно, она уже делает все, что вам нужно.

person joshperry    schedule 28.02.2011

Нормализация ваших данных является ключевым моментом. В большинстве случаев 100 точек данных не нужны и не заметны для человеческого глаза в спарклайне шириной 50 пикселей. Используйте нормализацию данных, чтобы уменьшить количество точек со 100 до 5, что более приятно для глаз и более эффективно.

Спрайты изображений спарклайнов на стороне сервера будут иметь тенденцию превосходить внешние спарклайны, сгенерированные SVG/Canvas, когда у вас их большое количество.

Вот быстрое спарклайн-решение на стороне сервера на Java, в котором используется отличное сжатие PNG:

https://github.com/AnthumChris/anthum-sparkline

person AnthumChris    schedule 11.10.2017