entwicklung (15)


Mehr Performance – Teil 3

Vielleicht haben es einige meiner Leser gemerkt.
Nach anfänglichen Problemen mit der Zeichenkodierung und der Performance habe mit Hilfe von Manuel eine Möglichkeit gefunden meinen Blog in Sachen Performance ein Stück nach Vorne zu bringen.

Manuel hat ein Skript geschrieben, dass das Caching-Verhalten von S9Y übernimmt und konfigurierbar macht.
Das Skript checkt, ob es die Seite bereits in einem Cache-Ordner gibt.
Wenn ja, dann liefert es eine statische HTML-Seite aus und jagt die Seite nicht mehr durch sämtliche Plugins.
Darüber hinaus ist das Skript in der Lage zu checken, ob es sich um das Backend oder einen Trackback handelt.
Das steigert nach einigen Tests um einiges die Performance.
Gibt es keine Cache-Files, so hat der erste Besucher die „Arschkarte“, da er derjenige ist, der die Cache-Files generiert, danach rennt das Blog allerdings wie Bolle.
Zeiten von unter zwei Sekunden sind mit entsprechend schneller Internet-Verbindung kein Problem mehr.

Vielen Dank an dieser Stelle noch einmal an Manuel, der mir mit seinem Know-How einen großen Dienst erwiesen hat.

Einziges Manko ist, dass man mit diesem Skript nach einem neuen Blog-Eintrag den Cache-Ordner löschen muss.
Finde ich aber nicht so schlimm. Nach einem neuen Eintrag kann ich auch eben den Cache-Ordner löschen…




Mehr Performance – Teil 2 [Update]

Nachdem ich hier bereits über die Performance meines Blogs geschrieben habe, bekam ich diverse Rückmeldungen, die ich allerdings selber fühlen musste 😉
Die angesprochenen 4 Sekunden kamen leider nur im Idealfall vor. Davon hatte ich während des Schreibens ein wenig blenden lassen.

Am Wochenende bin ich erfolgreich vor dem gemeinen Karneval geflohen und habe nochmal an einigen Schrauben gedreht.
Um das Ergebnis bereits vorweg zu nehmen: Mit mäßigem Erfolg.
Der Flaschenhals ist und bleibt mein Hoster. Ich habe hier nur ein etwas besseres Angebot gewählt, was meinen Geldbeutel nicht zu sehr belastet.
Also teile ich mir mit n Kunden ein und dieselbe Hardware.
Hätte ich einen root-Server, dann würde die Sache schon ein wenig anders aussehen.

Naja. Was habe ich getan, um doch noch ein wenig mehr aus dem Server zu kitzeln?




jQuery Tutorial – Teil 1 – Tabelle dynamisch erweitern

Ich bin vor kurzem auf folgendes Problem gestossen:
Es existiert eine ganz normale HTML-Tabelle mit Daten.
Dort soll nun per jQuery das Ergebnis aus einem HTML-Fragment sozusagen injiziert werden.

Wir haben also folgende Beispiel-Tabelle:

<table width="50%" class="jquery_table">
<tr class="expand_region">
<td class="plus_minus">+</td>
<td> 01</td>
        <td> 02</td>
        <td> 03</td>
        <td> 04</td>
        <td> 05</td>                                        
    </tr>
    <tr>
        <td> 10</td>
        <td> 11</td>
        <td> 12</td>
        <td> 13</td>
        <td> 14</td>
        <td> 15</td>                                        
    </tr>    
  </table>  

Um diese mit dem Ergebnis aus dem Fragment zu befüllen (und zwar zwischen den beiden bestehenden TRs) kommt folgender kurzer Code zum Einsatz.
Als erstes das jQuery-Framework einbinden:
[geshi lang=javascript][/geshi]
Hier ist der eigentliche Code:

$(document).ready(function() {
    $(".plus_minus").click(function() {
    if($(".plus_minus").text() == "+"){
        $(".plus_minus").text("-");
        $.get("append.html", "html", function(data){ 
        $(".expand_region").after(data);
        });    
    } else {
        $(".plus_minus").text("+");
        $(".dynamic").remove();
    }
    });
});

Was genau passiert hier?
Zunächst einmal wird gewartet, bis das komplette HTML-Document gerendert wurde.
Anschliessend wird dem Element mit der Klasse „plus_minus“ ein click-Ereignis hinzugefügt.
Wenn der Text dieses Elements „+“ lautet, dann wird der Text zunächst in ein „-“ umgewandelt.
Per GET-Methode wird das HTML aus der Datei „append.html“ geholt und die Callback-Methode mit den Daten aufgerufen.
Dem Element mit der Klasse „expand_region“ (hier die erste TR) wird mit der Methode after() der Inhalt von „append.html“ an die TR angehängt.

Ansonsten, wenn also die Daten bereits anhängen und aus dem „+“ ein „-“ wurde, dann wird das Element mit der Klasse „dynamic“ (hier: die TR, die in append.html steht) mit der Methode remove() entfernt.
Hinweis: Wenn man das mit mehreren Fragmenten implementiert, so würden mit diesem Code alle injizierten Elemente entfernt.

Wenn man also nur ein bestimmtes injiziertes Fragment entfernen möchte, so müsste man auf IDs setzen oder entsprechende Klassen definieren. Je nach Zweck und belieben.

Um noch ein besseres gefühl für das hier beschriebene zu geben, noch 2 Links:
Online Demo
Beispiel im ZIP-Archiv




Cheat Sheets

Meine Latein-Lehrerin hat mal gesagt: „Mann muss gewusst wo, muss man nicht immer haben“.
Damit meinte sie natürlich: „Man muss nicht alles wissen. Man muss nur wissen wo es steht“.

So geht es einem öfter im Leben.
Für mich als Software-Entwickler genauso. Man hat nicht ständig alle Funktionen einer Programmier-Sprache parat.
Dafür gibt es ja schließlich Cheat Sheets.

Cheat Sheets sind kurz gehaltene Funktions-Referenzen, die als Merkblatt fungieren.
Eine Tolle Sammlung an Cheat-Sheets für PHP, MySQL, Regular Expressions, HTML usw. gibt es auf der Seite: Added Bytes.

Ist auf jeden Fall mal einen Blick Wert.




SVN Repositories

Wenn man Software entwickelt, möchte man auch (je mehr Erfahrung man erlangt) das Prinzip der Versionierung nutzen.
Will man sich während der initialen Software-Erstellung ein SVN Repository anlegen und dabei auf die Integration in einen bestehenden Apache-Server verzichten, hat man unter Anderem folgende Möglichkeit:

Die Website XP Development Tools bietet einem 5 kostenfreie Repositories an.
Das ist sicherlich nicht der beste Weg um ein SVN Repository produktiv zu nutzen. Für die initiale Erstellung eines Projektes an mehr als einer Workstation, reicht es jedoch aus.

Für den produktiven Einsatz fehlen beispielsweise grundlegende Features wie z.B. Trunk und Branch…