[Libreoffice] Proofing API Performance

Mathias Bauer Mathias_Bauer at gmx.net
Thu Nov 10 02:19:56 PST 2011


On 09.11.2011 12:05, Tino Didriksen wrote:
> I am making spelling/grammar/hyphenation extensions that query a remote
> service, and have some performance issues that I hope there are existing
> solutions for. In all cases, the extensions must work with "check
> spelling/grammar as you type" enabled.
>
> - How can I limit the request rate or make it smarter?
> Currently, LO seems to call the API for every word (or even letter)
> typed, which is incredibly wasteful as grammar checking only makes sense
> at sentence level. I also don't really want the whole paragraph at each
> call; just the last finished sentence.

As I was involved into the design and implementation of the proof 
reading API deeply, please let me add some hopefully helpful explanations.

You should consider that the proof reading API is a general purpose API 
that must be usable for a wide range of possibly very different checkers 
in arbitrary languages.

It might be that *you* don't want the whole paragraph, but other proof 
readers might want it. There are several possible reasons for that, the 
most simple but important one being that Writer's detection of sentence 
limits might fail sometimes (that's the reason why the proof reading API 
allows the proof reader to overwrite the provided sentence limits and 
return better ones). Besides that, IMHO sometimes even a whole paragraph 
isn't enough (e.g. in case of lists).

I agree that the call frequency might appear too high for grammar 
checkers. But calling the checker only if the current sentence (the 
sentence where the cursor is located) is complete would rise the 
complexity of the code in Writer that interfaces with the proof reader. 
Moreover, some grammar checkers also want to do spell checking (and in 
most cases they do it better than a pure spell checker).

All in all IMHO it seems to be smarter to let the proof reader itself 
decide if a sentence is complete and how it deals with that. The more 
frequent calls don't have a big performance impact because the proof 
reader runs in an own thread, and as long it does not call back into 
Writer (as would be the case if it only checks for sentence 
completeness), the user wouldn't even notice it, especially on machines 
with more than one CPU core where a second CPU usually is not used by 
Writer at all.

> - Why doesn't LO remember the results?
> It draws the squigglies, but it then calls the checker again when
> right-clicking on an error, even if no changes are made in the interim.
> I can cache this in the extension, but it feels like something that
> should be handled in LO itself.

There was a reason for that behavior, but I fail to remember it. I will 
tell you if my memory comes back. :-)

> In general, it feels like "as you type" incurs 50x more calls than
> needed. So if I missed some obvious option toggle or existing solution,
> I'd love to know.

IIRC the call doesn't happen "as you type", but every time a word is 
finished. At least back then it was implemented that way, IIRC.

Regards,
Mathias


More information about the LibreOffice mailing list