Память против скорости в веб-приложениях Javascript - PullRequest
9 голосов
/ 12 января 2012

В моих прежних веб-приложениях, когда у пользователя был переход с одной «страницы» (без перезагрузки страницы, просто новый div) на другую, я просто спрятал один div для дальнейшего использования и создал + показал новый. Когда пользователь вернулся из управления адресами в управление событиями, мне нужно было только скрыть текущий 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 (это объект представления 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 для дальнейшего использования.

Wolfgang

1 Ответ

2 голосов
/ 09 февраля 2012

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

Память - это скорость.

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

  • extern ваших файлов js для кэширования браузера.
  • Использовать локальное хранилище
  • Больше всего вычислений у пользователя
  • Минимизировать сервер и оптимизировать поток запросов
...