Startseite
  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Übersetzungsserver
  • » Suche
Startseite › Benutzerhandbuch › Fortgeschrittene › Best Practice - Drupal Sites - Guidelines ›

Performance Bremsen - eine Übersicht

Eingetragen von rapsli (1505) am 02.03.2010 - 21:35 Uhr

Es gibt diverse Elemente einer Drupalseite (oder auch allgemein einer Webseite), welche die Geschwindigkeit beeinträchtigen. Dazu gehören die folgenden Elemente:

  • Festplatte
  • CPU
  • Datenbank
  • Schlecht programmierte Module
  • Cron
  • Bildbearbeitung
  • Frontend

In diesem Kapitel werden diese Punkte kurz erläutert ohne auf die genauen Konzepte einzugehen.

CPU

Um einen Request zu verarbeiten, wird entsprechende CPU Leistung benötigt: PHP kompilieren, PHP abarbeiten, Datenbankabfragen machen usw. Durch geschickte Programmierung und das Einsetzen von Caches kann diese Last reduziert werden.
Daher: Je mehr Module und je grösser die Komplexität, desto höher die CPU Belastung
Abhilfe: OPcache oder Loadbalancing. Es gibt mehrere Server, welche die PHP Verarbeitung vornehmen. Falls die DB zuviel Last erzeugt, dann muss ein Master-Slave System eingesetzt werden.
Skalierung: Loadbalancing

Festplatte

Bei einer PHP Applikation werden die benötigten Dateien bei jedem Seitenaufruf von der Festplatte gelesen. Das hat den Effekt, dass bei einer grossen Anzahl an Modulen beim Booststrapen von Drupal eine beachtliche Anzahl an Dateien in den Speicher geladen werden muss.
Daher: Je mehr Module, desto grösser die Belastung auf die Festplatte.
Abhilfe: Ein OPcache, wie z.B. APC. Hier wird der PHP Code vorkompiliert und in den Arbeitsspeicher geladen, so dass dieser nicht bei jedem Request von der Festplatte gelesen und kompiliert werden muss.
Skalierung: Gibt es grundsätzlich zwei Möglichkeiten: 1) Den Drupal files Ordner (z.B. sites/default/files) auf einen anderen Rechner auslagern und über Mount einbeziehen. Dies ist erfolgversprechend, wenn der Files Ordner sehr viel IO Last erzeugt. Weiterführende Links: NFS, GlusterFS.

Datenbank

Die Datenbank kann Anfragen nur seriel abarbeiten und ist daher limitiert. Folgende Faktoren beeinflussen die Geschwindigkeit der Applikation:

  1. Die Anzahl an Anfragen pro Zeiteinheit
  2. Die Komplexität der Anfragen

Daher: Je komplexer und je mehr Anfragen, desto langsamer die Seite.
Als Faustregel kann man sagen, dass ein Seitenaufruf mit ...
... 50 Queries -> sehr gut. Alles in Ordnung
... 200-500 Queries -> Hier wird bereits einiges geladen -> Je nach Server jedoch noch tragbar
... > 1000 -> hier muss definitiv etwas gemacht werden

Abhilfe:Anzahl Anfragen reduzieren und vereinfachen, sowie Cachingstrategien einsetzen.
Skalierung: Hier gibt es diverse Möglichkeiten: Datenbank auf einen eigenen Server auslagern, Datenbankreplikation, Indizes korrekt setzen, Drupalcache mittels Cacherouter in Memory auslagern usw.

Schlecht programmierte Module

Wie bereits in der Einleitung erwähnt reicht die Palette an Drupalmodule von sehr schlecht bis ausgezeichnet. Als Grundsatz gilt: Jedes installierte Modul (ob gut oder schlecht) ist eine Belastung fürs System. Das kommt daher, dass beim Aufrufen eines Hooks, jedes Modul durchgelaufen wird und geprüft wird, ob der entsprechende Hook vorhanden ist.
Schlecht programmierte Module können die verschiedensten Auswirkungen auf ein System haben (Datenbank, CPU und Festplatte). Als schlechtes Beispiel bezüglich der DB Verwendung:

<?php
$ar_nid
= array(3, 5, 6);
foreach (
$ar_nid as $nid) {
 
$title = db_result(db_query("SELECT title FROM {node} WHERE nid=%d", $nid));
 
drupal_set_message($title);
}
?>

Besser wäre der folgende Ansatz:

<?php
$ar_nid
= array(3, 5, 6);
$result = db_query("SELECT title FROM {node} WHERE nid=%d OR nid=%d OR nid=%d", $ar_nid);
while (
$title = db_fetch_object($result)) {
 
drupal_set_message(check_plain($title)));
}
?>

Im ersten Beispiel muss die Datenbank 3. Mal befragt werden, beim 2. Mal lediglich 1 Mal.

Daher: Je mehr Module, desto langsamer das System
Abhilfe: Module überlegt einsetzen. Nur Module einsetzen, welche auch wirklich benötigt werden und nicht benötigte Module wieder deaktivieren und deinstallieren.
Skalierung: -

Cron

Der Cron wird periodisch ausgeführt. Je nach Webseite kann das alle 15 Minuten sein oder lediglich 1 mal Pro Tag. Im Cron werden aynchrone Arbeiten durchgeführt: Das können Aufgaben sein, wie das Zeitgesteuerte Publizieren, das Aufräumen des temporären Verzeichnisses, Import von Daten usw.

Daher: Je häufiger der Cron läuft, desto grösser die Belastung für das System.
Abhilfe: Den Cron weniger häuft laufen lassen, bzw. bei der Programmierung darauf achten, dass Prozesse, welche lediglich 1 mal pro Tag durchgeführt werden müssen, auch lediglich 1 mal pro Tag laufen (Flag setzen), auch wenn der Cron alle 15 Minuten läuft
Skalierung: -

Bildbearbeitung

Die Bildbearbeitung ist von Natur aus sehr Ressourcenintensiv, was die CPU sowie den Speicherverbrauch angeht. Es spielt hier primär eine Rolle, wie gross (Pixel) ein Bild ist und nicht wie schwer (MB), denn: Ein Bild, welches 10 MB gross ist bei 5000x3000 Pixel, mag vollkommen unproblematisch sein. Ein Bild dagegen, welches lediglich 4 MB gross ist bei 6000x10000 Pixel kann jedoch problematisch sein, was den Speicherverbrauch angeht. Imagecache ist ein kleines Wundertool. Die gewünschten Bilder werden immer auf dem Originalbild berechnet und dann als gecachte Version abgespeichert.

Daher: Je grösser (Pixel) die hochgeladenen Bilder sind, desto grösser die Belastung für das System.
Abhilfe: Zu grosse Bilder beim Hochladen skalieren, damit Imagecache nicht auf den Originalbildern rechnen muss (VORSICHT: Dabei gehen IPTC Dateien verloren!)
Skalierung: Den Bildbearbeitungsprozess auf einen eigenen Server auslagern.

Frontend

Das Frontend stellt nicht direkt eine Belastung für den Server dar, ist jedoch dennoch dafür verantwortlich, dass der Benutzer warten muss. Wartezeiten im Frontend entstehen vor allem durch schlechte JQuery Selektoren, viele & grosse Bidler und viele CSS und Js Dateien.

Abhilfe: CSS und JS aggregieren, Sprites einsetzen, HTML Komprimierung einschalten, JQuery Selektoren wenn möglich auf IDs legen. Firebug und das Plugin YSlow sind hier sehr hilfreich.
Skalierung: -

‹ Best Practice - Drupal Sites - Guidelines nach oben Eine neue Seite bauen - Architektur ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Drupal Entwickler für Erstellung von Shop mit Ubercart in bestehende Drupal-Seite
  • Viele Fragen die mich quälen ...
  • Fataler Fehler nach update auf Drupal 6.24 wg fehlender Funktion in image.inc
  • meine Profilbesucher anzeigen?
  • Computed_Field Node Objekt bzw. nid?
  • URLs: Groß- und Kleinschreibung
  • Rules und Organic Group
  • [erledigt] drupal 7 - read more ausblenden
  • Modul für Absatznummern / Randnummern
  • Path-Based Metatags - wofür sind die gut?
  • Views Field Language (Spracherkennung der Felder) funktiniert nicht
  • [gelöst] Danland: Standard-Startseite formatieren
Weiter

Neue Kommentare

  • Problem gelöst
    vor 2 Stunden 9 Minuten
  • ich könnte mir vorstellen
    vor 2 Stunden 10 Minuten
  • Ja und wie greife ich da auf
    vor 2 Stunden 18 Minuten
  • Unser Server kann das. Ich
    vor 2 Stunden 32 Minuten
  • Modul "User Relationships"
    vor 2 Stunden 33 Minuten
  • Ist der Host ein Windows-Host?
    vor 2 Stunden 39 Minuten
  • Du läßt Dir in der Zeile die
    vor 2 Stunden 45 Minuten
  • Patch aus Issue Queue
    vor 3 Stunden 7 Minuten
  • "Read more"-Link modifizieren
    vor 3 Stunden 11 Minuten
  • CSS mit body-Tag-Klasse präzisieren
    vor 4 Stunden 5 Minuten

Statistik

Beiträge im Forum: 160314
Registrierte User: 14286

Neue User:

  • schmittrich
  • mah1987
  • Nadine.S

» Alle User anzeigen

User nach Punkten sortiert:
stBorchert5214
quiptime4713
Tobias Bähr3825
md3727
bv3680
Thoor3282
Alexander Langer3155
wla2795
dereine2630
pebosi2495
» User nach Punkten
Zur Zeit sind 0 User und 3 Gäste online.

Benutzerhandbuch

  • FAQ - Häufig gestellte Fragen.
  • Links & Downloads
  • Über Drupalcenter.de und das deutschsprachige Benutzerhandbuch
  • Über Drupal
  • Einsteiger
  • Fortgeschrittene
    • Best Practice - Drupal Sites - Guidelines
      • Performance Bremsen - eine Übersicht
      • Eine neue Seite bauen - Architektur
      • Performance während der Entwicklung im Griff halten
      • Modulentwicklung - Bestpractices
      • Anhang
    • Die beliebtesten Themes und Module
    • Tutorials & How To's - Tipps & Tricks
  • Entwicklung von Modulen und Themes
  • Drupalcenters Community
  • Bücherecke
  • Drupal 7 Video-Trainings (Deutsch)
  • Drupal 6 Module
  • Drupal 7 Module
  • Drupal Screencasts auf deutsch
  • Archiv

Buchempfehlung

Webseiten erstellen Drupal 7
Content - Layout - Administration
Das Drupal-Entwicklerhandbuch
Der Praxisleitfaden für Drupal-basierte Webprojekte.
Pro Drupal 7 Development
(Expert's Voice in Open Source)

Das Copyright des deutschsprachigen Drupal-Benutzerhandbuches unterliegt den jeweiligen Autoren. Übersetzungen des englischsprachigen Drupal-Benutzerhandbuches unterliegen der Creative Commons License, Attribution-ShareAlike 2.0.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's
  • Bücherecke

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed Drupal Podcast
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association