JQuery: достаточно ли val () для многократного использования или лучше поместить значение в переменную

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

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();
}

...?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
1 928
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

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

Ответ принят как подходящий

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

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

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

Полностью согласен - очень хороший ответ!

Jarrod Dixon 02.01.2009 08:14

Разве код Javascript не выполняется в основном однопоточным, поэтому вероятность модификации в середине цикла фактически равна нулю?

cletus 02.01.2009 09:58

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

I.devries 02.01.2009 14:52

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

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

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

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

Другие вопросы по теме