2017-09-30 9 views
0

.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

+0

처럼 키가 객체에 불과 있는지 확인하고 카운터의 증가에 대한 키를 취할 수 있을까? * array of keyword * array와 같은 결과 배열입니까? –

+0

단어가 키워드와 일치하는지 확인한 다음 결과 개체가 각 범주의 카운터 모음이 아닙니다. –

+0

당신이하고 싶은 작업의 간단한 예제를 추가 할 수 있습니까? –

답변

0

나는 키 워드와 카운트, 카테고리 및 하위 카테고리를위한 객체를 가진 키워드를 세는 데 하나의 객체를 사용합니다.

{ 
    pizza: { 
     count: 0, 
     category: 'Food', 
     subcategory: 'Italian' 
    }, 
    ramen: { 
     // ... 
    } 
} 

나중에 모든 키워드가 범주 및 하위 범주별로 그룹화 된 개체를 렌더링 할 수 있습니다.

위의 장점, 당신은 어디 단어를 세는

if (property in object) { 
    object.count++; 
}