Das deutsche Python-Forum

Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Fr Sep 03, 2010 02:05

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 15, 2005 16:48 
User

Registriert: Di Aug 06, 2002 15:36
Beiträge: 256
hi Jens,
als Alternative kann ich noch
http://www.python-forum.de/viewtopic.php?t=2829 empfehlen.

Ein eigenes cache system zu schreiben lohnt sich auf jedenfall wenn eine Seite recht groß ist bzw wenn du viel traffic hast. bei PyLucid würd ich die Seiten schon nach dem erstellen oder editieren im cache ablegen.

ich würde in deinem fall,eine art cache ranking einführen. Also Seiten die nur Text und und keine dynamischen Elemente enthalten und die, wo spezielle Tags vorhanden sind z.B RSS Feed unterscheiden.
Im zweiten Fall würde ich bei jedem Besuch checken ob eine gewisse Zeit vergangen ist.


MfG
Andreas


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 15, 2005 23:45 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Also eigentlich war PyLucid als kleines CMS für eine private Homepage gedacht.
Du bringst mich da aber auch eine Idee... Ich dachte immer nur an ein Caching für die internen Seiten. Nicht aber für die gesammte Seite!

Wobei es natürlich ein erheblicher Mehraufwand ist, der sich erst rechnet, wenn der Server mehr belastet ist...

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 17, 2005 09:30 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Ich liebäugele immer noch mit SpyTee als Templat system, weil es einfach so super klein ist :) Auch wenn simpleTAL einen quasi-Standard (durch Zope) ist.

Dank XT@ngel Idee, könnte ich SpyTee so verwenden, das immer nach dem editieren eines Templates automatisch das compliliert wird und das wird in die DB geschrieben. Ist eigentlich total naheliegend :roll:

Ein Seiten-Cache kann/muss ja auch unabhängig von dem Template caching sein. Somit sind es eigentlich zwei verschiedene Sachen...

Ich werde mal versuchen das Template caching umzusetzten... Mal sehen 8)

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 17, 2005 13:15 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
So, die Grundlagen sind vorhanden... Hab SpyTee verändert, so das man ein String als Template eingeben kann und als Kompilieren ByteCode zurück erhält:

http://www.jensdiemer.de/Programmieren/Python/SpyTee2


EDIT: Wie ich jetzt aber auch gesehen hab, existiert bei simpleTAL auch eine Art Chaching: TemplateCache
Mal sehen ob ich das nicht damit genau so machen kann, wie mit SpyTee2. Dann hätte ich die gesammte Funktionalität die TAL/TALES und Co. bieten...

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 17, 2005 17:26 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Also, ich denke ich werde simpleTAL nehmen. Spytee hab ich zwar nun auch umgebaut um es nutzten zu können, aber ich denke simpleTAL hat einfach ein paar Features mehr, die man evtl. später vermissen könnte.

Außerdem gibt es bei TAL mehr Hilfe/Doku aus der Zope-Ecke, was ja die Therads hier und hier schon bewiesen haben...

Sorry, wenn ich hier ein wenig rum genervt hab, aber so eine Umstellung sollte gut Überlegt sein :lol:

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: So Jan 01, 2006 18:59 
Administrator
Benutzeravatar

Registriert: Do Okt 28, 2004 17:33
Beiträge: 1786
Wohnort: Graz, Steiermark - Österreich
Um das nochmal aufzuleben ^^
Ich hab jetzt das django template für nicht django nochmal umgesetzt, wenn auch mit einigen Verbesserungen und kleinerem Quellcode.

Nennt sich jinja und ist hier im Wiki eingetragen: Template Engines.

Und das ist absichtlich keine XML Template Engine, wird aber bald automatisch XHTML konformen Code erstellen können.

_________________
TUFKAB – the user formerly known as blackbird


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: So Jan 01, 2006 19:08 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Zitat:
Die Template Engine ist mit 36KB eine der Kleinsten, kennt allerdings Schleifen, If Conditions und besitzt ein Template Vererbungssystem mit dem man ein Basistemplate erweitern kann.

Also 36KB sind allerdings nicht wirklich klein... Spytee ist nur 12,8KB, kann aber keine Vererbung. SimpleTAL ist allerdings ca. 96KB groß...

Wo liegen denn genau die Unterschiede zwischen django und jinja???

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: So Jan 01, 2006 19:35 
Administrator
Benutzeravatar

Registriert: Do Okt 28, 2004 17:33
Beiträge: 1786
Wohnort: Graz, Steiermark - Österreich
jens hat geschrieben:
Zitat:
Die Template Engine ist mit 36KB eine der Kleinsten, kennt allerdings Schleifen, If Conditions und besitzt ein Template Vererbungssystem mit dem man ein Basistemplate erweitern kann.

Also 36KB sind allerdings nicht wirklich klein... Spytee ist nur 12,8KB, kann aber keine Vererbung. SimpleTAL ist allerdings ca. 96KB groß...

