.includes()를 사용하여 특정 키워드가 문자열로 되돌아 왔는지 확인하는 프로그램을 작성 중입니다. 주로 카테고리별로 카운트를하기 때문에 json 객체에서 키워드를 분류했습니다.다양한 서브 어레이를 테스트하기 전에 평평한 배열에서 .includes()를 테스트하면 js의 성능이 향상됩니까?
첫 번째 방법은 텍스트의 각 단어를 반복하고 키워드 개체의 각 배열에 대해 if 문을 실행하는 것입니다. 이로 인해 텍스트의 각 단어에 대해 6 개의 다른 if 문이 생겼습니다. 특히 텍스트의 많은 단어가 키워드 배열의 단어 중 하나와 일치하지 않기 때문에 매우 효율적이지 않을 수도 있습니다.
그런 다음 키워드 개체를 단일 배열로 병합하는 것이 더 좋은지, 더 구체적인 키워드 배열로 이동하기 전에 병합 된 배열의 단어와 단어가 일치하는지 확인하는 것이 좋습니다.
나는 간단한 예를 아래에 포함했다 :
키워드의 목록 :
{
"category1": {
"subcategory1": [
"keyword",
"keyword"
],
"subcategory2": [
"keyword"
]
},
"category2" : {
"subcategory1" : [
"keyword",
"keyword",
"keyword"
],
"subcategory2" : [
"keyword",
"keyword"
]
},
"category3": [
"keyword",
"keyword",
"keyword"
]
}
이제 두 번째 방법, 나는 다음, 배열의 숫자로 JSON 개체 (키워드 목록)을 평평 reduce()를 사용하여 단일 배열 (keywordListArray)로 줄입니다. 그런 다음 더 구체적인 테스트를 실행하기 전에 어느 배열에도없는 단어를 걸러 낼 if 문을 포함 시켰습니다.
for (let property in text) {
if (keywordListArray.includes(property)) {
// Will this improve performance?
if (keywordList.category.subcategory.includes(property)) {
result.category.subcategory ++;
}
if (keywordList.category.otherSubcategory.includes(property)) {
result.category.subcategory ++;
}
}
}
그런 다음 각 접근 방식의 실행 시간을 확인했습니다. 간단한 예제를 제공했지만 필자의 경우 키워드 개체는 각각 약 10 개의 키워드로 구성된 6 개의 배열로 구성됩니다. 입력 텍스트의 길이는 약 200 자이며 키워드와 약 15 개의 일치 항목을 반환합니다.
200 개 단어의 텍스트: 9-11 MS
: 편평한 배열 전에 필터 (방법 2) 10-12 MS 실행 시간 : 편평한 배열 전에 필터 (접근법 1)이없는실행 시간
나는 또한 400 단어로 테스트했지만 실행 시간에는 거의 차이가 없다.
'좋은 코드'를 쓰는 것과 성능 측면에서 어느 접근 방법을 권하고 싶습니다.
두 가정은 시작하기 :
- 키워드와 일치하는 텍스트의 더 많은 단어가 더 평탄화 된 배열을 사용하여 이전에 필터를 중복.
- json 개체의 범주 (배열)가 많을수록 if 문이 많아지며 이전 필터가없는 접근 방식이 느려집니다.
이 내용이 사실입니까? 더 큰 규모의 프로젝트에서이 기능을 사용하면 큰 성능 차이가있을 것으로 예상합니까?
미리 감사드립니다. Daan
처럼 키가 객체에 불과 있는지 확인하고 카운터의 증가에 대한 키를 취할 수 있을까? * array of keyword * array와 같은 결과 배열입니까? –
단어가 키워드와 일치하는지 확인한 다음 결과 개체가 각 범주의 카운터 모음이 아닙니다. –
당신이하고 싶은 작업의 간단한 예제를 추가 할 수 있습니까? –