Производительность о replace () или substr () в Javascript - PullRequest
2 голосов
/ 06 марта 2012

Мне было интересно узнать производительность JavaScript при использовании string.replace () или string.substr ().Позвольте мне объяснить, что я делаю.

У меня есть строка типа

str = "a.aa.a.aa."

Мне просто нужно «вставить» последний элемент в str, где я всегда знаю, какой это тип символаесть (например, здесь точка).

Это так просто, я могу следовать разными способами, например

str = str.substr(0, str.length-1) // same as using slice()

или

str = str.replace(/\.$/, '')

Какие методывы бы использовали?Зачем?Не хватает ли производительности при использовании того или иного метода?Длина строки незначительна.

(это мой первый пост, поэтому, если я делаю что-то не так, пожалуйста, сообщите мне!)

Ответы [ 5 ]

11 голосов
/ 06 марта 2012

Для тестов производительности в JavaScript используйте jsPerf.com

Я создал тестовый пример для вашего вопроса здесь , который показывает, что substr намного быстрее (по крайней мере, в Firefox).

2 голосов
/ 06 марта 2012

Если вы просто хотите использовать последний символ в строке, используйте нижний индекс, а не какую-либо замену:

str[str.length-1]
1 голос
/ 06 марта 2012

Вы должны делать это тысячи раз в цикле? Если нет (и «Длина строки незначительна»), то любой способ подойдет.

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

0 голосов
/ 06 марта 2012

Когда у вас возникают подобные сомнения, либо выберите то, что вам нравится лучше всего (стиль говорит, что запускать его только один раз не имеет большого значения), либо используйте http://jsperf.com.

Для этого самого примера, смотрите здесь почему substr лучше : -).

0 голосов
/ 06 марта 2012

Способ substr всегда должен быть быстрее любого вида RegExp.Но разница в производительности должна быть незначительной.

...