Wo liegen denn genau die Unterschiede zwischen django und jinja???


Django ist ein ganzes Framework und die Template Engine ist nicht getrennt benuztbar. Jinja ist komplett alleinstehend, kennt Kommentare, Markers und hat eine bessere Filtersyntax. Filter dürfen auf Variablen zugreifen und Jinja kennt zusätzlich noch Integer, Boolen Werte (yes|true) und python None.

_________________
TUFKAB – the user formerly known as blackbird


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: So Jan 01, 2006 19:58 
User

Registriert: Di Jul 26, 2005 19:37
Beiträge: 274
Ich fänds schön, wenn jemand die Zeit hätte, ein paar von den Infos hier (Größe der template-Engine, geschweindigkeit, Stärke der Trennung zwischen Coder und template, vererbungsfähigkeit, etc...) in das Wiki zu übertragen.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: So Jan 01, 2006 20:27 
Administrator
Benutzeravatar

Registriert: Do Okt 28, 2004 17:33
Beiträge: 1786
Wohnort: Graz, Steiermark - Österreich
henning hat geschrieben:
Ich fänds schön, wenn jemand die Zeit hätte, ein paar von den Infos hier (Größe der template-Engine, geschweindigkeit, Stärke der Trennung zwischen Coder und template, vererbungsfähigkeit, etc...) in das Wiki zu übertragen.


Das wäre in der Tat was nettes. Vor allem, da ich atm noch keine Ahnung hab, wie sich Jinja schlägt.

_________________
TUFKAB – the user formerly known as blackbird


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 16, 2006 12:56 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
So, da haben wir doch den Benchmark:
simpleTAL:
Code:
# -*- coding: utf-8 -*-

import sys, time
from SimpleTAL41 import simpleTAL, simpleTALES

t = """<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title tal:content="string:${title} | Testapplication"></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
    <div id="header" tal:content="string:${title} | Testapplication"></div>
    <ul id="nav">
        <li tal:repeat="data navigation">
            <a tal:attributes="href data/href;id string:btn-${'repeat/data/number'}" tal:content="data/caption" href="" id=""></a>
        </li>
    </ul>

    <table>
        <tr tal:repeat="row table" tal:attributes="class string:row${'repeat/row/number'}">
            <td tal:repeat="data row" tal:content="data"></td>
        </tr>
    </table>

</body>
</html>"""


context_dict = {
    'title': 'Some <test>',
    'navigation': [
        {'href': '#', 'caption': '<blub>'},
        {'href': '#', 'caption': 'asfasfasfd'},
        {'href': '#', 'caption': 'asfag asd asdg asdg'}
    ],
    'table': [
        [1,2,3,4,5,6,7,8,9,0],
        [1,2,3,4,5,6,7,8,9,0],
        [1,2,3,4,5,6,7,8,9,0],
        [1,2,3,4,5,6,7,8,9,0],
        [1,2,3,4,5,6,7,8,9,0]
    ]
}


context = simpleTALES.Context()
context.globals.update(context_dict)

template = simpleTAL.compileHTMLTemplate(t)
template.expand(context, sys.stdout)

print
print "-"*80




class dummy:
    def write(self, _):
        pass

dummywriter = dummy()

print "alles zusammen start...",
start_time = time.time()
for i in xrange(200):
    context = simpleTALES.Context()
    context.globals.update(context_dict)

    template = simpleTAL.compileHTMLTemplate(t)
    template.expand(context, dummywriter)
end_time = time.time()

print "dauer: %0.3fsec" % (end_time-start_time)



print "ohne compile - start...",
template = simpleTAL.compileHTMLTemplate(t)
start_time = time.time()
for i in xrange(200):
    context = simpleTALES.Context()
    context.globals.update(context_dict)

    template.expand(context, dummywriter)
end_time = time.time()

print "dauer: %0.3fsec" % (end_time-start_time)



print "render only - start...",
context = simpleTALES.Context()
context.globals.update(context_dict)

template = simpleTAL.compileHTMLTemplate(t)
start_time = time.time()
for i in xrange(200):
    template.expand(context, dummywriter)
end_time = time.time()

print "dauer: %0.3fsec" % (end_time-start_time)


Ergebnis:
Zitat:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Some <test> | Testapplication</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div id="header">Some <test> | Testapplication</div>
<ul id="nav">
<li>
<a href="#" id="btn-1"><blub></a>
</li><li>
<a href="#" id="btn-2">asfasfasfd</a>
</li><li>
<a href="#" id="btn-3">asfag asd asdg asdg</a>
</li>
</ul>

<table>
<tr class="row1">
<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td>
</tr><tr class="row2">
<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td>
</tr><tr class="row3">
<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td>
</tr><tr class="row4">
<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td>
</tr><tr class="row5">
<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td>
</tr>
</table>

</body>
</html>
--------------------------------------------------------------------------------
alles zusammen start... dauer: 1.531sec
ohne compile - start... dauer: 0.860sec
render only - start... dauer: 0.859sec



