Управление памятью при работе с svg <image> - PullRequest
0 голосов
/ 07 марта 2012

Я использую SVG-Edit для создания довольно большого SVG-файла изображения. Проблема в том, что использование памяти кажется безумным, и мне интересно, нормально ли это или есть вещи, которые мне не хватает в отделе оптимизации.

Вот таблица, показывающая дельту памяти на каждом этапе с использованием Firefox 10 about: memory page: about:memory

Этапы:

  • До: до загрузки SVG-Edit
  • Готов: SVG-Edit загружен
  • Загрузка 35 изображений общим размером 16,6 МБ *
  • Предварительный просмотр сгенерированного файла *
  • Закрытый просмотр *
  • Закрытая вкладка, запуск очистки памяти FF с помощью about: page memory

* Моя пользовательская функция, а не SVG-Edit

Как вы можете видеть в дельте Ready <-> Load Images, использование памяти значительно увеличилось на 300 МБ! Чтобы загрузить 16 МБ изображений! Я загружаю изображения, создавая ObjectURL , поэтому это не может быть причиной. Во время предварительного просмотра я преобразую массив ObjectURL в data: uri, так что я понимаю, насколько сильно он увеличился (все же, я думаю, это слишком много). Требуется иметь один SVG-файл со всеми встроенными изображениями, поэтому размер каждого SVG-файла составляет 50 МБ или более.

Стоит отметить, что SVG-Edit не использует Canvas. Это DOM-редактор.

Буду признателен за любую помощь, особенно за то, как я могу точно определить, что именно занимает память.

Вот упрощенный процесс загрузки изображений (событие input change ()):

  • установить Image.src для objectURL
  • установить событие Image.onload для создания элемента SVGImage с src, width, height, скопированным из Image. revokeObjectURL () также выполняется
  • сохранить SVGImage в глобальном массиве объекта {imageID, элемент, дескриптор файла}
  • добавить SVGImages к SVG

1 Ответ

3 голосов
/ 07 марта 2012

16 МБ - это размер SVG.Скачок в 300 МБ происходит для поверхностей изображения, которые представляют собой данные пикселей.Это будет 4 байта на пиксель визуализированного изображения.

Таким образом, вы можете получить крошечное изображение SVG с прямоугольником размером 1000 на 1000 пикселей;это, вероятно, может быть сделано в менее чем 500 байтах SVG.Но отображаемая версия будет 4 МБ пиксельных данных ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...