Compare commits
2 Commits
enable-dis
...
open308sea
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
369b991991 | ||
|
|
63430b7f51 |
@@ -66,7 +66,8 @@
|
|||||||
"workers": [
|
"workers": [
|
||||||
{
|
{
|
||||||
"key": "genericSearchWorker",
|
"key": "genericSearchWorker",
|
||||||
"scriptUrl": "services/GenericSearchWorker.js"
|
"scriptUrl": "services/GenericSearchWorker.js",
|
||||||
|
"shared": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,11 +59,9 @@ define([
|
|||||||
this.worker = this.startWorker(workerService);
|
this.worker = this.startWorker(workerService);
|
||||||
this.indexOnMutation(topic);
|
this.indexOnMutation(topic);
|
||||||
|
|
||||||
ROOTS.forEach(function indexRoot(rootId) {
|
this.rootsToIndex = ROOTS;
|
||||||
provider.scheduleForIndexing(rootId);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
this.worker.port.postMessage({ request: 'status' });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -102,7 +100,8 @@ define([
|
|||||||
var worker = workerService.run('genericSearchWorker'),
|
var worker = workerService.run('genericSearchWorker'),
|
||||||
provider = this;
|
provider = this;
|
||||||
|
|
||||||
worker.addEventListener('message', function (messageEvent) {
|
worker.port.start();
|
||||||
|
worker.port.addEventListener('message', function (messageEvent) {
|
||||||
provider.onWorkerMessage(messageEvent);
|
provider.onWorkerMessage(messageEvent);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -150,9 +149,12 @@ define([
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
GenericSearchProvider.prototype.keepIndexing = function () {
|
GenericSearchProvider.prototype.keepIndexing = function () {
|
||||||
|
if (this.pendingRequests === 0 && this.idsToIndex.length === 0) {
|
||||||
|
this.worker.port.postMessage({ request: 'finish' });
|
||||||
|
}
|
||||||
|
|
||||||
while (this.pendingRequests < this.MAX_CONCURRENT_REQUESTS &&
|
while (this.pendingRequests < this.MAX_CONCURRENT_REQUESTS &&
|
||||||
this.idsToIndex.length
|
this.idsToIndex.length) {
|
||||||
) {
|
|
||||||
this.beginIndexRequest();
|
this.beginIndexRequest();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -168,7 +170,7 @@ define([
|
|||||||
GenericSearchProvider.prototype.index = function (id, model) {
|
GenericSearchProvider.prototype.index = function (id, model) {
|
||||||
var provider = this;
|
var provider = this;
|
||||||
|
|
||||||
this.worker.postMessage({
|
this.worker.port.postMessage({
|
||||||
request: 'index',
|
request: 'index',
|
||||||
model: model,
|
model: model,
|
||||||
id: id
|
id: id
|
||||||
@@ -220,14 +222,25 @@ define([
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
GenericSearchProvider.prototype.onWorkerMessage = function (event) {
|
GenericSearchProvider.prototype.onWorkerMessage = function (event) {
|
||||||
|
var provider = this,
|
||||||
|
pendingQuery,
|
||||||
|
modelResults;
|
||||||
|
|
||||||
|
if (event.data.request === 'status' && !event.data.finished) {
|
||||||
|
this.rootsToIndex.forEach(function indexRoot(rootId) {
|
||||||
|
provider.scheduleForIndexing(rootId);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (event.data.request !== 'search') {
|
if (event.data.request !== 'search') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var pendingQuery = this.pendingQueries[event.data.queryId],
|
pendingQuery = this.pendingQueries[event.data.queryId];
|
||||||
modelResults = {
|
modelResults = {
|
||||||
total: event.data.total
|
total: event.data.total
|
||||||
};
|
};
|
||||||
|
|
||||||
modelResults.hits = event.data.results.map(function (hit) {
|
modelResults.hits = event.data.results.map(function (hit) {
|
||||||
return {
|
return {
|
||||||
@@ -265,7 +278,7 @@ define([
|
|||||||
) {
|
) {
|
||||||
var queryId = this.makeQueryId();
|
var queryId = this.makeQueryId();
|
||||||
|
|
||||||
this.worker.postMessage({
|
this.worker.port.postMessage({
|
||||||
request: 'search',
|
request: 'search',
|
||||||
input: searchInput,
|
input: searchInput,
|
||||||
maxResults: maxResults,
|
maxResults: maxResults,
|
||||||
|
|||||||
@@ -30,7 +30,8 @@
|
|||||||
// An array of objects composed of domain object IDs and models
|
// An array of objects composed of domain object IDs and models
|
||||||
// {id: domainObject's ID, model: domainObject's model}
|
// {id: domainObject's ID, model: domainObject's model}
|
||||||
var indexedItems = [],
|
var indexedItems = [],
|
||||||
TERM_SPLITTER = /[ _\*]/;
|
TERM_SPLITTER = /[ _\*]/,
|
||||||
|
status = { request: 'status', finished: false };
|
||||||
|
|
||||||
function indexItem(id, model) {
|
function indexItem(id, model) {
|
||||||
var vector = {
|
var vector = {
|
||||||
@@ -118,7 +119,7 @@
|
|||||||
match.matchCount += 100;
|
match.matchCount += 100;
|
||||||
} else if (match.item.vector.lowerCaseName ===
|
} else if (match.item.vector.lowerCaseName ===
|
||||||
query.inputLowerCase) {
|
query.inputLowerCase) {
|
||||||
match.matchCount += 50;
|
match.matchCount += 50;
|
||||||
}
|
}
|
||||||
return match;
|
return match;
|
||||||
})
|
})
|
||||||
@@ -147,11 +148,19 @@
|
|||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.onmessage = function (event) {
|
self.onconnect = function (connectEvent) {
|
||||||
if (event.data.request === 'index') {
|
var port = connectEvent.ports[0];
|
||||||
indexItem(event.data.id, event.data.model);
|
|
||||||
} else if (event.data.request === 'search') {
|
port.onmessage = function (event) {
|
||||||
self.postMessage(search(event.data));
|
if (event.data.request === 'index') {
|
||||||
}
|
indexItem(event.data.id, event.data.model);
|
||||||
|
} else if (event.data.request === 'search') {
|
||||||
|
port.postMessage(search(event.data));
|
||||||
|
} else if (event.data.request === 'status') {
|
||||||
|
port.postMessage(status);
|
||||||
|
} else if (event.data.request === 'finish') {
|
||||||
|
status.finished = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}());
|
}());
|
||||||
|
|||||||
Reference in New Issue
Block a user