2012-01-12 4 views
9

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

В моем новом веб-приложении я использую 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/) Теперь я очищаю свои divs перед тем, как перейти на новую «страницу», и заново создайте его, если пользователь вернется к нему.

Аналогично, относительно модулей requirejs amd У меня была скорость над стратегией памяти. Сердце навигации по моему веб-приложению находится в моем единственном объекте маршрутизатора. Если пользователь впервые выбирает «страницу»/функцию, я загружаю модуль amd (это объект просмотра backbone.js) для него и всех его зависимостей с помощью команды 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 для последующего использования.

Вольфганг

ответ

2

Cache все (что может быть использовано более одного раза). (напишите в Canvas/ImageData). У вас должно быть только 1 копия фреймворка в памяти. Если вас беспокоит, есть еще, перепишите его, чтобы заставить все AMD использовать один источник Backbone.

Память is скорость.

Если вы хотите лучшую скорость:

  • Экстерн ваши JS-файлы для кэширования браузера.
  • Использование LocalStorage
  • ли большинство вычислений на пользователя
  • Минимизация сервера и оптимизировать запрос потока