Лучшие способы заменить текст - производительность - PullRequest
0 голосов
/ 26 июня 2011

Есть ли более эффективные способы замены текста, чем использование приведенного ниже кода регулярного выражения, особенно если текст большой и к нему постоянно обращаются разные пользователи. Я понимаю, что прирост производительности может быть незначительным, но мне интересно, есть ли лучший способ сделать это. Это то, что я использую, чтобы заменить foo на foonew

str.replace(/foo/gi, 'foonew')

Обновление: текстовые данные извлекаются из базы данных в держатель текстовой области перед выполнением замены слова. Затем я получаю доступ к значению textarea, заменяю слова, затем добавляю обновленный текст в тело

Ответы [ 2 ]

1 голос
/ 26 июня 2011

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

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

  2. Если размер замены такой же, вы можете сделать это на месте без копирования.

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

0 голосов
/ 26 июня 2011

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

Самый эффективный (и наиболее безопасный) способ сделать это - заменить слова на стороне сервера, прежде чем когда-либоотправка данных.

Тогда ваш JS (который пользователь может изменить!) ничего не должен делать, кроме отображения информации.

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

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