HTML localStorage setItem и производительность getItem около 5 МБ? - PullRequest
12 голосов
/ 13 апреля 2011

Я строил небольшой проект, который использовал HTML localStorage.Хотя я не был близко к пределу в 5 МБ для localStorage, я все равно решил провести стресс-тест.

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

Затем я неофициально рассчитал время выполнения setItem и getItem , используя объект Date javascript и обработчики событий (привязали get и set к кнопкам в HTML и просто нажали = P)

Производительность была ужасающей: запросы занимали от 600 до 5000 мс, а использование памяти приближалось к 200 Мб в худшем случае.Это было в Google Chrome с одним расширением (Google Speed ​​Tracer), в MacOSX.

В Safari это в основном> 4000 мс.

Firefox был неожиданностью, имея довольно многоне более 150 мс.

Все это было сделано в основном в состоянии бездействия - не мешал YouTube (Flash), не было много вкладок (ничего, кроме Gmail), и не было открыто ни одного приложения, кроме фонового процесса + браузера.Когда всплыла задача, интенсивно использующая память, localStorage также замедлился пропорционально.FWIW, я использую Mac в конце 2008 года -> 2.0 ГГц Duo Core с 2 ГБ оперативной памяти DDR3.

===

Итак, вопросы:

  1. ИмеетКто-нибудь делал какие-то сравнительные тесты с localStorage get и set для разных ключей и значений разного размера и в разных браузерах?
  2. Я предполагаю, что большая разница в задержке и использовании памяти между Firefox и остальными - Geckovs проблема Webkit.Я знаю, что ответ можно найти, углубившись в эти основы кода, но я определенно хотел бы знать, может ли кто-нибудь еще объяснить соответствующие подробности о реализации localStorage на этих двух движках, чтобы объяснить огромную разницу в эффективности и задержке между браузерами?

К сожалению, я сомневаюсь, что мы сможем решить ее, но чем ближе, тем лучше понимаешь ограничения браузера в его текущем состоянии.

Спасибо!

1 Ответ

2 голосов
/ 11 мая 2011

Браузер и версия становятся серьезной проблемой здесь. Дело в том, что, хотя существуют так называемые браузеры, основанные на Webkit, они также добавляют свои собственные патчи. Иногда они попадают в основной репозиторий Webkit, иногда нет. Что касается версий, браузеры всегда являются движущимися целями, поэтому этот тест может быть совершенно другим, если вы используете бета-версию или ночную сборку.

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

Честно говоря, лучшим способом действий было бы обсуждение этих результатов в соответствующем списке рассылки / форуме браузера, если они еще не были рассмотрены. Люди будут чаще проходить тестирование и проверять, соответствуют ли результаты.

...