Skip to content

Commit 9fc24cd

Browse files
author
Brian Vaughn
committed
Added a short-circuit check to UnorderedSearchIndex for a perf boost
1 parent e2976dc commit 9fc24cd

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

source/SearchIndex/TfIdfSearchIndex.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ export class TfIdfSearchIndex implements ISearchIndex {
7575
var uidToDocumentMap : {[uid : string] : Object} = {};
7676

7777
for (var i = 0, numTokens = tokens.length; i < numTokens; i++) {
78-
var token:string = tokens[i];
79-
var tokenMetadata:ITfIdfTokenMetadata = this._tokenMap[token];
78+
var token = tokens[i];
79+
var tokenMetadata = this._tokenMap[token];
8080

8181
// Short circuit if no matches were found for any given token.
8282
if (!tokenMetadata) {
@@ -102,7 +102,7 @@ export class TfIdfSearchIndex implements ISearchIndex {
102102
}
103103
}
104104

105-
var documents : Array<Object> = [];
105+
var documents = [];
106106

107107
for (var uid in uidToDocumentMap) {
108108
documents.push(uidToDocumentMap[uid]);

source/SearchIndex/UnorderedSearchIndex.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export class UnorderedSearchIndex implements ISearchIndex {
1616
* @inheritDocs
1717
*/
1818
indexDocument(token : string, uid : string, doc : Object) : void {
19-
if (!this._tokenToUidToDocumentMap[token]) {
19+
if (!this._tokenToUidToDocumentMap.hasOwnProperty(token)) {
2020
this._tokenToUidToDocumentMap[token] = {};
2121
}
2222

@@ -29,25 +29,30 @@ export class UnorderedSearchIndex implements ISearchIndex {
2929
search(tokens : Array<string>, corpus : Array<Object>) : Array<Object> {
3030
var intersectingDocumentMap = {};
3131

32+
var tokenToUidToDocumentMap = this._tokenToUidToDocumentMap;
33+
3234
for (var i = 0, numTokens = tokens.length; i < numTokens; i++) {
3335
var token = tokens[i];
34-
var documentMap = this._tokenToUidToDocumentMap[token] || {};
36+
var documentMap = tokenToUidToDocumentMap[token];
37+
38+
// Short circuit if no matches were found for any given token.
39+
if (!documentMap) {
40+
return [];
41+
}
3542

3643
if (i === 0) {
3744
var keys = Object.keys(documentMap);
38-
var numKeys = keys.length;
3945

40-
for (var i = 0; i < numKeys; i++) {
41-
var uid = keys[i];
46+
for (var j = 0, numKeys = keys.length; j < numKeys; j++) {
47+
var uid = keys[j];
4248

4349
intersectingDocumentMap[uid] = documentMap[uid];
4450
}
4551
} else {
4652
var keys = Object.keys(intersectingDocumentMap);
47-
var numKeys = keys.length;
4853

49-
for (var i = 0; i < numKeys; i++) {
50-
var uid = keys[i];
54+
for (var j = 0, numKeys = keys.length; j < numKeys; j++) {
55+
var uid = keys[j];
5156

5257
if (!documentMap.hasOwnProperty(uid)) {
5358
delete intersectingDocumentMap[uid];
@@ -57,10 +62,9 @@ export class UnorderedSearchIndex implements ISearchIndex {
5762
}
5863

5964
var keys = Object.keys(intersectingDocumentMap);
60-
var numKeys = keys.length;
6165
var documents = [];
6266

63-
for (var i = 0; i < numKeys; i++) {
67+
for (var i = 0, numKeys = keys.length; i < numKeys; i++) {
6468
var uid = keys[i];
6569

6670
documents.push(intersectingDocumentMap[uid]);

0 commit comments

Comments
 (0)