Память против скорости в веб-приложениях Javascript

В моих прежних веб-приложениях, когда у пользователя был переход с одной «страницы» (без перезагрузки страницы, только новый div), я просто спрятал один div для последующего использования и created + показал новый. Когда пользователь вернулся из управления адресами в управление событиями, мне нужно было только скрыть текущий div и снова показать уже использованный. Конечно, для этого нужна память, но быстрее.

В моем новом веб-приложении я использую Backbone.js, Require.js и jQuery. Все мои модули AMD (jquery 1.7.1, backbone.js 0.5.3-optamd3, ...).

После прочтения интересных блогов Дерика Бейли ( http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/ ) я теперь очистите мои div перед переходом на новую «страницу» и воссоздайте ее на случай, если пользователь вернется к ней.

Точно так же в отношении модулей requirejs amd я использовал стратегию «скорость по сравнению с памятью»: сердце моей навигации по веб-приложению находится в моем единственном объекте-маршрутизаторе. Если пользователь выбирает «страницу» / функцию в первый раз, я загружаю модуль amd (это основа.js view object) для него и всех его зависимостей с помощью команды require и сохраните полученный объект представления (с его объектом модели) для последующего использования в массиве в объекте маршрутизатора. Когда пользователь возвращается, я беру сохраненный объект представления и повторно визуализирую представление.

Думаю, я переключусь с этого поведения на постоянную перезагрузку модуля (из кеша), но я не уверен.

Чтобы идти лучшим путем, я хочу получить лучшее понимание и хочу задать 2 вопроса:

  1. У меня 5 модулей AMD. Когда пользователю нужна функция, я загружаю и выполняю модуль и в результате получаю объект представления backbone.js, который сохраняю в массиве в моем объекте маршрутизатора. Каждый модуль AMD имеет Backbone.js (версия AMD) в качестве зависимости. Когда пользователь посетил все 5 «страниц» и все 5 моих объектов просмотра сохранены в моем массиве, будет ли у меня в памяти браузера 5 копий backbone.js, поскольку каждая зависимость backbone.js извлекается из кеша и выполняется заново, или сборщик мусора удалил его?
  2. Как другие разработчики веб-приложений думают об этой стратегии скорости по сравнению с памятью?

ПРОДОЛЖЕНИЕ Сегодня я нашел аналогичный вопрос по stackoverflow (http://stackoverflow.com/questions/7866971/how-does-amd-specifically-requirejs-handle-dependancies-across-multiple-module). Ответ был: «Он будет загружен только один раз, оба вышеуказанных модуля получат одно и то же значение модуля ...».

Так что, похоже, не так уж и плохо хранить результаты уже загруженных + выполненных модулей amd для дальнейшего использования.

Вольфганг

9
задан Wolfgang Adamec 13 January 2012 в 08:21
поделиться