큰 루프 내에서 고급 성능이 사용되는 것은 .indexof (str) 또는 .match (regex)?
-
06-07-2019 - |
문제
내 페이지 에이 배열이 있습니다. 프로토 타입은 많은 처리 시간을 빨아들이는 것 같습니다.
Array.prototype.findInArray = function(searchStr) {
var returnArray = false;
for (i=0; i<this.length; i++) {
if (typeof(searchStr) == 'function') {
if (searchStr.test(this[i])) {
if (!returnArray) { returnArray = [] }
returnArray.push(i);
}
} else {
var regexp = new RegExp(".*" + searchStr + ".*");
if (this[i].match(regexp)) {
if (!returnArray) { returnArray = [] }
returnArray.push(i);
}
}
}
return returnArray;
}
해결책
우선, 당신은 양쪽에 ".*"를 가질 필요가 없다는 것을 알고 있습니까? 이미 기본적으로 정규 표현식은 문자열 내부의 어느 곳에서나 일치합니다. 둘째, 일정한 문자열을 검색하고 있고 정규 표현식이 제공하는 고급 물건을 사용할 필요가 없다면 사용하는 것이 더 빠릅니다. .indexOf()
. 또한 특별한 의미를 가진 캐릭터를 탈출하는 것에 대해 걱정할 필요가 없습니다.
다른 팁
정규 표현은 크게 다를 수 있습니다. 간단하고 잘 만들어진 정규 표현식이 indexof ()보다 빠르거나 빠르게 작동 할 수 있다고 생각합니다. 반면에 복잡한 정규 표현은 더 많은 작업을 수행하기 때문에 더 많은 시간이 필요합니다.
또한 브라우저 구현 문제 Clouding 문제가 있습니다. 각 브라우저가 특정 요구 사항으로 각 유형의 탐지를 수행하는 데 걸리는 시간을 측정하기 위해 시간이 지정된 루프를 작성하지 않으면 실제로 확실한 답변을 얻을 수는 없습니다.
더 나쁜 것은 루프 외부에서 루프를 한 번 정의하거나 인수로 전달하는 모든 반복에 대한 새로운 정규 표현 객체를 만드는 것입니다.
또한이 용도로 테스트 더 좋고 빠릅니다 성냥.
제휴하지 않습니다 StackOverflow