Возможные утечки памяти в Internet Explorer 7 / Backbone? - PullRequest
3 голосов
/ 10 октября 2011

Я поэкспериментировал с Backbone, чтобы посмотреть, является ли этот фреймворк хорошим выбором для дальнейшего использования в нашем приложении.Одно требование состоит в том, что мы должны поддерживать Internet Explorer 7+, а другое - отображать не менее 200 элементов на странице.

Для тестирования платформы я создал довольно простой список, и он работает безупречно во всех основных браузерах, кромеInternet Explorer 7. Кажется, что есть некоторые утечки памяти, так как каждый раз, когда я сбрасываю данные, общее время рендеринга увеличивается.

Я настроил некоторые тестовые сценарии:

С объявленными событиями: http://jsfiddle.net/mefraimsson/a2YMF/

Без объявленных событий: http://jsfiddle.net/mefraimsson/u6byQ/

У меня была одна идея, что объявленные события никогда не очищались, когда элементы были удалены и добавлены в DOM,Когда я запускаю тестовый сценарий «без объявленных событий», часто нажимая кнопку «Перезагрузить данные», время рендеринга довольно стабильно, но при запуске «С объявленными событиями» время рендеринга быстро увеличивается, а объем памяти, используемый для IE7, увеличивается.Вот почему я думаю, что где-то есть утечка памяти.

  • Есть ли кто-нибудь, кто имел опыт рендеринга такого большого объема данных с помощью Backbone?
  • Есть ли кто-нибудь, кто испыталпроблемы утечки памяти при работе с Backbone?
  • Вы рекомендуете другой подход при работе с таким большим объемом данных с Backbone?Вместо большого количества вложенных представлений используйте одно представление и итерирование по данным в шаблоне может быть возможным решением, но тогда создается впечатление, что вы не получаете максимальную отдачу от Backbone?
  • Каково ваше мнение?Как вы думаете, это связано с объявлением событий или это реализация Backbone, которая утечка памяти?

Заранее спасибо

1 Ответ

8 голосов
/ 10 октября 2011

Утечки памяти являются распространенной проблемой в приложениях Javascript в целом. Я думаю, что есть некоторые фреймворки, которые пытаются справиться с этим для вас, но магистраль этого не делает. Браузер, который вы используете, имеет определенную разницу в том, как замечены эти утечки и проблемы, которые они вызывают, но они все еще существуют и в других браузерах. Обычно виноват не браузер, а то, как привязка событий обрабатывается в Javascript с помощью функций обратного вызова.

Я написал статью, обсуждающую это, с предложением способа справиться с этим, особенно с представлениями: http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

Обязательно прочитайте и комментарии. Есть несколько других замечательных предложений по устранению утечек памяти.

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