#javascript #performance #memory #amd
#javascript #Производительность #память #amd
Вопрос:
Допустим, у меня есть приложение html5 на основе MVC, которое состоит из более чем 100 небольших модулей. Я бы хотел, чтобы оно работало как можно более плавно даже на планшете или смартфоне.
Поскольку одновременно используется только несколько из более чем 100 модулей, и я бы сказал, что половина из них даже не используется во время обычного сеанса работы с приложением, загрузка их в виде одного объединенного js-файла и хранение всего этого в памяти кажется несколько неприятным.
В настоящее время я использую CujoJS curl, который является загрузчиком AMD. Он отлично подходит для разработки, и я думаю, что он также хорошо подходит для некоторых производственных сред. Недостатком, конечно, является то, что загрузка отдельных файлов занимает больше времени, но я действительно не считаю это проблемой в данном случае. Меня беспокоит использование памяти с течением времени, например, если пользователь никогда не закрывает окно, а в памяти продолжает накапливаться больше модулей по мере изучения приложения. Насколько я знаю, загрузчики AMD не предоставляют никаких средств для выгрузки модулей.
Вопрос в том, должен ли я вообще беспокоиться о потреблении памяти в этой ситуации? В качестве преувеличенного примера, будет ли разница в использовании памяти между 200 КБ (необходимые модули по требованию) и 4000 КБ (все, от essentials до практически никогда не используемых функций) js-кода незначительной даже на мобильном устройстве?
Если я должен беспокоиться о потреблении памяти, что мне следует сделать, чтобы свести к минимуму потери памяти?Я могу думать только о минимизации объема кода в памяти путем планирования заранее, написания эффективного кода и выгрузки ненужных модулей. Или, в крайнем случае, путем перезагрузки страницы в некоторых точках.
Бонусный вопрос: (Как) я могу выгрузить модули из кеша curl? Я читал, что в RequireJS это возможно с небольшой настройкой, но я ничего не нашел для curl.
Комментарии:
1. Вы имеете в виду память во время выполнения или пропускную способность? Имейте в виду, что исходные файлы могут быть уменьшены и сжаты.
2. @Halcyon Я имею в виду память во время выполнения. Пропускная способность является второстепенной проблемой.
3. Зависит от того, насколько велики эти модули на самом деле. Кроме того, даже небольшие модули могут загружать и хранить большие наборы данных, объем кода с этим скорее не связан.
4. Вы не можете загрузить какой-либо код самостоятельно, движок может выпустить код, если он больше не используется (удаление из кэша curl может позволить движку выпустить его, но это не гарантировано). Одна вещь, которую вы должны иметь в виду, это то, что все современные движки js выполняют компиляцию точно во время, из-за этого используемая память зависит не только от размера кода, но и от способа его использования, ответ на вопрос Должен ли я указывать значения атрибутов по умолчанию в прототипе для экономии места? показано одно объяснение, почему это так.
5. @t.niese итак, если я напишу приложение, которому каждую секунду требуется js-файл размером 2 МБ, приложение сможет работать бесконечно, и у него не закончится память?