Technisches » Historie » Version 1
Jan Büren, 01.06.2022 16:01
1 | 1 | Jan Büren | h1. Technisches |
---|---|---|---|
2 | |||
3 | h2. Frage zu TT: hat das Auswirkungen ob ich in Templates [%- INCLUDE oder [% INCLUDE mache und wenn welche? |
||
4 | |||
5 | nein |
||
6 | das extra minus sagt dem template system, dass das \n davor beim interpolieren gelöscht werden soll |
||
7 | so vermeidest du duzende newlines im generierten html code |
||
8 | funktional ist das identisch |
||
9 | interessantere unterscheidung ist INCLUDE vs PROCESS. die machen auch beide das gleiche, aber INCLUDE macht nen neuen variablen namespace auf, während PROCESS den aktuellen namespace weiterverwendet. das klingt trivial, ist aber ein riesiger performance unterschied, wenn du das in schleifen benutzt |
||
10 | solange dein subtemplate selber keine variablen _setzt_, also SET benutzt, solltest du immer PROCESS nehmen |
||
11 | Jein, Sven. |
||
12 | ok |
||
13 | mosu weiß mehr und erklärt |
||
14 | Weniger offensichtlich aber genau so betroffen: FOREACH |
||
15 | stimmt, implizites set |
||
16 | woernie: Wenn du ein Template mit INCLUDE inbindest, dann wirken sich sämtliche Änderungen an Variablen innerhalb des Sub-Templates auch auf das Haupttemplate auf. |
||
17 | Wenn du also z.B. im Haupttemplate so etwas machst: [% FOREACH row = SELF.items %] [% INCLUDE '_row.html' %] [% END %]… |
||
18 | …und im Sub-Template irgendwo [% FOREACH row = some_array %]… |
||
19 | …so geht das garantiert in die Hose. |
||
20 | äh |
||
21 | Quark |
||
22 | Ich meinte PROCESS in meinem Beispiel. |
||
23 | Also genau andersrum, als gorash sagt? |
||
24 | INCLUDE = alle Variablen werden kopiert, langsam, aber Änderungen im Sub-Template haben keine Auswirkungen. |
||
25 | PROCESS tut das halt nicht |
||
26 | PROCESS = schnell aber gefährlich, weil Änderungen im Sub-Template sich auf alles andere auswirken |
||
27 | Das gleiche gilt nicht nur für Sub-Templates (also Dateien), sondern auch für Blöcke, die mit [% BLOCK name %] … [% END %] deklariert und danach mit INCLUDE/PROCESS benutzt werden. |
||
28 | Meine persönliche Faustregel ist, dass alles, was in einer Schleife eingebunden wird, eher PROCESS sein sollte, alleiun aufgrund der Geschwindigkeit. Und darauf müssen die Sub-Templates dann halt designet sein. |
||
29 | Wenn man aber bei einer kompletten Seite ein gewisses Sub-Template nur ein einziges Mal einbindet, dann ist der Performanceunterschied halt nicht wirklich entscheidend (es sei denn, man hat wiederum sehr viele von solchen Sub-Templates). |
||
30 | der performance hit ist leider wirklich nicht trivial. ich hab das das erste mal bei cvar templates pro position gemerkt, und ich glaube da war der overhead im bereich 200ms für 10 positionen |
||
31 | subtemplate als block schreiben und einmal einbinden hilft tatsächlich |