Multitouch – Samsung GALAXY SPICA I5700

Seit heute unterstützt das “Samsung Galaxy Spica” Multitouch-Funktionen. Habe dies bereits getestet. Zoll mit zwei Fingern per “Galerie”-App und per “GoogleMap”, “Mutitouch Vis Test” oder z.B. “Pong Multi Touch”-Game, alles ohne Probleme. :-)

Forum-Link


1.) SamdroidMod installieren

Link

Wenn du nicht bereits SamdroidMod installiert hast, kannst du unter dem zuvor erwähnten Link (HowTo) lesen, wie du dies bewerkstelligen kannst, ansonsten musst du nur den nächsten Schritt durchführen.


2.) Turbo Kernel + Multi Touch

Die folgende Datei herunterladen Samdroid Turbo Kernel (V9) und mit Odin “SamTurbo_V9_PDA.tar” -> “PDA” auswählen. Die entsprechende Update-Software kannst du hier herunterladen…

– Odin Multi Downloader v4.16

spica_jc3.ops


odin_test3

[stextbox id=”info” caption=”Info”]Update: Mittlerweile ist die MultiTouch-Funktion bereits im SamdroidMod (Kernel – LK2.09.1) integriert, so dass du nur noch das am Anfang erwähnte How-To durchführen musst.[/stextbox]


Hier noch ein paar Screen-Shots, als ansporn das Update durchzuführen! :-)


MultiTouch-Test
MultiTouch-Test



MultiTouch-Game
MultiTouch-Game
















PS: Euer Dank (ggf. Spende) für den MultiTouch-Treiber geht an: Gabriel-LG

Android 2.2 Froyo (CyanogenMod) – Samsung GALAXY SPICA I5700

In meinem letzem HowTo zum Thema Spica habe ich bereits beschrieben wie du “Android 2.1” installierst -> speedup-samsung-galaxy-spica-i5700. Dieses HowTo ist anfangs sehr ähnlich, da wir im ersten Schritt erst-einmal root-Rechte benötigen.


[stextbox id=”warning”]Warnung: Indem du diese Updates einspielst, gehen die Einstellungen/Apps auf dem Handy verloren und du musst deine Einstellungen wieder neu vornehmen z.B. APN (BASE = E-Plus) und die Apps wieder neu installieren. Die Kontakte bleiben jedoch erhalten, wenn du diese mit deinem Google-Account synchronisiert hast.[/stextbox]


[stextbox id=”alert” caption=”Achtung”]Achtung: Auch wenn dieses HowTo bei mir ohne Probleme funktioniert hat, garantiere ich nicht, dass dies auch bei dir funktioniert.[/stextbox]


Funktioniert:

  • Touch/Multitouch
  • Tasten
  • Audio
  • GSM/GPRS/EDGE/3G
  • GPS
  • Vibration
  • SD-Karte / USB-Massen-Speicher
  • Wifi (W-Lan) (+Wifi-Tethering)
  • Bluetooth
  • Google Services (20101020) (GMail, Market, Contacts, Calendar)
  • Kamera
  • Sensoren
  • VoiceRecording
  • Hardware accelerated movie playing/recording (mp4/h264)

Funktioniert (noch) nicht:

  • Hardware accelerated movie playing/recording (DivX)

(27.12.10)


“Quadrant”-Benchmark: ~ 620

Spica-Test
Spica-Test


1.) Treiber herunterladen/installieren

Windows XP” -> “SAMSUNG New PC Studio” -> Download-Link

Windows 7” -> “SAMSUNG Kies” -> Download-Link

Als erstes benötigen wir unter Windows folgendes Programm “SAMSUNG New PC Studio” bzw. “SAMSUNG Kies”, eigentlich benötigen wir nur die Treiber, diese sind jedoch mit in der Software integriert, daher einfach installieren und nach der Installation das Programm wieder schließen und nicht mehr beachten… ;-)


2.) Odin Multi Downloader herunterladen

Download-Link


3.) neue Firmware herunterladen

Download-Link

Zusätzlich benötigen wir noch folge kleine Datei:

Download-Link


Die neusten Firmwares für Samsung I5700 Spica findest du unter folgendem Link, die zuvor erwähnten Firmware war ist bisher (01.10.2010) die aktuellste Version und ich hatte mit dieser keinerlei Probleme.:

Samsung-Firmware


4.) Aktiviere “USB debugging”

Um “USB debugging” auf deinem Handy zu aktivieren, gehst du wie folgt vor |

Settings->Applications->Development->Enable USB debugging


5.) Software starten

Bevor wir unser Handy am PC anschließen, staten wir die Odin-Software und geben den Pfad zu den zuvor heruntergeladenen Dateien an.


[stextbox id=”warning”]Wichtig ist “One Package” auszuwählen und die Datei dann auch unter “One Package” anzugeben![/stextbox]

Odin_1

6.) Handy vorbereiten & Firmware installieren

Du musst dein Handy nun ausschalten und es darf nicht per USB am PC angeschlossen sein, ansonsten kann es nicht im neuen Modus hochfahren, dies geschieht, indem wie im folgendem Bild beschrieben die leiser-, Kamera- und die ein/aus-Taste gedrückt hältst…

firmware_hochladen
leiser + Kamera + aus/ein

…nun sollte folgender Bildschirm erscheinen, …

spica_download_mode
Download-Modus

…wenn dies geschehen ist, kannst du dein Handy mit dem USB-Kabel am PC anschließen. Du wirst sehen, dass die Odin-Software feststellt, dass du dein Handy angeschlossen hast, nun kannst du in der Software auf “Start” klicken und abwarten, falls dein Handy nicht nach dem automatischen Reboot nicht mehr hochfahren sollte, keine Panik.

Sobald du einige Minuten abgewartet hast und die Odin-Software anzeigt, dass alles abgeschlossen ist, dein Handy jedoch nicht mehr hochfährt, nimm einmal den Akku heraus und setzte ihn wieder ein, dann starte dein Handy erneut.


7.) Install Spica v.LK2.08

Forum-Link

Um die am Anfang genannten Funktionen nutzen zu können brauchen wir noch weiter Updates. Als erstes benötigen wir den “Recovery-Modus”, diesen rüsten wir wie folgt nach.

7.1.) Download Kernel: i5700_LK2-08_PDA.7z und entpacken

7.2.) nun musst du dein Handy wieder ausschalten und vom PC entfernen

7.3.) dann wieder die Odin-Software starten und dieses man nur die PDA-Datei auswählen


[stextbox id=”info”]Um diese Datei “i5700_LK2-08_PDA.7z” jedoch zu öffnen benötigst du z.B. 7-Zip. (hat bei mir schon lange WinZip… WinRAR und so weiter verdrängt ^^[/stextbox]


[stextbox id=”warning”]Nicht “One Package” auszuwählen![/stextbox]


odin_test2


7.4.) nun musst du dein Handy wieder im Download-Modus starten (leiser+Kamera+an/aus) und danach am PC anschließen und sobald die Software dies mitbekommen hat, kannst du wieder auf “Start” klicken. Danach sollte dein Handy direkt im Recovery-Menü landen (beim ersten Reboot). Um später noch einmal zu diesem Menü zu gelangen, musst du folgende Tasten drücken -> (leiser+anrufen+auflegen)

firmware_hochladen2
(leiser+anrufen+auflegen)


8.) CyanogenMod installieren

Forum-Link

Die folgende Datei ist die Version “Alpha8.3” (17.01.11) da daran jedoch noch gearbeitet wird, sollte man im Form nach einer neuern Version schauen und beachten, dass wenn man bereits ein vorherige Version von dem CyanogenMod installiert hat das Update installieren sollte! (siehe Forum-Link)

Download-Link (~ 70 MB)

… anschließend muss diese Datei im oberen Verzeichnis deiner SD-Karte speichern. Wer bereits eine frühere Versin von CM für Spica installiert hat, kann im Forum(-Link) ein Update finden.


Kitchen: Auf der folgenden Webseite -> Froyo Kitchen <- kann man sich sein individuelles System zusammenstellen und dann wie bereits für den CyanogenMod beschrieben, per “Recovery-Modus” installieren! Falls man damit jedoch Probleme hat, kann man ohne weiteres die zuvor erwähnte fertige Version nutzen.

Update: (25.02.2011): Es gibt mittlerweile auch auf forum.samdroid.net eine eigene Kitchen für Froyo 2.2 -> Froyo Kitchen-v.2 <-

 

8.1.) Nun müssen wir in den zuvor erklärtem Recovery-Modus starten (leiser+anrufen+auflegen) und im Recovery-Modus (“Apply any zip”) auswählen, und die Datei welche wir gerade auf die SD-Karte gespeichert haben auswählen. Sobald dies funktioniert hat, müssen wir im Menüpunkt “Wipe” noch “Wipe data/cache” auswählen.


[stextbox id=”info”]Während des ersten Boot-Vorgangs kann es passieren das 2- bis 5-mal automatisch ein Reboot durchgeführt wird, daher kann dieser Bootvorgang länger dauern. Wenn jedoch zirka 5 Minuten nichts passiert, dann noch einmal den Recovery-Modus staten und im Menüpunkt ”Wipe” -> ”Wipe data/cache” auswählen und noch einmal neu-starten.[/stextbox]


9.) Kernel + Tweak für CM

Forum-Link

Ich habe mich hier für den Kernel mit “CFS cpu scheduler” und nicht BFS cpu scheduler” entschieden, da bei BFS eine Warnung vor Daten Beschädigung im Forum zu lesen ist. Hinzu kommt noch “SSSwitch (Screen State Switch)”, ein kleines Skript, welches noch einige Einstellungen am Kernel vornimmt. (nicht SetCPU und SSSwich gleichzeitig verwenden!!!)


9.1.) Download der Daten und ggf. im Forum nach einer neuen Version schauen.

Download-Link (krnl-ckMod.cfs.011.zip)

Download-Link (ckMod.SSSwitch.v06C.zip)


… anschließend musst du diese Dateien im oberen Verzeichnis deiner SD-Karte speichern.


9.2.) Nun müssen wir in den zuvor erklärtem Recovery-Modus starten (leiser+anrufen+auflegen) und im Recovery-Modus (“Apply any zip”) auswählen, und die Datei welche wir gerade auf die SD-Karte gespeichert haben auswählen.


10.) CyanogenMod – Update

Download-Link (Intercept3D.zip)


10.1.) Download der vorherigen verlinkten Dateien im Forum und anschließend muss diese im oberen Verzeichnis deiner SD-Karte gespeichert werden.


10.2.) Nun müssen wir in den zuvor erklärtem Recovery-Modus starten (leiser+anrufen+auflegen) und im Recovery-Modus (“Apply any zip”) auswählen, und die Datei welche wir gerade auf die SD-Karte gespeichert haben auswählen.


ggf. kann man auch den neuen Kernel + Updates mithilfe einer Datei installieren… z.B.:

Forum-Link


11.) I/O Speed Up (convert all to EXT2)

Forum-Link

Zum Schluss habe ich noch I/O Performance verbessert, in dem die Partitionen umformatiert wurden.


11.1.) Download (all_to_ext2_luismaf_update_v8.zip) aus dem angegeben Forum und speichere diesen im oberen Verzeichnis deiner SD-Karte.


11.2) Genau wie zuvor benutzt du nun den Recovery-Modus ( -> “Apply any zip”), um dies anzuwenden. Es kann im Gegensatz zu den Vorherigen Updates etwas länger dauern, also keine Panik. Ich habe die Schritte hier einzeln aufgeführt, so dass es verständlicher ist, in der Praxis habe ich “Kernel” (Tweak) + “Updates” + “I/O SpeedUp” in einem Rutsch per Recovery installiert und fertig.


11.3) Wenn du das neue Dateisystem noch schneller machen willst, kannst du auch noch “tweaks_fe_ext_v2.1.zip” auf dem gleichem Weg installieren. :-)


12.) Tuning-Apps nachinstallieren

Es gibt einige Apps welche dein Android-Handy verbessern können, ich zeige hier kurz welche ich momentan verwende.


12.1.) Advanced Task Killer (Free)

Lässt sich direkt über den “Market” installieren. Nachdem du es installiert und zum ersten mal gestartet hast, musst du eine Ausnahmeliste erstellen, indem du die ein App im “Advanced Task Killer” länge gedrückt hältst und dann auf “Ignore” tippst. Fertig.


12.2.) Autorun Killer

Lässt sich ebenfalls direkt über den “Market” installieren. Indem du ein App länger gedrückt hältst, kannst du auf “Enable/Disable” tippen, so dass dieses nicht mehr am Anfang gestartet wird und somit keine Ressourcen mehr verbraucht.


12.3.) AddFree

Lässt sich ebenfalls direkt über den “Market” installieren. “Adblocker” mittels Modifizierung der hosts-Datei, somit wird die Werbung erst gar nicht heruntergeladen und funktioniert in anderen Apps, Browser u.s.w.!

 

 

PS: Wer die einzelnen Updates in einem Update-Paket installieren möchte, sollte sich folgenden Beitrag anschauen -> Update-Paket für CyanogenMod <-

Debian/Ubuntu Paket selber bauen (Nginx)

Heute zeige ich, wie du dir deinen eigenen Webserver (Nginx) als .deb-Paket bauen und installieren kannst… :-) In einem vorherigen Beitrag hatte ich bereits beschrieben, wie du PHP5-fpm mit Nginx installieren kannst. Da ich folgenden Fehler bei dem Update auf Version 0.9.1 bekommen habe ->


Can't locate nginx.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .).
BEGIN failed--compilation aborted. 


<- wurde das deb-Paket kurzerhand neu-gebaut und zwar ohne Perl-Unterstützung. :-)


1.) Root werden und einiges ggf. nachinstallieren + die Quellen (deb-src) herunterladen

sudo bash
aptitude install build-essential devscripts fakeroot debhelper autotools-dev libpcre3-dev zlib1g-dev libssl-dev
mkdir /usr/src/nginx ; cd !$
apt-get source nginx
cd $(ls -d nginx*/)

2.) Ggf. schauen, ob es bereits eine neue Version gibt und diese herunterladen und abgleichen

wget http://sysoev.ru/nginx/nginx-0.9.1.tar.gz
export DEBFULLNAME='nginx';export DEBEMAIL='deine@email-adresse.de'; uupdate --upstream-version 0.9.1 ../nginx-0.9.1.tar.gz
cd ../$(dpkg-parsechangelog | sed -n 's/^Source: //p')-0.9.1
sed -i '/^Maintainer/s/: .*/: dein_name /;/^Uploaders/s/: .*/: dein_name /;/XSBC-Original-Maintainer/d' debian/control;

3.) die ./configure Variablen ggf. an deine Bedürfnisse anpassen (debian/rules)

vim debian/rules
config.status: config.sub config.guess
        ./configure \
            --conf-path=/etc/nginx/nginx.conf \
            --user=wwddw-data \
            --group=www-data \
            --sbin-path=/usr/sbin/nginx \
            --pid-path=/var/run/nginx.pid \
            --with-sha1-asm \
            --with-zlib-asm=pentiumpro \
            --with-md5-asm \
            --with-ld-opt="-L /usr/lib" \
            --with-cc-opt="-D FD_SETSIZE=2048" \
            --with-cc-opt="-I /usr/include" \
            --with-cpu-opt="opteron" \
            --error-log-path=/var/log/nginx/error.log \
            --http-client-body-temp-path=/var/lib/nginx/body \
            --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
            --http-log-path=/var/log/nginx/access.log \
            --http-proxy-temp-path=/var/lib/nginx/proxy \
            --http-scgi-temp-path=/var/lib/nginx/scgi \
            --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
            --lock-path=/var/lock/nginx.lock \
            --pid-path=/var/run/nginx.pid \
            --with-debug \
            --with-http_dav_module \
            --with-http_flv_module \
            --with-http_geoip_module \
            --with-http_gzip_static_module \
            --with-http_image_filter_module \
            --with-http_realip_module \
            --with-http_stub_status_module \
            --with-http_ssl_module \
            --with-http_sub_module \
            --with-http_xslt_module \
            --with-ipv6 \
            --with-sha1=/usr/include/openssl \
            --with-md5=/usr/include/openssl \
            --with-mail \
            --with-mail_ssl_module \
            --add-module=$(CURDIR)/modules/nginx-upstream-fair \
            --add-module=$(CURDIR)/modules/nginx-echo \
            $(CONFIGURE_OPTS) >$@
        touch $@
Ich habe einige Module deaktiviert welche ich nicht benötige, SSL-Verschlüsselung + IPv6 + … aktiviert und unter anderem Optimierungen für meine CPU aktiviert. Unter folgendem Link, findest du alle Module, welche standardmäßig bei “nginx” mitgeliefert werden:
vim debian/control
In dieser Datei muss man ggf. noch Abhängigkeiten ergänzen oder entfernen. In meinem Fall habe ich die perl-lib entfernt, da ich dies auch aus der zu-vorigen Konfiguration entfernt hatte.

4.) Ggf. die Konfiguration ändern bzw. deine eigene übernehmen (debian/conf/)

Dafür änderst du einfach die Dateien unter “debian/conf/” und sobald du das fertige Paket installierst, wird deine Konfiguration übernommen, dies kann auch sehr hilfreich sein, wenn du das selbe Programm mit den selben oder ähnlichen Konfiguration auf verschiedenen Computern installierst.

export DEBFULLNAME='nginx';export DEBEMAIL='deine@email-adresse.de';debuild -i -us -uc

5.) Installiere dein neues Debian-Paket :-)

cd ..
dpkg -i nginx_0.9*deb && sudo aptitude hold nginx
Anbei noch meine Nginx-Version ->
Du kannst .deb-Dateien auch entpacken, wenn du diese genauer anschauen möchtest.
ar -x nginx_0.9.1-ppa3_i386.deb
tar xzvf data.tar.gz
Links:

Dark Theme – Samsung GALAXY SPICA I5700

Heute zeige ich eine sehr einfache Möglichkeit, um deinem “Samsung GALAXY Spica” ein neues Aussehen zu verpassen.


1.) SamdroidMod installieren

speedup-samsung-galaxy-spica-i5700 -> min. bis Punkt 8

Falls du dein Handy bereits mit dieser Methode entsperrt hast und somit Root-Rechte besitzt, kannst du diesen Schritt natürlich weglassen.


2.) Theme herunterladen

www.mediafire.com/?0fdxqc0pqw0u11b

… und die Datei anschließend einfach auf die SD-Karte deines Handys kopieren…

PS: hier gibt es noch mehr Themes -> forum.samdroid.net/f42/theme-index-1879/


3.) Recovery-Menü starten

Firmware Hochladen2-176x300 - SpeedUp - Samsung GALAXY SPICA I5700 - android - SUCKUP.de
(leiser+anrufen+auflegen)
Als nächstes führen wir das Theme-Update durch, indem du in dem Menü, welches du nun siehst, “apply any zip from SD” auswählst und dort die Datei, welche auf deiner SD-Karte liegt auswählst -> OK und mit der Home-Taste noch einmal bestätigen….

