ff0c52bb7810328d2329bea7e4c1432ba6652cd7
[kivitendo-erp.git] / doc / html / ch04s02.html
1 <html><head>
2       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3    <title>4.2. Entwicklung unter FastCGI</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.6.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="prev" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="next" href="ch04s03.html" title="4.3. Programmatische API-Aufrufe"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.2. Entwicklung unter FastCGI</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s03.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="4.2. Entwicklung unter FastCGI"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.fcgi"></a>4.2. Entwicklung unter FastCGI</h2></div></div></div><div class="sect2" title="4.2.1. Allgemeines"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.general"></a>4.2.1. Allgemeines</h3></div></div></div><p>Wenn Änderungen in der Konfiguration von kivitendo gemacht
4         werden, muss der Webserver neu gestartet werden.</p><p>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
5         achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
6         müssen folgende Aspekte beachtet werden.</p></div><div class="sect2" title="4.2.2. Programmende und Ausnahmen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.exiting"></a>4.2.2. Programmende und Ausnahmen</h3></div></div></div><p>Betrifft die Funktionen <code class="function">warn</code>,
7         <code class="function">die</code>, <code class="function">exit</code>,
8         <code class="function">carp</code> und <code class="function">confess</code>.</p><p>Fehler, die dass Programm normalerweise sofort beenden (fatale
9         Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
10         am Laufen zu halten. Man kann mit <code class="function">die</code>,
11         <code class="function">confess</code> oder <code class="function">carp</code> Fehler
12         ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
13         eigene <code class="function">$::form-</code>error()&gt; tut im Prinzip das
14         Gleiche, mit ein paar Extraoptionen. <code class="function">warn</code> und
15         <code class="function">exit</code> hingegen werden nicht abgefangen.
16         <code class="function">warn</code> wird direkt nach STDERR, also in Server Log
17         eine Nachricht schreiben (sofern in der Konfiguration nicht die
18         Warnungen in das kivitendo Log umgeleitet wurden), und
19         <code class="function">exit</code> wird die Ausführung beenden.</p><p>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
20         beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
21         Ausnahme sein. Quintessenz: Bitte kein <code class="function">exit</code>
22         benutzen, alle anderen Exceptionmechanismen sind ok.</p></div><div class="sect2" title="4.2.3. Globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.globals"></a>4.2.3. Globale Variablen</h3></div></div></div><p>Um zu vermeiden, dass Informationen von einem Request in einen
23         anderen gelangen, müssen alle globalen Variablen vor einem Request
24         sauber initialisiert werden. Das ist besonders wichtig im
25         <code class="varname">$::cgi</code> und <code class="varname">$::auth</code> Objekt, weil
26         diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
27         werden.</p><p>In <code class="classname">SL::Dispatcher</code> gibt es einen sauber
28         abgetrennten Block, der alle kanonischen globalen Variablen listet und
29         erklärt. Bitte keine anderen einführen ohne das sauber zu
30         dokumentieren.</p><p>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
31         man sicher geht, dass man die richtige erwischt.</p></div><div class="sect2" title="4.2.4. Performance und Statistiken"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.performance"></a>4.2.4. Performance und Statistiken</h3></div></div></div><p>Die kritischen Pfade des Programms sind die Belegmasken, und
32         unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
33         Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
34         4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
35         sind es je nach Menge der definierten Variablen 1-2s. Ab der
36         Moose/Rose::DB Version sind es 5-6s.</p><p>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
37         den kritischen Pfaden, unter 0,15 sonst.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 4. Entwicklerdokumentation&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.3. Programmatische API-Aufrufe</td></tr></table></div></body></html>