check the words in batches, to avoid blocking the event loop

This commit is contained in:
Brian Gough 2015-03-02 16:58:10 +00:00
parent 86416775fc
commit 876ea130b9

View file

@ -44,9 +44,10 @@ class ASpellRunner
if new Date() - start > ASpell.ASPELL_TIMEOUT
@close(true)
else if i < words.length
word = words[i]
@sendWord(word)
i++
# batch up the words to check for efficiency
batch = words.slice(i, i + ASpell.ASPELL_BATCH_SIZE)
@sendWords(batch)
i += ASpell.ASPELL_BATCH_SIZE
setTimeout tick, 0
else
@close()
@ -80,6 +81,13 @@ class ASpellRunner
sendWord: (word) ->
@sendCommand("^" + word)
sendWords: (words) ->
# Aspell accepts multiple words to check on the same line
# ^word1 word2 word3 ...
# See aspell.info, writing programs to use Aspell Through A Pipe
@sendCommand("^" + words.join(" "))
sendCommand: (command) ->
@aspell.stdin.write(command + "\n")
@ -96,5 +104,4 @@ module.exports = ASpell =
callback("process killed")
setTimeout forceClose, @ASPELL_TIMEOUT
ASPELL_TIMEOUT : 4000
ASPELL_BATCH_SIZE : 100