3.) Wallpaper aussuchen

https://www.sugarsync.com/share/cve9wzbkrirej

… dazu habe ich einige Wallpaper zusammengesucht :-)


GALAXY-THEME GALAXY-THEME1 Theme-test2
GALAXY-THEME2 Theme_test1

TCPdump – HowTo

TCPdump ist ein sehr mächtiger PacketSniffer für die Kommandozeile.


Installation: TCPdump

aptitude install tcpdump


TCPdump verwenden

Standard TCPdump Output:

tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:14:25.060050 IP 89.35.90.202.clax.ro.27015 > h89-37-110-61.teleson.ro.27005: UDP, length 229
15:14:25.060071 IP 89.35.90.202.clax.ro.27015 > 86-124-241-9.rdsnet.ro.27005: UDP, length 374
15:14:25.060213 IP 86-124-240-65.rdsnet.ro.27005 > 89.35.90.202.clax.ro.27015: UDP, length 78
15:14:25.060236 IP 91-213-135-21.optic-bridge.com.ro.45249 > 89.38.255.34.28822: UDP, length 20


Netzwerkadapter anzeigen

tcpdump -D

1.eth0
2.eth1
3.vmnet1
4.eth2
5.vmnet8
6.any (Pseudo-device that captures on all interfaces)
7.lo


Anzeigen von IP-Adressen anstatt DNS-Namen

tcpdump -n

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:16:30.923169 IP 89.35.90.202.38331 > 89.35.90.18.62613: P 2328456744:2328456940(196) ack 4034413693 win 644
15:16:30.923325 IP 89.35.90.202.38331 > 89.35.90.18.62613: P 196:360(164) ack 1 win 644


Ausgabe kürzen / zusammenfassen

tcpdump -q

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:17:03.118429 IP 89.35.90.202.clax.ro.38331 > 89.35.90.18.clax.ro.62613: tcp 196
15:17:03.119439 IP 89.35.90.202.clax.ro.53853 > ns1.clax.ro.domain: UDP, length 42
15:17:03.119631 IP host101-233-dynamic.245-95-r.retail.telecomitalia.it.11563 > 89.38.255.182.36307: UDP, length 20
15:17:03.119880 IP 79-113-85-203.rdsnet.ro.62621 > 89.35.90.202.clax.ro.27015: UDP, length 46
15:17:03.119903 IP user-ip-23-89-33-89-sel.rdsnav.ro.63087 > 89.35.90.202.clax.ro.27015: UDP, length 58
15:17:03.119913 IP 89.123.112.67.40328 > 89.38.255.34.63681: tcp 0



Netzwerkadapter angeben

tcpdump -i eth0


UDP-Pakete filtern

tcpdump udp


TCP Port 80 Traffic aufzeichnen

tcpdump port http
tcpdump port 80

TCP Quell-Port 80 Traffic aufzeichnen

tcpdump src port 80


TCP Ziel-Port 80 Traffic aufzeichnen

tcpdump dst port 80


Traffic-Aufzeichnung von einer bestimmten IP

tcpdump host 192.168.1.1


Traffic-Aufzeichnung von einer bestimmten Quell-IP

tcpdump src 192.168.1.2


Traffic-Aufzeichnung von einer bestimmten Quell-IP

tcpdump dst 10.1.1.2


Traffic-Aufzeichnung nach 20 Paketen stoppen

tcpdump -c 20


Traffic-Aufzeichnung eines IP-Netzes

tcpdump net 192.168.1.0/24


Output in eine Datei umleiten

tcpdump -w tcpdump_capture.log


Lesen eines TCPdump-Logs

tcpdump -r capture.log


Nginx + PHP5-fpm auf Debian/Ubuntu

Zurück zur “Webseiten beschleunigen” – Übersicht

5.3) Nginx als Webserver


nginx_logo

Wer komplett auf nginx als Webserver umsteigen will kann dies auch sehr einfach bewerkstelligen. Ich persönlich nutzte diese Methode und es laufen mehrere WordPress-Webseiten, e107, DokuWiki u.s.w. tadellos mit diesem System.

Als erstes müssen wir unsere sources.list ein wenig erweitern… um php5-fpm direkt mit dem Projektmanager installieren zu können, wie dies Funktioniert habe ich bereits in einem anderen Beitrag beschreiben: php-5-FPM

Danach installieren wir nginx (Webserver) + PHP, wenn du noch apache2 oder einen anderen Webserver, welcher auf Port 80 lauscht installiert hast, musst du diesen nun deinstallieren bzw. erst einmal stoppen und ggf. einige libraries nachinstallieren, falls du Ubuntu und nicht Debian nutzt.


ggf. nur bei Ubuntu

wget http://us.archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb53_1.6.dfsg.4~beta1-5ubuntu2_i386.deb
wget http://us.archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu38_3.8-6ubuntu0.2_i386.deb
sudo dpkg -i *.deb

ggf. root-Rechte

sudo bash

ggf. apache stoppen

/etc/init.d/apache2 stop
aptitude install nginx php5-fpm

Nun kommen wir zur Konfiguration, ich poste hier einfach mal meine komplette Konfig, daher sollte diese ohne Probleme lauffähig sein, wenn du die aktuelle Version installiert hast.

vim /etc/nginx/nginx.conf
user www-data;
worker_processes 4;
worker_rlimit_nofile 3000;
pid /var/run/nginx.pid;

# [ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log;

#google_perftools_profiles /tmp/profile/;

events {
        worker_connections 2048;
        # use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ;
        use epoll;
        multi_accept on;
}

http {
        server_names_hash_bucket_size 64;

        ## Size Limits
        client_max_body_size        10M;
        client_header_buffer_size   32k;
        client_body_buffer_size     128k;
        large_client_header_buffers 64 8k;

        ## Timeouts
        client_body_timeout   3m;
        client_header_timeout 3m;
        send_timeout          3m;
        #expires              24h;
        keepalive_timeout     120 120;

        ## General Options
        ignore_invalid_headers   on;
        keepalive_requests       100;
        limit_zone normal $binary_remote_addr 5m;
        recursive_error_pages    on;
        sendfile                 on;
        server_name_in_redirect  off;
        server_names_hash_max_size 512;
        server_tokens            off;
        set_real_ip_from 127.0.0.1;
        real_ip_header X-Forwarded-For;

        ## TCP options
        #tcp_nopush on;
        tcp_nodelay off;
        #send_lowat 12000;

        include mime.types;
        default_type application/octet-stream;

        access_log /var/log/nginx/access.log;

        log_format main '$remote_addr - $remote_user [$time_local] $status '
        '\"$request\" $body_bytes_sent \"$http_referer\" '
        '\"$http_user_agent\" \"http_x_forwarded_for\"';

        ## Cache
        open_file_cache max=1000 inactive=24h;
        open_file_cache_valid    24h;
        open_file_cache_min_uses 2;
        open_file_cache_errors   on;

        ## Compression
        gzip              on;
        gzip_static       on;
        gzip_disable      "MSIE [1-6]\.";
        gzip_buffers      32 8k;
        gzip_comp_level   5;
        gzip_http_version 1.0;
        gzip_min_length   0;
        gzip_proxied      any;
        gzip_types text/plain text/css text/xml text/javascript application/json application/xml application/xml+rss application/x-javascript image/x-icon application/x-perl application/x-httpd-cgi;
        gzip_vary         on;

        output_buffers   10 128k;
        postpone_output  1500;

        # Beispiel: Loadbalance
        #upstream webbackend  {
                #ip_hash;
                #server web1.domain.lan weight=10 max_fails=3 fail_timeout=30s;
                #server web2.domain.lan weight=1 backup;
        #}

        # Beispiel: Reverse-Proxy
        #server {
                #access_log  /var/log/nginx/access.proxy.log main;
                #error_log   /var/log/nginx/error.proxy.log;
                #listen      80;
                #server_name _;

                ## PROXY - Web
                #location ~ \.php$ {
                        #proxy_cache            cache;
                        #proxy_pass  http://127.0.0.1:8080;
                #}
        #}

        # Beispiel: HTTP Server (sollte jedoch besser unter /etc/nginx/sites-available/ angelegt werden)
        #server {
                #listen       80;
                #listen       somename:80;
                #server_name  somename  alias  another.alias;

                #location / {
                        #root   html;
                        #index  index.html index.htm;
                        #}
                #}

        # Beispiel: HTTPS Server (sollte jedoch besser unter /etc/nginx/sites-available/ angelegt werden)
        #server {
                #listen       443;
                #server_name  localhost;

                #ssl                  on;
                #ssl_certificate      cert.pem;
                #ssl_certificate_key  cert.key;

                #ssl_session_timeout  5m;

                #ssl_protocols  SSLv2 SSLv3 TLSv1;
                #ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
                #ssl_prefer_server_ciphers   on;

                #location / {
                #root   html;
                #index  index.html index.htm;
                #}
        #}

#include /etc/nginx/proxy.conf;
include /etc/nginx/sites-enabled/*.conf;
}
vim /etc/nginx/proxy.conf
proxy_buffering            on;
proxy_cache_min_uses       3;
proxy_cache_path           /usr/local/nginx/proxy_cache/ levels=1:2 keys_zone=cache:10m inactive=24h max_size=1000M;
proxy_cache                cache;
proxy_cache_valid          200 24h;
proxy_cache_use_stale      error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_ignore_client_abort  off;
proxy_intercept_errors     on;
proxy_next_upstream        error timeout invalid_header;
proxy_redirect             off;
proxy_set_header           Host            $host;
proxy_set_header           X-Real-IP       $remote_addr;
proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffers              32 1M;
proxy_busy_buffers_size    31M;
proxy_temp_file_write_size 30M;
proxy_buffer_size          30M;
proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;
proxy_ignore_headers       Expires Cache-Control;

so nun richten wir unsere erste Webseite ein… (domain.de muss in den nachfolgenden Howto durch deine eigene Domain ersetzt werden und natürlich für jede neue Werbepräsenz eine neue Datei angelegt werden.

cd /etc/nginx/sites-available/
vim domain.de.conf
server {
        server_name domain.de www.domain.de *.domain.de;
        root /var/www/www.domian.de/web/;
        listen 80;
        index index.php;
        access_log /var/log/nginx/www.domian.de.access.log main;
        error_log /var/log/nginx/www.domian.de.error.log;

        if (-f $request_filename) {
                break;
        }

        location / {
                try_files $uri $uri/ @domian;
        }

        location ~* ^.+.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
                access_log off;
                expires max;
                root /var/www/www.domian.de/web/;
        }

        location @domian {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root/index.php;
                include /etc/nginx/fastcgi_params;
                fastcgi_param SCRIPT_NAME /index.php;
        }

        location ~ \.php$ {
                try_files $uri @domian;
                fastcgi_index index.php;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }

        location ~ /\.ht {
                deny  all;
        }
}
vim /etc/nginx/fastcgi_params
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

fastcgi_param  REDIRECT_STATUS    200;

nun müssen wir die Webseite nur noch aktivieren, indem wir die soeben erstellte Datei verlinken.

cd /etc/nginx/sites-enabled/
ln -s ../sites-available/domain.de.conf .
nginx -t
/etc/init.d/nginx restart

Und schon läuft unser neuer Webserver. :-) Um die neuste Version von Nginx auf Debian/Ubuntu zu installieren kann man ggf. noch folgende Quellen in die “sources.list” eintragen.

echo "deb  http://ppa.launchpad.net/nginx/stable/ubuntu lucid main" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
apt-get update
apt-get install nginx

… oder du verwendest die letzte Development-Version:

echo "deb  http://ppa.launchpad.net/nginx/development/ubuntu lucid main" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
apt-get update
apt-get install nginx

Nun müssen wir PHP5-FPM noch ein wenig anpassen, so dass php-fpm mit den Rechten des jeweilligen Webs ausgeführt wird:

mkdir /etc/php5/fpm/pools/
vim /etc/php5/fpm/php5-fpm.conf
[...]
[global]
pid = /var/run/php5-fpm.pid
error_log = /var/log/php-fpm.log
log_level = notice
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 5s
daemonize = yes

;  pools defined in virtual hosts
include=/etc/php5/fpm/pools/*.conf
[..]

Nun leben wir für eine Webseite eine PHP-Konfiguration an:

vim /etc/php5/fpm/pools/domain.conf
[domain]

; one Port for one Website
listen = 127.0.0.1:11000

; uid/gid
user = domain_user
group = domain_group

; logging
request_slowlog_timeout = 5s
slowlog = /var/log/slowlog-domain.log

; Choose how the process manager will control the number of child processes.
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500

; Pass environment variables
env[TMP] = /var/www/www.domain.de/phptmp
env[TMPDIR] = /var/www/www.domain.de/phptmp
env[TEMP] = /var/www/www.domain.de/phptmp

; inculde defaults
include = /etc/php5/fpm/common.conf

; host-specific php ini settings here
;php_admin_value[open_basedir] =
vim /etc/php5/fpm/common.conf
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.status_path = /status
ping.path = /ping
ping.response = pong
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[PATH] = /bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin
Jetzt läuft der PHP-fpm Prozess mit den Rechten des jeweiligen Users und mit eigenem Tmp-Verzeichnis, wer will kann php-fpm sogar in einer chroot-Umgebung ausführen lassen :-)
Links:

.bashrc

Wer Einstellungen an der bash ändern möchte oder z.B. einige Kommandos bzw. die
passenden Parameter nur schwer behalten kann oder eher selten auf der
Kommandozeile arbeitet, für den sind Einträge in der .bashrc sehr hilfreich.

Global -> /etc/bash.bashrc

User -> ~/.bashrc

 

Download:

https://github.com/voku/dotfiles/blob/master/.bashrc

 

Es folgen einige Einträge welche man ggf. in der .bashrc eintragen kann

export

# Datum zum Historylog hinzufuegen
export HISTTIMEFORMAT="%F %T "
# History auf 3000 Eintraege erweitern
export HISTSIZE=3000
# keine doppelten Einträge speichern
export HISTCONTROL=ignoredups
LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.svgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01; 35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:'
export LS_COLORS
# Source Globale Definitionen
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Schalte vervollstaendigung fuer Programme ein
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi

alias

alias checkupdates='sudo apt-get update'

-> aktualisiert die Quellen (sources.list)

alias mkdd='mkdir $(date +%Y%m%d)'

-> erstellt ein Verzeichnis mit angehängtem Datum (yyyymmdd)

alias launchpadkey='sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys'

-> fuegt einen neuen Key Launchpad PPAs fuer Ubuntu hinzu

z.B.: launchpadkey 4E5E17B5

alias grep='grep --color=auto'

-> Ergebnisse von grep werden nun farblich markiert

alias ls='ls --color=auto -Fh'

-> verleiht dem “ls”-Befehl Farbe

alias la='ls -laFh --color=auto'

-> zeigt alle Dateien und Verzeichnisse ausführlich an

alias ll='ls -lFh --color=auto --group-directories-first'

-> zeigt Dateien und Verzeichnisse ausführlich an

alias llr='ls -lartFh --color=auto --group-directories-first'

-> zeigt die zuletzt geänderten Dateien unten an

alias dir='ls --color=auto --format=vertical'

-> zeigt Dateien und Verzeichnisse an

alias vdir='ls --color=auto --format=long'

-> zeigt mehr Infos zu Dateien und Verzeichnissen an

alias tree='tree -Csu'

-> zeigt einen Verzeichnis-Baum an

alias timestamp='date "+%Y%m%dT%H%M%S"'

-> zeigt den aktuellen Timestamp im ISO 8601 Format an

alias lf='find ./* -ctime -1 | xargs ls -ltr --color'

-> zeigt rekursiv Dateien und Verzeichnisse die in der letzten Stunde anfasst wurden an

alias myip='GET http://www.whatismyip.com/automation/n09230945.asp && echo'

-> zeigt deine oeffentliche IP-Adresse an

alias ..='cd ../'

-> wechselt ein Verzeichnis nach oben

alias ::='cd ../..'

-> wechselt zwei Verzeichnisse nach oben

alias 'psx'='ps auxwf | grep'

-> zeigt die/den entsprechenden Prozess an

alias pst='pstree -Alpha'

-> zeigt die Prozessstruktur uebersichtlich an

alias psmy='ps -ef | grep $USER'

-> zeigt alle meine Prozesse an

alias lsport='sudo lsof -i -T -n'

-> zeigt die Ports an, welche die Applikationen verwenden

alias llport='netstat -nape --inet'

-> zeigt weitere Infos über die Ports an, welche die Applikationen verwenden

alias du='du -kh'

-> zeigt den Festplattenverbrauch eines Verzeichnisses leserlich an

alias df='df -kTh'

-> zeigt den kompletten Festplattenverbrauch leserlich an

function

# Netzwerk Info
netinfo ()
{
  echo "--------------- Network Information ---------------"
  /sbin/ifconfig | awk /'inet Adresse/ {print $2}'
  echo ""
  /sbin/ifconfig | awk /'Bcast/ {print $3}'
  echo ""
  /sbin/ifconfig | awk /'inet Adresse/ {print $4}'
  echo "---------------------------------------------------"
}
# entpacken von Komprimierten Dateien
extract()
{
  if [ -f $1 ] ; then
    case $1 in
             *.tar.bz2)   tar xvjf $1     ;;
             *.tar.gz)    tar xvzf $1     ;;
             *.bz2)       bunzip2 $1      ;;
             *.rar)       unrar x $1      ;;
             *.gz)        gunzip $1       ;;
             *.tar)       tar xvf $1      ;;
             *.tbz2)      tar xvjf $1     ;;
             *.tgz)       tar xvzf $1     ;;
             *.zip)       unzip $1        ;;
             *.Z)         uncompress $1   ;;
             *.7z)        7z x $1         ;;
             *)           echo "'$1' cannot be extracted via >extra  ct<" ;;
         esac
  else
    echo "'$1' is not a valid file"
  fi
}
# zeigt alle Dateien in dem akuellen Verzeichnis an (rekursiev)
ff()
{
  find . -type f -iname '*'$*'*' -ls ;
}
# Finde Text in Dateien
fstr()
{
  OPTIND=1
  local case=""
  local usage="fstr: find string in files.
  Usage: fstr [-i] "pattern" ["filename pattern"] "
  while getopts :it opt
    do
        case "$opt" in
        i) case="-i " ;;
        *) echo "$usage"; return;;
        esac
  done
  shift $(( $OPTIND - 1 ))
  if [ "$#" -lt 1 ]; then
    echo "$usage"
        return;
  fi
  find . -type f -name "${2:-*}" -print0 |
  xargs -0 egrep --color=always -sn ${case} "$1" 2>&- | more
}
# Infos zu einer Datei ausgeben
file_information()
{
  if [ $1 ]; then
    PLACE=`type -path $1`
    if [ -z $PLACE ]; then echo "$1: not found"; return 1; fi
      echo $PLACE
          ls -l $PLACE
          file $PLACE
        ldd $PLACE
  else
      echo "Missing argument"
  fi
}
alias finfo=file_information
# ein Backup einer Datei anlegen (mit Datum)
file_backup()
{
  for FILE ; do
    [[ -e "$1" ]] && cp "$1" "${1}_$(date +%Y-%m-%d_%H-%M-%S)" || echo ""$1" not found." >&2
  done
}
alias fback=file_backup
# Ein komprimiertes Backup + Datum erstellen
packen()
{
tar czvf "$1-$(date +%y%m%d-%H%M%S).tar.gz" "$1" ;
}
# ssh Verbindung aufbauen + ein Logfile schreiben
logssh()
{
  ssh $1 | tee sshlog ;
}
# farblichen Bash-Prompt
shell_colored() {
local GRAY="[33[1;30m]"
local LIGHT_GRAY="[33[0;37m]"
local CYAN="[33[0;36m]"
local LIGHT_CYAN="[33[1;36m]"
local NO_COLOUR="[33[0m]"
local BLUE="[33[0;34m]"
local LIGHT_BLUE="[33[1;34m]"
local RED="[33[0;31m]"
local LIGHT_RED="[33[1;31m]"
local GREEN="[33[0;32m]"
local LIGHT_GREEN="[33[1;32m]"
local PURPLE="[33[0;35m]"
local LIGHT_PURPLE="[33[1;35m]"
local BROWN="[33[0;33m]"
local YELLOW="[33[1;33m]"
local BLACK="[33[0;30m]"
local WHITE="[33[1;37m]"

PS1="n${debian_chroot:+($debian_chroot)}$LIGHT_GREENu$LIGHT_BLUE@$LIGHT_GREENh$LIGHT_GRAY:$LIGHT_BLUEw$LIGHT_RED->$NO_COLOUR "
}
shell_colored

PHP 5.3.3

Auf Dotdeb.org gibt es PHP in Version 5.3.3 im .deb-Format. Das nachfolgende kleine HowTo zeigt wie du dies auf Debian installieren kannst. Es gibt Pakete für Debian (Lenny), sowohl für amd64 als auch i386 Architekturen.

Install:

1.) als erstes benötigen wir eine Root-Shell

sudo bash

2.) nun können wir die zusätzlichen Quellen einfügen

echo "deb http://php53.dotdeb.org stable all" >> /etc/apt/sources.list
echo "deb-src http://php53.dotdeb.org stable all" >> /etc/apt/sources.list

3.) diese einmal aktualisieren

apt-get update

4.) und schon können wir PHP 5.3 installieren

aptitude safe-upgrade

Migration von PHP 5.2.x zu PHP 5.3.x:
de.php.net/migration53

Falls man bereits mit Debian (Squeeze) arbeitet oder die Lenny-Backports in den Quellen eingefügt hat und daher das Paket libtool > 2.2 installiert hat, muss man eine ältere Version per dpkg installieren, da man ansonsten php5-dev (5.3.1) nicht installieren kann, damit man selber Erweiterungen für PHP kompilieren kann (z.B. eaccelerator). Es folgt ein kleines HowTo:

wget http://ftp.de.debian.org/debian/pool/main/libt/libtool/libtool_1.5.26-4_i386.deb
dpkg --force-all -i libtool_1.5.26-4_i386.deb
aptitude install build-essential php5-dev

JavaScript richtig im HTML-Code platzieren

Zurück zur “Webseiten beschleunigen” – Übersicht

3.) JavaScript richtig im HTML-Code platzieren

Zudem sollte man sich überlegen wo man seinen JavaScript Code im HTML-Code platziert, da irgendwelche Effekte für das Menü usw. auch später geladen werden können, so dass erst-einmal die Webseite (Bilder… ) geladen werden kann, sollte jedoch vor dem  </body> platziert werden.


Im allgemeinen kann man jedoch sagen, dass CSS- sowie Javascript-Daten zusammen-gefasst werden können, um HTTP-Requests an dem Server zu verringern. So sollte man also seine CSS- und Javascript-Daten, welche gemeinsam jedoch in verschiedenen Dateien auf einer Webseite genutzt werden, jeweils zu einer einzigen Datei zusammengefasst werden.


Beispiel (ganz schlecht):

<head>
<link rel="stylesheet" type="text/css" href="stylesheet1.css" />
<script type="text/javascript" src="scriptfile1.js" />< script type="text/javascript" src="scriptfile2.js" />
<link rel="stylesheet" type="text/css" href="stylesheet2.css" />
<link rel="stylesheet" type="text/css" href="stylesheet3.css" />
</head>

Hier wird der Download der Dateien stylesheet2.css und stylesheet3.css blockiert, weil die JS-Dateien dazwischen den HTML-Baum verändern könnten.



Beispiel (besser aber noch immer schlecht):

<head>
<link rel="stylesheet" type="text/css" href="stylesheet1.css" />
<link rel="stylesheet" type="text/css" href="stylesheet2.css" />
<link rel="stylesheet" type="text/css" href="stylesheet3.css" />
<script type="text/javascript" src="scriptfile1.js" />
<script type="text/javascript" src="scriptfile2.js" />
</head>

In diesem Beispiel kann man schon mal 100ms einsparen, jedoch können Javascript-Daten nicht parallel heruntergeladen werden…



Beispiel (auch schlecht):

<head>
<link rel="stylesheet" type="text/css" href="stylesheet1.css" />
<script type="text/javascript" > document.write("Hello world!");</script>
<link rel="stylesheet" type="text/css" href="stylesheet2.css" />
<link rel="stylesheet" type="text/css" href="stylesheet3.css" />
</head>

Zuerst wird die Ausführung des Inline-Style-Befehls durch stylesheet1.css verzögert. Anschließend verhindert die Inline-Anweisung wiederum, dass die Stylesheets parallel heruntergeladen werden können.


Beispiel (gut):

<head>
<link rel="stylesheet" type="text/css" href="stylesheet1.css" />
<link rel="stylesheet" type="text/css" href="stylesheet2.css" />
<link rel="stylesheet" type="text/css" href="stylesheet3.css" />
<script type="text/javascript" > document.write("Hello world!");</script>
</head>


Zuerst alle externen Ressourcen einbinden. Alle werden parallel heruntergeladen. Anschließend das Inline-Script. Natürlich sollte das JavaScript möglichst weit unten in den Body stehen, da es genauso das laden von Bildern verzögert.


weitere derartige Beispiele:
code.google.com


Mit folgendem Code können auch JavaScript-Daten parallel geladen werden. Einfach das Array anpassen und fertig…

<script type="text/javascript"> (function() {
var s = [
"/javascripts/script1.js",
"/javascripts/script2.js",
"/javascripts/script3.js",
"/javascripts/script4.js",
"/javascripts/script5.js"
];
var sc = "script", tp = "text/javascript", sa = "setAttribute", doc = document, ua = window.navigator.userAgent;
for(var i=0, l=s.length; i<l; ++i) {
if(ua.indexOf("MSIE")!==-1 || ua.indexOf("WebKit")!==-1) {
doc.writeln("<" + sc + " type="" + tp + "" src="" + s[i] + "" defer></" + sc + "<");
t[sa]("src", s[i]);
t[sa]("type", tp);
doc.getElementsByTagName("head")[0].appendChild(t);
} else {
var t=doc.createElement(sc);
t.setAttribute("src", s[i]);
t.setAttribute("type", tp);
doc.getElementsByTagName("head")[0].appendChild(t);
}
}
})();
</script>


Außerdem könnte man JavaScript Dateien dynamisch nachladen, so dass diese nur geladen werden wenn man diese auch braucht.

Include ("com.iskitz.ajile.examples.IncludeExample");
function testInclude()
{
if("undefined" != typeof com.iskitz.ajile.examples)
if("undefined" != typeof com.iskitz.ajile.examples.IncludeExample)
com.iskitz.ajile.examples.IncludeExample();
else alert( "Include test was unsuccessful :(nn"
+ "Failed to Include [ com.iskitz.ajile.examples.IncludeExample.js ]");
}
/** InludeExample.js: **********************************************************/
Namespace ("com.iskitz.ajile.examples");
com.iskitz.ajile.examples.IncludeExample = function()
{
var wasImported = typeof window["IncludeExample"] != "undefined";
alert( "[ com.iskitz.ajile.examples.IncludeExample ] was "
+ (wasImported ? "Included *and* Imported." : "successfully Included!"));
};

weitere derartige Beispiele:
ajile.iskitz.com


Tipps:

  • alle CSS-Datei per link-tag im Header-Bereich direkt hintereinander schreiben
  • alle Script-Tags direkt vor Body-Bereich (wenn möglich)
  • möglichst keine JS-Anweisungen (inline oder extern) zwischen CSS-Dateien setzen
  • keine JS-Inline-Anweisungen zwischen mehreren Referenzierungen auf JS-Dateien
  • JS-Inline-Anweisungen vermeiden, da diese vom Browser nicht als Datei zwischengespeichert werden können

Webseiten Analyse

Zurück zur “Webseiten beschleunigen” – Übersicht

1.) Webseiten Analyse

Dies ist der Erste Teil von meiner Blog-Reihe “Webseiten beschleunigen”. Um die ursprüngliche Ladegeschwindigkeit deiner Webseite zu prüfen, installieren wir uns zwei Erweiterungen für Firefox.

Firebug +
YSlow

ggf. kann man sich auch nach die nachfolgenden Links anschauen, jedoch habe ich mit der Kombination „ Firebug + YSlow“ sehr gute Erfahrungen gemacht, daher folgt nun diesbezüglich ein kleines Video.

 

 

Alternative von Google:

Firebug +
Page-Speed

 

Alternative Online-Analyse:

Bisher habe ich nur zwei Online-Analyse-Dienste gefunden, welche mir wirklich geholfen haben.

a.) Auf Pingdom.com kannst du die Ladezeit deiner Webseite und dessen Inhalt sehr schön in einem Graphen sehen und Schwachstellen somit sehr einfach erkennen, z.B. wenn eine externe Datei nicht erreichbar ist.

tools.pingdom.com

 

pingdom
pingdom

 

b.) Die nächste Webseite ist AOL’s WebPageTest ist ein wenig umfangreicher, so zeigt diese Webseite wie bereits beim vorherigen Link einen Graphen mit den geladen Dateien an, jedoch führt diese Webseite den Test zweimal durch, so dass die Auswirkung vom Browser-Cache simuliert wird. Außerdem gibt es eine Checkliste, wo alle Dateien noch einmal einzeln geprüft werden.

AOL’s WebPageTest

 

aol_webpagetest
aol_webpagetest

 

1.1) Webseiten Benchmark

Außerdem könnte kann die Abfragen auch direkt von der Shell aus starten z.B. mit “httperf”. Es folgt ein kleines HowTo für Debian:

sudo bash
aptitude install httperf
httperf --hog --server voku-online.de --num-conn 20 --ra 10 --timeout 5

jedoch kann ich zumindest mit der Ausgabe nicht viel anfangen, da mir diese vielen Zahlen auf Anhieb nicht viel sagen, daher folgt eine kleine Anleitung, wie man aus diesen Werten einen Graphen zeichnet

cd /usr/src/
wget http://www.xenoclast.org/autobench/downloads/debian/autobench_2.1.2_i386.deb
dpkg -i autobench_2.1.2_i386.deb
autobench --single_host --host1  www.test.de --uri1 /10K --quiet
--low_rate 20  --high_rate 200 --rate_step 20 --num_call 10
--num_conn  5000 --timeout 5 --file results.tsv
aptitude install gnuplot
bench2graph results.tsv result.ps

so nun laden wir die Datei „result.ps“ z.B. per WinSCP auf unsern Windows Rechner und öffnen die Datei mit Ghostscript

Hier mein Beispiel:

 

webserver_bench
webserver_bench

 

(1) req_rate: request rate, requests per second
(2) con_rate: connection rate, connections per second
(3) min_rep_rate: minimum reply rate, replies per second
(4) avg_rep_rate: average reply rate, replies per second
(5) max_rep_rate: maximum reply rate, replies per second
(6) stddev_rep_rate: standard deviation for reply rate
(7) resp_time
(8) net_io: Net I/O, KB per second
(9) error

Link:
autobench

 

Anstatt diesen Vorgang komplett per Hand zu bewerkstelligen, kann man auch folgende Webseite dazu nutzen:

-> loadimpact.com

So kannst du herausfinden, wie sich deine Webseite verhält, wenn sehr viele Besucher diese besuchen. Anbei das Ergebnis von diesem Blog. (Nach meiner Optimierung per “PHP XCache” + “Nginx” + “W3 Total Cache

 

loadimpact

 

Hier ist ein schneller Überblick darüber, was diese Kurve nun aussagt. -> loadimpact.com/forum/