jQuery: является ли val () достаточно быстрым для многократного использования или лучше поместить значение в переменную - PullRequest
4 голосов
/ 02 января 2009

Если вы делаете что-то вроде следующего:

var i = $('input[@name=some_field]');
if (i.val() != '' && !(i.val() >=1 && i.val() <= 36) || i.val() == 'OT')) {
     i.focus();
}

достаточно i.val() достаточно быстро, чтобы использовать его несколько раз, или если вы делаете:

var value = i.val();

сначала, а затем используйте значение в операторе if, например:

var i = $('input[@name=some_field]');
var value = i.val();
if (value != '' && !(value >=1 && value <= 36) || value == 'OT')) {
     i.focus();
}

...

Ответы [ 5 ]

12 голосов
/ 02 января 2009

Это не обязательно вопрос jQuery, но он довольно хорошо применим к большинству языков программирования. И на самом деле, в этом вопросе гораздо больше, чем просто проблемы с производительностью.

Следует иметь в виду, что если вы сохраняете значение, то нет вероятности того, что оно изменится во время выполнения вашего последующего кода. В большинстве случаев это то, что вы ожидаете и хотите. Но в некоторых случаях также возможно, что вызов val () вернет другое значение, особенно если вы выполняете цикл и делаете что-то, что занимает какое-то значительное время.

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

4 голосов
/ 02 января 2009

Когда вызывается без каких-либо параметров, я не думаю, что val () будет значительно медленнее, чем просто прямой доступ к свойству значения. Основываясь на моем чтении исходного кода jQuery, по сути, все, что делает метод val (), это проверка, является ли элемент выбором, и если нет, просто возвращает содержимое свойства value (с удалением символов \ r). Из-за вызова функции будут некоторые издержки и небольшие издержки при замене строки, но ничего из того, что я прочитал, не указывает на то, что эти издержки будут значительными.

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

3 голосов
/ 02 января 2009

Если вы посмотрите в код jQuery, вы увидите все, что происходит при выполнении функции val (), так что да, я предлагаю назначить ее переменной, без повторного выполнения.

1 голос
/ 02 января 2009

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

1 голос
/ 02 января 2009

Вы не получите удар по производительности из-за вызова jQuery val.

Это медленнее, чем собственный вызов DOM .value, так как вы подвергаетесь дополнительным накладным расходам дополнительного вызова функции, а также тому, что происходит внутри функции - см. Определение функции val здесь . Если вы не будете делать это сотни раз, вы не заметите этого.

Я бы выбрал любой способ, которым вы чувствуете себя более читабельным, и пошел бы с этим. Так или иначе, и придерживался этого в своем коде! Лично я бы просто звонил val каждый раз, когда мне это нужно, и сохранял строку дополнительного назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...