Mittlerweile haben sich auf meiner SD-Karte 1500 MP3-Dateien in 150 Ordnern angesammelt.
Das Laden der Datei-Explorer Ansicht in der Weboberfläche ist durch die vielen Daten jetzt spürbar langsamer geworden > 2 Sekunden.
Es gab ja schon einige Versuche hier etwas zu optimieren wie schlankeres JSON, Übertragung über Websocket usw. Das Problem liegt aber im Dateisystem (FS) selbst. Die Funktion getNextFile()
ist für das Auflisten von Verzeichnissen nicht optimiert. Es wird für jeden Dateinamen ein File-Objekt erzeugt und Dateieigenschaften wie Größe/Datum gelesen. Obwohl wir ja nur einen Dateinamen benötigen.
Auf Basis dieses Feature-Request habe ich das FS miit der Funktion getNextFileName()
erweitert. Die gibt nur Dateinamen zurück ohne jeglichen Overhead. Siehe da, die Auflistung ist spürbar schneller (Faktor 20).
Ladezeit jetzt:
build filelist finished: 2041ms
Mit Patch:
build filelist finished: 98ms
Einen Pull-request dazu plane ich im Momemt nicht wg. laufenden Refaktoring der Weboberfläche durch @sonovice , auch riecht das Ändern des FS ein wenig nach „Hack“. Vielleicht schafft es der Feature-Request ins offizielle Arduino-ES32 Release… Wer es ausprobieren möchte, hier die Anleitung:
In platform.ini das erweiterte FS verknüpfen:
lib_deps =
https://github.com/tueddy/FS.git#1.0.6
;https://github.com/tueddy/FS.git <- Für Arduino 2.0.5
https://github.com/schreibfaul1/ESP32-audioI2S.git
Diese Zeilen in Web.cpp eintragen. Über den Compilerschalter #define FILEEXPLORER_SPEEDUP
kann man dann umschalten.
Happy hacking!