[jsword-devel] Bookset

Chris Burrell chris at burrell.me.uk
Sat Jan 25 14:41:16 MST 2014


Hi

I'm looking to refactor Books.installed().getBook(name) because it takes
too long when you need to look up books multiple times (and don't have an
easy way of caching the JSword lookup). It's particular slow when you have
200+ resources (our server will have). This will also be more prevalent in
Android where method calls are quite expensive.

In STEP we always have the initials of the module (the user selects by
name/initials/STEP name in the browser, where it always gets translated to
initials well before it hits JSword). Do any other frontends use the
getBook(name) by name?

I want to at least provide way of getting the book directly from its
initials. As part of this, we can several things:

In Books:
- refactor the getBook() method to not search first against the name, then
against name insensitive and then against the initials in the BMD, and then
against the initials directly
- If the above is not possible then at least provide a getBookByInitials
(which would just look up the initials against their lower case value.

In BookSet:
- I can't work out why we're sorting the inserts in add(). They cause
unecessary copies of the ArrayList contents in the creation of it.
- I can't work out why it also implements Set. Especially, since contains
would be a good candidate for using


So there are two options really:
- change BookSet to be based on a Map. getBooksByInitials would use the map
directly. getBook would iterate through the contents (or key the contents
in a separate map for faster access)
- Add a map to BookSet to cache the lookups

My preference would be to replace the BookSet implementation altogether.
But the easy option would be to have a Map lookup. Do we use any of the
Set<> methods? Would it make sense to replace BookSet with a LinkedHashMap?


Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.crosswire.org/pipermail/jsword-devel/attachments/20140125/9bc43ef0/attachment.html>


More information about the jsword-devel mailing list