Который более эффективен, строковые функции PHP или regex в PHP?

Предполагая, var friend = { firstName: 'Harry', lastName: 'Potter' };

Есть два варианта:

Обновление модели в памяти и сохранение (простой javascript array.push):

person.friends.push(friend);
person.save(done);

или

PersonModel.update(
    { _id: person._id }, 
    { $push: { friends: friend } },
    done
);

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

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

18
задан Parrots 11 March 2009 в 14:34
поделиться

7 ответов

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

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

<час>

Редактирование с новой информацией в OP:

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

Захват первая половина (на основе третьего местоположения подстроки "000000") и сравнивают ее хеш со следующими 20 байтами, выбрасывая что-нибудь.

Использование: strpos() и substr()
Или: /$(.*?0{6}.*?0{6}.*?)0{6}/

Тогда захватывают следующие 19 байтов после этого и разделяют это на 8 (встряхните 1), и 8.

Использование: substr() - (я принимаю, Вы имеете в виду 17 байтов здесь - 8 + 1 + 8)

$part1 = substr($myStr, $currPos, 8);
$part2 = substr($myStr, $currPos + 9, 8);
16
ответ дан 30 November 2019 в 07:13
поделиться

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

РЕДАКТИРОВАНИЕ: Для этой определенной проблемы, которую Вы отправили, я буду favorize строковые операции, но только потому, что я не знал бы, как сделать это в regex. Это, кажется, довольно просто, за исключением хеша, таким образом, я думаю, что функции regex/string не будут иметь большое значение.

6
ответ дан 30 November 2019 в 07:13
поделиться

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

Теперь, когда Вы отредактировали свой вопрос. Я использовал бы строковые функции для того, что Вы пытаетесь выполнить. ремни для правки бритв () и substr () - то, что приходит на ум на первый взгляд.

6
ответ дан 30 November 2019 в 07:13
поделиться

В целом строковые функции быстрее, и функции regex более гибки.

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

4
ответ дан 30 November 2019 в 07:13
поделиться

Если то, что Вы делаете, вообще разумно, чтобы сделать строковые функции использования, необходимо использовать их. Как, если Вы определяете, происходит ли постоянная строка 'abc' в $value, Вы определенно хотите проверить strpos($value, 'abc') !== false, не preg_match('/abc/', $value). При находке большой строковой перестановки и преобразований для выполнения то, что Вы имели бы с regex, тем не менее, Вы почти наверняка собираетесь волновать уничтожение и производительность и пригодность для обслуживания.

При касаниях скорости, тем не менее, когда она сводится к нему, не думайте об этом, синхронизируйте ее. Эти time команда является Вашим другом.

4
ответ дан 30 November 2019 в 07:13
поделиться

Собственные строковые функции являются путем быстрее. Преимущество regexp - то, что можно сделать в значительной степени что-либо с ними.

1
ответ дан 30 November 2019 в 07:13
поделиться

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

0
ответ дан 30 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: