-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Optimization
Adrian Sampson edited this page Apr 7, 2018
·
7 revisions
Add to this page if you write something inefficient (so you don't have to optimize it if it isn't an issue).
- incremental imports: currently, the tags (e.g., ID3 header) of every file
must be read even for albums that won't eventually be imported. This makes
incremental imports way slower than they need to be: a lot of time is
wasted reading the tags to create Items that will immediately be skipped.
Two possible solutions: make
albums_in_dir
create Items lazily (only when a directory is actually tagged are the files read) or give it a parameter consisting of a directory blacklist to skip. - cache library options (so they don't need to be fetched every time we need
the library directory, for instance)
- cache
string.Template(lib.options['path_format'])
so it doesn't need to be recreated every time
- cache
- determine whether the current hack for all-column (or even single-column)
matching is imposingly slow; if so, explore alternatives:
- SQLite's full-text search module
- how do other media managers deal with this?
- Item could keep a MediaFile around rather than creating it for every read() and write()
- C implementation of bipartite matching (?)
- memoization of plurality calculation
- import optimizations:
- check options as they arrive from MusicBrainz; if one is a good match, don't bother loading the rest
- somehow skip the UI pipeline stage for matches that don't need confirmation so they can get directly to the copying/applying phase
- new phase for album art
- avoid getting tracks for albums with track number mismatch