ecamp / ecamp3

eCamp v3 is a web-based app for camp and course planning. The application is specialized for camps and courses of youth associations and for Y+S offers in the sport of camp sports/trekking.
https://ecamp3.ch
GNU Affero General Public License v3.0
113 stars 50 forks source link

React PDF komplizierte Beispiele ausprobieren #2023

Closed carlobeltrame closed 2 years ago

carlobeltrame commented 3 years ago

Screenshot 2021-10-29 at 18-16-32 eCamp3

carlobeltrame commented 3 years ago

Learnings bisher:

Einige übliche Konsolenfehler während der Entwicklung, und wie man sie lösen kann:

carlobeltrame commented 2 years ago

Ich habe noch Activity Rendering implementiert: react-pdf.pdf

Nochmals zusammenfassend meine Notizen wie sich das Entwickeln angefühlt hat (ich plane, genau dasselbe auch noch mit Nuxt zu machen, um den direkten Vergleich zu haben):

Developer Experience und Debuggability

Wartungsaufwand

Features

carlobeltrame commented 2 years ago

Ich habe hier noch ausprobiert, das PDF beim Download-Button in einem Web Worker (separater Thread) zu generieren, um bei grossen PDFs das UI nicht zu freezen. Nach einigem Gepröbel habe ichs hinbekommen. Caveat: Für Vuex Daten und Übersetzungen können nicht mehr einfach $tc und this.api an React weitergegeben werden, weil der separate Thread nur via Promises mit dem Main Thread kommunizieren kann, aber man in React Komponenten nicht einfach Promises "awaiten" kann: Die Annahme ist, dass die Komponente auch wissen muss, wie "loading" State gerendert werden soll. Beim PDF Rendern wollen wir aber nicht zuerst im "loading" State rendern, sondern nur ein einziges Mal, und allfällige Daten müssen blockierend zusammengesucht werden. Das bedeutet, dass wir vermutlich den Vuex State und die verfügbaren Translations als plain JS-Objekte "serialisiert" an den Worker Thread übertragen müssen, und dort eigene limitierte Instanzen von hal-json-vuex und vue-i18n laufen lassen müssen.

Ausserdem ist das Logging aus dem Worker Thread schlechter, und live reload habe ich noch nicht versucht einzurichten. Das machts also etwas schwieriger zum Probleme debuggen. Wenn wir diesen Weg gehen müssten wir vermutlich einen Kompromiss finden, sodass wir während der Entwicklung das PDF möglichst noch im Main Thread mit live reload etc. arbeiten können, aber später das definitive PDF im Background Thread generieren können.

BacLuc commented 2 years ago

Ich habe noch bisschen gemessen Stand 676a63c (mit mehr daten in der db, ohne web worker) Chromium: 01:17 Minuten für 127 Seiten. e5be6187-87c2-4533-b6d3-06e5b5216172.pdf

00:26 für 25 Seiten e12c3ac9-2e95-49df-a508-fd8c7b3eeb7c.pdf

Firefox: Mit Firefox kommt die preview gar nicht...