Wir verwenden Apache Velocity für Website-Vorlagen und einige von ihnen werden komplex. Sind bei bestimmten Velocity-Funktionen Leistungsprobleme aufgetreten? Und wie bist du um sie herumgekommen?Apache Velocity Performance-Fallstricke?
Antwort
Das wichtigste Feature, das oft übersehen wird, ist das Ressourcen-Loader-Caching (standardmäßig deaktiviert), das die Leistung erheblich steigert (file.resource.loader.cache
).
#parse
Direktive hat auch spürbare Auswirkungen auf die Leistung, versuchen Sie es nur zu verwenden, um Code-Duplikation zu vermeiden, nicht nur Vorlagen in logische Teile zu teilen.
Wenn Ihre Vorlagen in Bezug auf Logik sehr komplex werden, wäre es vielleicht möglich, diese Logik auf einen Controller zu übertragen und eine Vorlage mit bereit zu stellen, um die Datenstruktur zu rendern.
Ich bemerkte keine Leistungseinbußen von Velocity, als ich Velocity Geschwindigkeit vor dem Wechsel von JSP getestet wurde, waren sie ständig 50% schneller auf jede Vorlage, die ich auf sie warf. Derzeit generieren wir Websites mit Tausenden von Seiten, die aus Velocity-Vorlagen gerendert wurden, und es ist blitzschnell, sehr zufrieden mit der Leistung.
Das Verschieben von Aufrufen in Java-Code, die jeweils außerhalb von Schleifen den gleichen Wert erzeugen, kann ebenfalls die Leistung verbessern. Dies schien mir in meiner Situation zu helfen. Javas Hotspot-Compiler macht das für Java-Code - ich bin nicht sicher, ob diese Funktion in der Velocity-Engine existiert. –
Verwenden Sie zuerst die neueste Velocity-Bibliothek (1.7 oder 1.6.4). Version 1.5 enthält einige schwerwiegende Leistungsprobleme!
Auch hier ist die Liste der Parameter, die Sie auf Produktion Umgebung zwicken müssen:
- velocimacro.library.autoreload - sollte falsch
- file.resource eingestellt werden. loader.cache - sollte auf gesetzt werden wahr
- fi le.resource.loader.modificationCheckInterval - sollte -1
- parser.pool.size eingestellt werden sollte erhöht werden, wenn Standardwert ist nicht groß genug ist (Standardwert ist 20)
Wir Versuchen Sie, den byte[]
im ASTText
Knoten zwischenzuspeichern, um zu vermeiden, den Ausgabentext zu oft zu codieren.
+1 Sind Sie von Taobao.com? –
Können Sie mehr Details erklären, wie Sie es gemacht haben? –
Ich denke, ich habe gewusst, wie du es gemacht hast. Danke ~! Aber warum Sie sagen, wird der Ausgangstext zu oft codiert. Ich verstehe es nicht. –
Wenn Sie Zweifel haben, dann profilieren Sie es. Mit einem Profiler. Keine Notwendigkeit zu erraten. – skaffman