Erweiterung der Gatsby-Ghost React Suchkomponente um einen Webworker zum Laden und Filtern der Datensätze.
Ein Suchvorgang in Javascript kann je nach Datenstamm zu einen blockierenden UI führen. Es gibt mehrere Möglichkeiten das zu verhindern. In diesem Artikel gehe ich auf die Verwendung eines Webworkers zum Laden der Daten und dem Filtern ein.
Zunächst müssen wir das Plugin in gatsby-config.js aktivieren.
Der Webworker
Im Ordner ./src/utils erstellen wir eine JavaScript-Datei mit dem Namen search.worker.js und folgendem Inhalt.
Das Laden der Daten aus der useEffect() Funktion und das Filtern des onChange Events der React Komponente sind hier in einer Funktion zusammengeführt. Die Funktion wird später im Thread des Webworkers ausgeführt.
Anpassen der React Komponente
Das Modul @tryghost/content-api wird hier nicht mehr benötigt und daher enfernen wir den import. Dafür importieren wir das Script für den Webworker. Das Laden der Datensätze entfernen wir komplett.
Initialisieren des Webworker
Mit einer kleinen Funktion initialisieren wir den Webworker, falls das denn nötig ist.
Anpassen des onChange Events
Die change Funktion wird wie folgend abgeändert. So initialisiert sie bei Bedarf den Webworker und führt die search Funktion aus
Die Datensätze mittels Ghost-Content-API zu laden birgt einige Nachteile. Wir benötigen alles im Allem 3 Requests und können beim Request auch nicht anständig die Datensätze filtern. Dadurch entsteht ein ordentlicher Overhead, den wir vermeiden können. Mehr erfahren Sie im Artikel Gatsby-Ghost Suche: Content indizieren.