jinja
Code:
# -*- coding: utf-8 -*-

import time
from jinja import Template, Context, StringLoader

template = """<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{{ title|escapexml }} | Testapplication</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

    <div id="header">{{ title|escapexml }} | Testapplication</div>
    <ul id="nav">
    {% for item in navigation %}
        <li><a href="{{ item.href }}" id="btn-{{ loop.counter }}">{{ item.caption|escapexml }}</a></li>
    {% endfor %}
    </ul>

    <table>
    {% for row in table %}
        <tr class="{% cycle 'row1', 'row2' inline %}">
        {% for col in row %}
            <td>{{ col|escapexml }}</td>
        {% endfor %}
        </tr>
    {% endfor %}
    </table>

</body>
</html>"""


context_dict = ({
    'title': 'Some <test>',
    'navigation': [
        {'href': '#', 'caption': '<blub>'},
        {'href': '#', 'caption': 'asfasfasfd'},
        {'href': '#', 'caption': 'asfag asd asdg asdg'}
    ],
    'table': [
        [1,2,3,4,5,6,7,8,9,0],
        [1,2,3,4,5,6,7,8,9,0],
        [1,2,3,4,5,6,7,8,9,0],
        [1,2,3,4,5,6,7,8,9,0],
        [1,2,3,4,5,6,7,8,9,0]
    ]
})

t = Template(template, StringLoader(), trim=True)
c = Context(context_dict)
print t.render(c)

print "-"*80


print "alles zusammen start...",
start_time = time.time()
for i in xrange(200):
    t = Template(template, StringLoader(), trim=True)
    c = Context(context_dict)
    t.render(c)
end_time = time.time()

print "dauer: %0.3fsec" % (end_time-start_time)



print "ohne compile - start...",
t = Template(template, StringLoader(), trim=True)
start_time = time.time()
for i in xrange(200):
    c = Context(context_dict)
    t.render(c)
end_time = time.time()

print "dauer: %0.3fsec" % (end_time-start_time)



print "render only - start...",
t = Template(template, StringLoader(), trim=True)
c = Context(context_dict)
start_time = time.time()
for i in xrange(200):
    t.render(c)
end_time = time.time()

print "dauer: %0.3fsec" % (end_time-start_time)


Ergebniss:
Zitat:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Some <test> | Testapplication</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

<div id="header">Some <test> | Testapplication</div>
<ul id="nav">
<li><a href="#" id="btn-1"><blub></a></li>
<li><a href="#" id="btn-2">asfasfasfd</a></li>
<li><a href="#" id="btn-3">asfag asd asdg asdg</a></li>
</ul>

<table>
<tr class="row1">
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>0</td>
</tr>
<tr class="row2">
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>0</td>
</tr>
<tr class="row1">
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>0</td>
</tr>
<tr class="row2">
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>0</td>
</tr>
<tr class="row1">
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>0</td>
</tr>
</table>

</body>
</html>

--------------------------------------------------------------------------------
alles zusammen start... dauer: 1.953sec
ohne compile - start... dauer: 0.453sec
render only - start... dauer: 0.454sec


Nochmal die simpleTAL Werte zum besseren vergleich:
Zitat:
alles zusammen start... dauer: 1.531sec
ohne compile - start... dauer: 0.860sec
render only - start... dauer: 0.859sec

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 16, 2006 13:04 
Administrator
Benutzeravatar

Registriert: Do Okt 28, 2004 17:33
Beiträge: 1786
Wohnort: Graz, Steiermark - Österreich
http://wsgiarea.pocoo.org/trac/browser/ ... /tests/cmp

Hier ist ein Vergleichstest von Jinja, Kid, SimpleTAL und Cheetah. Es werden 5000 Renderings mit reimport gemacht, Caching ist überall aktiviert (SimpleTAL nicht, das hat kein Caching)

Durchschnittliche Renderzeit:
Code:
blackbird@volverine:~/Developement/area51/tpltest$ python tpltest.py
Running Test 'jinja'
TIME 0.00307821240425
Running Test 'kid'
TIME 0.00703014059067
Running Test 'simpletal'
TIME 0.0100415547848
Running Test 'cheetah'
TIME 0.00251657156944


Cheetah Template wurde mit cheetah-compile vorkompiliert.

_________________
TUFKAB – the user formerly known as blackbird


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 16, 2006 18:33 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Auch wen jinia etwas langsamer ist... Ich find es irgendwie dennoch nicht schlecht, weil es doch wesendlich einfach zu verstehen ist, als simpleTAL...

Weil simpleTAL doch etwas komplex ist, hab ich in PyLucid auch nur ein Module darin umgesetzt... Ich scheue irgendwie den Aufwand, sich in die Technik von simpleTAL reinzusteigern.
Was ich jetzt noch nicht beurteilen kann, ob simpleTAL oder jinja generell besser sind. Allerdings sind die Filterfunktionen von jinja schon ganz nett, das kann IMHO simpleTAL nicht...

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de