JQuery / Javascript скорость ... мне действительно важно? - PullRequest
3 голосов
/ 02 марта 2011

Я видел много постов, сравнивающих скорости различных запросов селектора и методы обхода DOM.Конечно, это имеет значение в случаях с сотнями или тысячами элементов и O ^ n-операциями, но действительно имеет значение скорость в 99% случаев, когда Jquery выполняет некоторую манипуляцию с DOM (или анимацию, или тост) в ответ на действие пользователя?

Разве почти все действия JQuery не будут выполняться быстрее, чем обратная связь с сервером?

Имеет смысл разработать оптимизированный для сервера код на стороне сервера.И имеет смысл быть ответственным за распределение памяти и очистку в javascript, чтобы браузер пользователя не работал как Flash около v5.Я не вижу никакого смысла тратить время на оптимизацию скорости JQuery / Javascript, если что-то заметно замедляет страницу во время тестирования.

Может кто-нибудь сказать мне, если и почему я должен заботиться о скорости JQuery?

Редактировать

Мой тон, по общему признанию, плаксив, но не предназначен для аргументации.На есть хорошие ресурсы, как подходить к оптимизации, когда вам нужно здесь , лучший способ задать мой вопрос был бы:

Что такоеВлияние неоптимального Javascript / Jquery?
Если я не замечаю этого, стоит ли беспокоиться об этом?

Принято

После прочтенияОтветы, которые я думаю, лучший ответ на этот вопрос зависит от вашего проекта и размера команды.В ситуациях, когда программисты не имеют полного просмотра страницы, которую увидит пользователь, например, команды, в которых

  • программисты отвечают за отдельные функции на странице
  • программисты разрабатывают имодульное тестирование независимо
  • существует специальный интерфейсный API или другой код, который может повлиять на фактическое время отклика

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

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

  • отсутствиеспециализации
  • потребность в высокой производительности программиста
  • сосредоточенная ответственность за весь интерфейс в одном лице

Вся оптимизация проталкивается вниз в списке приоритетов.Ответ @ Анурага помог мне разобраться в сути вопроса и принять лучшее решение.

Ответы [ 5 ]

7 голосов
/ 02 марта 2011

На самом деле нет смысла что-либо оптимизировать преждевременно , не только jQuery.

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

Создание хороших приложений - дело непростое, и слишком ранняя попытка оптимизации может привести к сложным и сложным в обслуживании проектам и архитектурам.

3 голосов
/ 02 марта 2011

Я на самом деле хотел проголосовать за закрытие вопроса как субъективный и аргументированный , но я думаю, что дело не в аргументации.

Вопрос, который мы должны здесь задать, это почему бы нам не оптимизировать наш код ?

Я должен признать, что интерпретаторы ECMA- / Javascript значительно улучшились за последние годы, поэтому общая производительность Javascript возросла.Тем не менее, Javascript в среде браузера все еще не очень быстро.Особенно, когда дело доходит до манипулирования DOM на самом деле оно довольно медленное (или: может быть очень медленным).

Есть множество замечательных книг на эту тему, одна из которых яНастоятельно рекомендуется Высокопроизводительный Javascript от Николаса С. Закаса.

Чтобы назвать несколько причин, по которым мы должны оптимизировать наш код:

  • Не все пользователи имеютВ ультрасовременном браузере мы должны гарантировать, что пользователи со старым и медленным браузером также имеют хороший пользовательский интерфейс
  • Javascript в целом все еще имеет ограничения.Это означает, что использование памяти ограничено, так как время выполнения
  • Javascript и поток пользовательского интерфейса браузера не могут выполняться параллельно.Это означает, что slow'ish Javascript будет сильно влиять на пользовательский опыт
  • В конце концов, это хорошая практика!Если вы привыкли писать оптимальный код, вы будете делать это каждый раз, что, на мой взгляд, очень хорошо

Даже с сильно абстрагированной средой, такой как jQuery, вы легко можете делать ужасные вещи,Например, простой запрос, такой как

$('body > *')

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

2 голосов
/ 02 марта 2011

Если ваш код медленный, jQuery вряд ли станет узким местом.Это быстро для того, что он делает.

Скорее всего, ваш алгоритм будет проблемой.

1 голос
/ 02 марта 2011

Вас должно волновать, когда это начинает иметь значение.

То есть производительность должна быть особым требованием ваших приложений, и, как и в любом другом приложении, вы не должны тратить слишком много времени, беспокоясь о производительности, покаего отсутствие влияет на некоторые требования.Конечно, я не говорю, что используйте O(n^3) алгоритмы, когда есть простая линейная альтернатива, но узкие места могут возникать во многих местах, и ваша библиотека JavaScript является одним из них.

0 голосов
/ 02 марта 2011

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

UPDATE Читайте комментарии ниже. Это то, что я использовал для тестирования for функций javascript $.each. JQuery выигрывает на 4 мс локально. jQuery 11ms против javaScript 14ms

var array = new Array();
for (var i = 0; i < 10000; i++) {
    array[i] = 0;
}

console.time('native');
var l = array.length;
for (var i = 0; i < l; i++) {
    array[i] = i;
}
console.timeEnd('native');

console.time('jquery');
$.each(array,
function(i) {
    array[i] = i;
});
console.timeEnd('jquery');
...