Project

General

Profile

Feature #5715

Updated by Enis Nuredini over 1 year ago

Das rendern (zusammensetzen aus mehreren Quellen) eines PDF kann lange dauern. Vorschlag fuer ein Caching: 

 * Es gibt ein Cache Verzeichniss, fileadmin/protected/cache. 
 EN: Neuen Ordner bei Neuinstallation von QFQ wie qfqProject erstellen lassen? 

 * Beim zusammenbauen (Parameter in _link) kann neu ein Caching Token mit (0-n) 'tablename/id/column'-Tripples (falls kein 'columnname' angegeben ist, wird 'modified' genommen ) angegeben werden. 
 EN: Beispiel Syntax- 10.sql = SELECT CONCAT("d:MergedPdf|F:",upDiss.pathFileName, "|F:", upPeerReview.pathFileName, "|t:All PDF|cache") AS _link  
 Zusammengesetzten PDF ins cache Ordner ablegen falls noch nicht existent. Von dort wird der Download ausgeführt. Das im Cache abgelegte File wird bei nochmaligem Aufruf mithilfe vom Check des MD5 Hashes überprüft auf veränderten Inhalt, falls ja: Das File im Cache mit dem neu zusammengesetzten PDF ersetzen und Download ausführen.  

 Für die Identifikation des richtigen Files im Cache wird der Filename verwendet ('d:MergedPdf'. Muss in dem Fall angegeben werden, da ansonsten kein Abgleich möglich. Als Default wird immer output.pdf ausgegeben.)  
 Ein Check auf den Erstellungsdatum des Files im Cache wäre überflüssig, da bei Änderungen das File sowieso erneut erzeugt werden muss. 

 Infos: 
 MD5 Hash check for changes: https://www.w3schools.com/php/func_string_md5_file.asp 
 Check auf Erstellungsdatum, stündlich (eigentlich überflüssig): if (time() - filemtime("test.pdf") > 60*60*1){unlink("test.pdf");} 


 * Von allen Source Reference Angaben (filename, url) wird ein MD5 Hash gebaut. In dem Hash ist kein Timestamp enthalten, denn dann wuerde die zuletzt gecachte Datei nicht ueberschrieben werden bei einem Update. 
 EN: Ich konnte nirgends finden dass ein Timestamp im MD5 Hash möglich ist. 

 * Unter dem <cache Verzeichnis>/<MD5> wird die fertig gerenderte Datei gespeichert. 
 EN: Für was steht <MD5>? Das zusammengesetzte PDF File oder nur ein abgelegter Hash? 

 * Von allen Filename wird der 'modified'-Timestamp, und die Timestamps der aufgeloesten 'tablename/id/column'-Tripple, verglichen mit dem modified timestamp der Datei '<cache Verzeichnis>/<MD5>'  
 EN: Nicht mehr benötigt in unserem Fall? Lösung sollte ohne DB Eintrag möglich sein soweit ich das verstanden habe. 

 * Gibt es min. einen Timestamp der neuer ist als der der gerenderten Datei, wird die Datei neu gebaut. 
 EN: Gleiche Aussage wie beim letzten Punkt? Timestamp nicht mehr nötig da kein DB Eintrag. 

 Auf Vorrat produzieren: 
 * Es gibt ein Token im Link, welches beim rendern dazu fuehrt das das PDF auf Vorrat (im Cache Verzeichnis) gebaut wird.  
 * Das Render passiert am besten asynchron, gesteuert ueber rabittmq oder mqtt (#5851) 

 EN: Allgemein zum Cache Feature: Hat nichts direkt mit dem _saveZip zu tun oder? Welches ja angefragt wurde für Medtool. Ein neuer special column name _saveZip könnte eine aneinanderreihung von PDF Files als ein Zip im angegebenen Pfad abspeichern (ähnlich wie _savePdf). Dieser kann dann als Dowload angeboten werden. _saveZip kann dadurch einmal Stündlich mit Autocron ausgeführt werden um den abgelegten Zip File zu refreshen. Der Zusammenhang mit dem Caching scheint mir in dieser Situation nicht ganz klar. Bräuchte ein konkretes Beispiel.

Back