From b35d0b3f6a13071950763b33b8e76a0989096485 Mon Sep 17 00:00:00 2001 From: Leonardo Galli Date: Mon, 24 Dec 2018 14:30:37 +0100 Subject: [PATCH] Added: Development Description. --- DEVELOPMENT.md | 30 ++++++++++++++++++++++++++++++ README.md | 2 ++ src/NzbDrone.sln | 18 ++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 DEVELOPMENT.md diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 000000000..088dec370 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,30 @@ +# New UI Development + +This document should provide an overview of current UI development, progress and blockers. + +## Current Focus + +Our current focus is creating a foundation for the UI, so that everything can be built upon it. + +We are trialing the Sonarr V3 UI as our foundation. So far it has been working great and we already have a somewhat working build running. +However, the Sonarr V3 UI is still very slow, especially with 40k movies. Which is why, our current focus is to find out why the UI is slow and fix that. + +## Performance Issues + +You can download a database with 40k movies here: https://radarr.video/dev/radarr.db (Version where the next refresh movie scan is in a year. The refresh movie scan will lag the UI and other stuff. https://radarr.video/dev/radarr_no_scan.db). Just place it in your AppData Directory while Radarr is not running and make sure it's named radarr.db (https://github.com/Radarr/Radarr/wiki/AppData-Directory). +You will have to message me (@galli-leo) via Discord or Reddit for the username and password (just as a precaution). + +Warning: The loading of the page may take long, ideally you do not want Radarr to run in debug mode and use a localhost client. + +I have already tried my hand at finding some bottlenecks and have seen the following problems: + +1. It seems like sorting is done for all movies on every change to the movies. In other words, even if nothing changes for a movie, we still sort all movies again. This creates slowdowns, mostly when updating the info for all movies or adding a lot of new ones. +2. For most views, we check whether the movies have changed, when we receive and update movie event in order to determine if we should e.g. add more letters to the sidebar. This also creates slowdowns, mostly when updating the info for all movies. +3. The searchbar is also pretty slow, probably because we do not filter it in anyway and do not have a limitation of the amount of rows we render. In other words, if you type "a", all movies with an "a" in the title will have a row rendered. Ideally we would virtualize this, but we could also do maybe some other optimizations. +4. The virtualization for the movie index page is not fast enough. It seems, that if you scroll up, the renderer cannot keep up and takes ~200-500ms to render the table. This is not the most pressing issue, but should still be fixed. +5. There seems to be a few javascript "spots" that cause slowdowns, but I have far too little experience to really find out what's going on there. + + +## Tasks + +The actual tasks that are not related to the foundation of the new UI are all listed here https://github.com/Radarr/Radarr/projects/4. They are sorted according to different priorities. Some issues are also issues that shouldn't need anything extra, just a correct implementation in the new UI. \ No newline at end of file diff --git a/README.md b/README.md index 185654a0b..31fcebb37 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Radarr

+**New UI Development:** For an overview of the new UI development see https://github.com/Radarr/Radarr/blob/aphrodite/DEVELOPMENT.md. + Radarr is an __independent__ fork of [Sonarr](https://github.com/Sonarr/Sonarr) reworked for automatically downloading movies via Usenet and BitTorrent. The project was inspired by other Usenet/BitTorrent movie downloaders such as CouchPotato. diff --git a/src/NzbDrone.sln b/src/NzbDrone.sln index 0b2d9f423..d35d3a6a4 100644 --- a/src/NzbDrone.sln +++ b/src/NzbDrone.sln @@ -87,6 +87,9 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CurlSharp", "ExternalModules\CurlSharp\CurlSharp\CurlSharp.csproj", "{74420A79-CC16-442C-8B1E-7C1B913844F0}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParsingLibrary", "ParsingLibrary\ParsingLibrary.csproj", "{BAC762EF-4627-49C8-BC99-EB9D20682FA4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Api.V2", "Radarr.Api.V2\Radarr.Api.V2.csproj", "{38497DC6-E488-4B9E-A973-A1A7961B33C4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Http", "Radarr.Http\Radarr.Http.csproj", "{C5953DAB-89DB-46D9-A401-D620F54B776E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -262,9 +265,24 @@ Global {74420A79-CC16-442C-8B1E-7C1B913844F0}.Mono|x86.Build.0 = Release|Any CPU {74420A79-CC16-442C-8B1E-7C1B913844F0}.Release|x86.ActiveCfg = Release|Any CPU {74420A79-CC16-442C-8B1E-7C1B913844F0}.Release|x86.Build.0 = Release|Any CPU +<<<<<<< HEAD {BAC762EF-4627-49C8-BC99-EB9D20682FA4}.Debug|x86.ActiveCfg = Debug|Any CPU {BAC762EF-4627-49C8-BC99-EB9D20682FA4}.Mono|x86.ActiveCfg = Debug|Any CPU {BAC762EF-4627-49C8-BC99-EB9D20682FA4}.Release|x86.ActiveCfg = Release|Any CPU +======= + {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Debug|x86.ActiveCfg = Debug|x86 + {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Debug|x86.Build.0 = Debug|x86 + {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Mono|x86.ActiveCfg = Debug|x86 + {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Mono|x86.Build.0 = Debug|x86 + {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Release|x86.ActiveCfg = Release|x86 + {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Release|x86.Build.0 = Release|x86 + {C5953DAB-89DB-46D9-A401-D620F54B776E}.Debug|x86.ActiveCfg = Debug|x86 + {C5953DAB-89DB-46D9-A401-D620F54B776E}.Debug|x86.Build.0 = Debug|x86 + {C5953DAB-89DB-46D9-A401-D620F54B776E}.Mono|x86.ActiveCfg = Debug|x86 + {C5953DAB-89DB-46D9-A401-D620F54B776E}.Mono|x86.Build.0 = Debug|x86 + {C5953DAB-89DB-46D9-A401-D620F54B776E}.Release|x86.ActiveCfg = Release|x86 + {C5953DAB-89DB-46D9-A401-D620F54B776E}.Release|x86.Build.0 = Release|x86 +>>>>>>> 28648ed18... Added: Development Description. EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE