Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Audiobookshelf becomes unusable when adding a lot of books #2323

Closed
lkiesow opened this issue Nov 19, 2023 · 3 comments
Closed

[Bug]: Audiobookshelf becomes unusable when adding a lot of books #2323

lkiesow opened this issue Nov 19, 2023 · 3 comments
Labels
bug Something isn't working

Comments

@lkiesow
Copy link
Contributor

lkiesow commented Nov 19, 2023

Describe the issue

When adding ~1000 books to my > 2.5.0 (d2aea86) development setup, I noticed that Audiobookshelf became basically unusable for a few minutes since the UI would refresh multiple times a second:

audiobookshelf-flickering-ui.mp4

Steps to reproduce the issue

Just generate a lot of new media files in your audiobook folder.
For example with:

❯ mkdir test
❯ ffmpeg -f lavfi -i sine=f=220:b=4 -t 10 -c:a aac -ac 1 -b:a 16k test/test.m4a
❯ for i in {1..1000}; do echo -n "${i}: "; a="$(shuf -n 1 /usr/share/dict/words)"; b="$(shuf -n 1 /usr/share/dict/words)"; mkdir "${a}"; cp -v test/test.m4a "${a}/${b}.m4a"; done

Audiobookshelf version

2.5.0 (d2aea86)

How are you running audiobookshelf?

Built from source

@lkiesow lkiesow added the bug Something isn't working label Nov 19, 2023
@advplyr
Copy link
Owner

advplyr commented Nov 19, 2023

This issue can be resolved in 2 different places in the code.

The cause is that anytime the home page gets a socket event items_added it will make a request to the server to get the home page shelves again if at least one of those items added are in that library.
That happens here:

Solution 1: Instead of fetching new categories again we should just insert the new item in the "Recently Added" shelf. The downside is we won't show potentially new authors or series updates until the page is changed/refreshed.

Solution 2: Instead of emitting the items_added event after every 10 new items scanned in, we only emit that event after X number of seconds have passed since the last event. The socket emit happens in the LibraryScanner here:

SocketAuthority.emitter('items_updated', oldLibraryItemsUpdated.map(li => li.toJSONExpanded()))

Solution 1 is better I think but we could do both since other clients may listen to that event as well.

@lkiesow
Copy link
Contributor Author

lkiesow commented Nov 19, 2023

I think the first solution is good.

advplyr added a commit that referenced this issue Nov 24, 2023
…ems to the recently added shelf instead of refreshing all shelves #2323
@advplyr advplyr added the awaiting release Issue is resolved and will be in the next release label Nov 24, 2023
@advplyr
Copy link
Owner

advplyr commented Dec 2, 2023

Fixed in v2.6.0

@advplyr advplyr closed this as completed Dec 2, 2023
@advplyr advplyr removed the awaiting release Issue is resolved and will be in the next release label Dec 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants