[javascript] JavaScript를 확인하는 가장 빠른 방법은 JavaScript에 다른 하위 문자열이 포함되어 있습니까?
JavaScript에서 성능 문제를 해결하고 있습니다. 그래서 그냥 묻고 싶습니다 : 문자열에 다른 하위 문자열이 포함되어 있는지 확인하는 가장 빠른 방법은 무엇입니까 (부울 값이 필요합니다)? 아이디어와 샘플 스 니펫 코드를 제안 해 주시겠습니까?
답변
두 가지 가능성이 있습니다.
정규 표현식이 더 빠른 것 같습니다 (적어도 Chrome 10에서는).
성능 테스트-짧은 건초 더미
성능 테스트-긴 건초 더미
2011 년 업데이트 :
어떤 방법이 더 빠르다고 확신 할 수는 없습니다. 브라우저 간의 차이점은 엄청납니다. Chrome 10 indexOf
에서는 빠르지 만 Safari 5에서는 indexOf
다른 방법보다 속도가 느립니다.
당신은 자신을보고 시도해야합니다. 그것은 당신의 필요에 달려 있습니다. 예를 들어 대소 문자를 구분하지 않는 검색은 정규식을 사용하면 훨씬 빠릅니다.
2018 업데이트 :
사람들이 직접 테스트를 실행하지 못하도록하기 위해 가장 일반적인 브라우저의 현재 결과는 다음과 같습니다. 백분율은 다음으로 빠른 결과 (브라우저마다 다름)에 비해 성능이 향상되었음을 나타냅니다.
Chrome : indexOf (~ 98 % 빠름) <-- wow
Firefox : 캐시 된 RegExp (~ 18 % 빠름)
IE11 : 캐시 된 RegExp (~ 10 % 빠름)
Edge : indexOf (~ 18 % 빠름)
Safari : 캐시 된 RegExp (~ 0.4 % 빠름)
참고 정규식 캐시는 다음과 같습니다 var r = new RegExp('simple'); var c = r.test(str);
반대로 :/simple/.test(str)
답변
이것이 당신을 위해 작동합니까?
string1.indexOf(string2) >= 0
편집 : string2에 반복 패턴이 포함되어 있으면 RegExp보다 빠르지 않을 수 있습니다. 일부 브라우저에서는 indexOf가 RegExp보다 훨씬 느릴 수 있습니다. 의견을 참조하십시오.
편집 2 : 문자열이 매우 길거나 반복되는 패턴이 포함 된 경우 RegExp가 indexOf보다 빠를 수 있습니다. 의견과 @Felix의 답변을 참조하십시오.
답변
가장 빠른
- (ES6) 포함
var string = "hello", 부분 문자열 = "lo"; string.includes (하위 문자열);
- ES5 및 이전 indexOf
var string = "hello", 부분 문자열 = "lo"; string.indexOf (하위 문자열)! == -1;
답변
ES6에서는이 includes()
방법을 사용하여 한 문자열이 다른 문자열 내에서 반환되는지 true
또는 false
적절하게 반환되는지 확인할 수 있습니다 .
var str = 'To be, or not to be, that is the question.';
console.log(str.includes('To be')); // true
console.log(str.includes('question')); // true
console.log(str.includes('nonexistent')); // false
여기에 jsperf 가 있습니다
var ret = str.includes('one');
과
var ret = (str.indexOf('one') !== -1);
jsperf에 표시된 결과는 둘 다 잘 수행되는 것 같습니다.
답변
간단한 for 루프를 사용하여 문자열의 모든 요소를 반복하고 using을 사용하여 비교하는 charAt
것이 indexOf
또는 보다 빠릅니다 Regex
. 코드와 증명은 JSPerf 에서 구할 수 있습니다 .
ETA : indexOf
그리고 charAt
모두 jsperf.com에 나와있는 브라우저 범위의 데이터에 따라 크롬 모바일에 유사 끔찍한 수행
답변
: 간단한 문자열을 찾는 같이 IndexOf () 메소드를 사용하여 정규 표현식을 사용하기 위해 거의 동일 http://jsperf.com/substring – 그래서 어느 하나 쓰기보다 쉽게 보인다 선택할.