Какой правильный способ гарантировать, что вы получите массив больше 1 после разделения? - PullRequest
3 голосов
/ 23 октября 2011

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

Итак, каков наилучший способ убедиться, что у вас будет массив больше 1?

  • a) используйте indexOf (), тогда если результат отличается от-1, split ()
  • b) split (независимо от наличия символов), затем выполняйте ТОЛЬКО, если значение array.length больше 1
  • c) другое, не указанное выше

Ответы [ 3 ]

0 голосов
/ 23 октября 2011

(b), очевидно, более эффективен, чем (a), потому что split использует ту же логику, что и indexOf, и эту логику не нужно будет повторять, если действительно имеется более 2 элементов. я не могу придумать более эффективного способа.

0 голосов
/ 23 октября 2011

Мы можем видеть, что даже когда есть что-то, что можно разделить, лучшие результаты получаются при выполнении теста indexOf против значения.Тем не менее, улучшение хуже, чем в случаях, когда 100% предметов не нуждаются в разделении.Таким образом, поскольку у вас больше элементов, которые необходимо разделить, тестирование дает меньшую выгоду (как и следовало ожидать).Так что это действительно зависит от варианта использования, поскольку дополнительный код занимает память и использует ресурсы.

http://jsperf.com/split-and-split-indexof/2

0 голосов
/ 23 октября 2011

Используя jsPerf , получается, что пропуск .indexOf() примерно на 23% более эффективен, чем его включение более 500 000 итераций (11.67 против 8.95 операций в секунду):

Без indexOf():

var str = "test";
for (var i = 0; i < 500000; i++) {
    var test = str.split('.');
}

С .indexOf():

var str = "test";
for (var i = 0; i < 500000; i++) {
    if (str.indexOf('.')) {
        var test = str.split('.');
    } else {
        var test = str;
    }
}

http://jsperf.com/split-and-split-indexof

EDIT

Хмм ... Если следующая строка:

if (str.indexOf('.') > -1)

http://jsperf.com/split-and-split-indexof-with-indexof-check

Или любое другое сравнение, это выглядит немного быстрее (примерно на 69%).

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

...