2012-03-28 5 views
1

я нашел интересный пост об использовании памяти и процессора здесь на переполнение стека, однако ни один из них не имел прямой подход к казалось бы, простой вопрос:CPU против использования памяти (теория)

Как общей стратегии в приложении JavaScript, лучше ли с точки зрения производительности использовать память (хранение данных) или CPU (пересчет данных каждый раз)?

Я имею в виду использование яваскрипта в общей среде браузеров (FF, Chrome, IE> 8)

ли кто-нибудь есть более прямой и документированный ответ на этот вопрос?

--- EDIT ---

Хорошо, я понимаю, вопрос очень общий. Я пытаюсь уменьшить «сферу действия».

Прочитав ваш ответ, я понял, что реальный вопрос: «Как раскрыть лимит памяти, в котором мой код JavaScript по-прежнему имеет хорошие характеристики?». Окружающая среда: общая среда браузеров (FF, Chrome, IE> 8)

Функции, которые я использую, являются не очень сложными математическими функциями, но могут производить довольно большой объем данных (300-400 КБ), и я хотел бы понять, лучше пересчитывать их каждый раз или просто хранить результаты в переменных.

+0

«Лучше» для чего? По каким ограничениям? В какой среде? –

+1

Возможно, не было прямого подхода, потому что ответа на этот вопрос нет. Это зависит от многих факторов (мобильных и настольных, медленных ПК и современных ПК, типа приложений и т. Д.), Как и на любом другом языке. –

+0

ok Я отредактировал вопрос –

ответ

3

Смутно связанный - JS в браузерах чрезвычайно голоден, когда вы начинаете использовать большие объекты/массивы. Если вы думаете о двоичных данных, созданных элементами холста или других мультимедийных API-интерфейсах, то, очевидно, вы не хотите хранить эти данные традиционными способами - не считаясь с проблемами производительности, что также важно.

Из MDN article talking about JS Typed Arrays:

как веб-приложения становятся все более и более мощным, добавляя такие функции как аудио и манипуляции видео, доступ к необработанным данным, используя WebSockets, и так далее, стало ясно, что есть когда было бы полезно, чтобы код JavaScript мог быстро и легко манипулировать необработанными двоичными данными.

Вот JS Perf comparison of arrays, а другой looking at canvas in particular, так что вы можете получить некоторые прямые примеры того, как они работают. Надеюсь, это полезно.

1

Это просто еще одна вариация на компромисс между размером и производительностью. Сохранение значений увеличивает размер, перерасчет снижает производительность.

В некоторых случаях расчет является сложным, а использование памяти невелико. Это особенно верно для математических функций.

В других случаях требуемая память была бы огромной, а вычисления просты. Это особенно верно, когда вывод будет большой структурой данных, и вы можете легко вычислить элемент в структуре.

Другие факторы, которые необходимо учитывать, - это то, какие ресурсы доступны. Если у вас очень ограниченная память, у вас может не быть выбора, и если это фоновый процесс, возможно, использование большого количества памяти нежелательно. Если расчет нужно делать очень часто, то вы с большей вероятностью сохраните значение, чем если бы оно было сделано один раз в месяц ...

В компромиссном есть много факторов, и поэтому нет «общего», ответьте, только набор руководств, которым вы можете следовать, поскольку каждый случай возникает.

+0

Я отредактировал мой qeustion, возможно, теперь «сфера» вопроса более ясна ... –

+0

@DanieleB, Нам все равно нужно знать больше, чтобы дать окончательный ответ. Вы говорите, что 300 + kb - это небольшой объем данных, возможно ли генерировать только интересующие данные, а не хранить их? Еще лучше было бы точно знать, что это за функции. – Matt

+0

@ Mat.Yes it я могу генерировать каждый раз данные, представляющие интерес. Функции, которые я использую, в основном: 1) функции backbone.js, такие как «pluck» 2) функции, которые я делал, которые в основном обрабатывают данные JSON, и могут иметь некоторые вложенные (максимум 3 уровня) функции подчеркивания _.each(). Не делая никаких тестов, я видел, что эти функции довольно «быстрые» по сравнению с другими функциями рендеринга, такими как highcharts В общем, мне нужна стратегия для написания эффективного кода. До сих пор я понял, что параметры, которые необходимо учитывать, по меньшей мере: память, сложность функций, использование сети. Другие? –

Смежные вопросы