Best practices für die Optimierung der LAMPE Websites, die für Geschwindigkeit?
Ich will wissen, wenn Gebäude, ein typischer Ort auf dem LAMP-stack wie optimieren Sie es für den bestmöglichen Ladezeiten. Ich bin Malte einen typischen DB-betriebenen Website.
Dies ist ein high-level-look und könnte wahrscheinlich ziehen Sie in Frage und lassen Sie mich break it down in jede Ebene des Stacks.
L - Auf der system-Ebene (setup und Dateisystem) können Sie tun, um die Geschwindigkeit zu erhöhen? Eine Sache, die ich denken kann, ist Bild-Größen, kann die Komprimierung hier helfen etwas optimieren?
Ein - Es gibt eine Tonne von Einstellungen im Zusammenhang mit der Website-Geschwindigkeit hier in den web-server. Nicht meine Stärke. Wahrscheinlich hängt weitgehend davon ab, wie viele Seiten gleichzeitig ausgeführt werden.
M - MySQL in einer Datenbank gestützte Website, DB-performance ist der Schlüssel. Gibt es eine bessere Normalisierung Ansatz ich.e, mit Tabellen verknüpfen? Web-Entwickler oft nur einfache monolithische Tabellen ähnlich 1NF und diese töten kann-Leistung.
P - abgesehen von der Leistung-Boost-Einstellungen wie caching, was kann der Programmierer tun, um Einfluss auf die performance auf einem hohen level? Ich würde wirklich gerne wissen, ob MVC-design-Ansätze hit Leistung mehr als quick-and-dirty -. Andere einfache Tipps, wie Sitzungen sind schneller als cookies wäre interessant zu wissen.
Offensichtlich haben Sie zu get down and dirty in die details gehen und finden, was code ist, Bremsen Sie ab. Auch ich merke, dass viele Websites haben viele verschiedene performance-Eigenschaften, aber nehmen wir an, eine typische Website, die mehr liest, dann schreibt.
Bin ich nur Fragen, wenn wir können kompilieren eine Reihe von best practices und voll erwarten, dass die Menschen andere Fragen, so können wir effektiv Aufarbeitung einer Checkliste.
Mein Ziel ist es, zu sehen, ob auch zusätzlich zu den üblichen Themen in der Leistung können wir sehen, einige merkwürdige Dinge, die Sie vielleicht nicht denken, dass Tauchen zu gehen zusammen mit einem " best practices Zusammenfassung.
Also meine Frage ist,, wenn Sie wurden von Grund auf neu beginnen, wie würden Sie den sicher deine LAMPE site war schnell?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier einige persönliche must-dos, die ich immer in meine LAMPE Anwendungen.
Installieren Sie mod_deflate für den apache
verwenden Sie keine PHP-gzip-Handler.
mod_deflate wird Ihnen erlauben,
komprimieren von statischen Inhalten, wie
javascript/css/statische html -, als auch
die üblichen dynamischen PHP-output, und
es ist weniger eine Sache, die Sie haben zu kümmern
etwa in deinem code.
Vorsichtig sein mit .htaccess-Dateien!
Aktivieren .htaccess-Dateien
Verzeichnisse in Ihrer app bedeutet, dass
Der Apache muss zum Scannen das Dateisystem
ständig suchen .htaccess
- Richtlinien. Es ist weit besser,
Richtlinien innerhalb der main
Konfiguration oder ein vhost
Konfiguration, wo Sie geladen werden
einmal. Jeder Zeit können Sie loszuwerden, ein
Verzeichnis-Ebene access-Datei, indem
es in eine Haupt-Konfigurationsdatei
sparen Sie Datenträger-Zugriffszeit.
Bereiten Sie Ihre Anwendung Datenbank
Ebene zu nutzen, um einen Verbindungs-manager
von einer Art (ich benutze ein Singleton für
die meisten Anwendungen). Es ist nicht sehr
schwer zu tun, und die Verringerung der Zahl
der Datenbank-verbindungen, die von Ihrer
- Anwendung geöffnet und spart Ressourcen.
Wenn Sie glauben, dass Ihre Anwendung wird
die erhebliche Belastung, memcached kann
wahre Wunder vollbringen. Behalten Sie dies im Hinterkopf
während Sie den code schreiben... vielleicht
eines Tages, statt Objekte zu erstellen
auf die Fliegen, die Sie bekommen werden Ihnen
von memcached. Ein wenig Weitblick
wird die Umsetzung schmerzlos.
Sobald Ihre app ist und läuft, set
MySQL-slow-query-Zeit zu einem kleinen
Anzahl und überwachen die slow-query-log
fleißig. Dies wird Ihnen zeigen, wo
Ihr problem sind Abfragen aus,
und ermöglichen Ihnen die Optimierung Ihres
Abfragen und Indizes bevor Sie
zu einem problem geworden.
Für ernsthafte performance-Tweaker, Sie
kompilieren wollen PHP von der Quelle.
Die Installation aus einem Paket installiert
viele Bibliotheken, die Sie vielleicht nie
verwenden. Seit PHP Umgebungen
geladen wird in jeder Instanz ein
Apache-thread, auch eine 5 MB Speicher
overhead von zusätzlichen Bibliotheken schnell
wird 250MB verlorene Erinnerung, wenn
es gibt 50 Apache-threads
Existenz. Ich halte eine Liste meiner
standard ./configure-Zeile verwenden, wenn ich
PHP hier, und ich finde es
passt zu den meisten meiner Anwendungen. Die
Nachteil ist, dass, wenn Sie am Ende
dass eine Bibliothek, die Sie haben, um
kompilieren Sie PHP, um es zu bekommen. Analysieren
Ihr code und testen Sie es in einem devel
Umgebung um sicherzustellen, dass Sie haben
alles, was Sie brauchen.
Minifizieren Javascript.
Bereit sein, sich zu bewegen statischen Inhalten
wie Bilder und video, um eine
nicht-dynamische web-server. Schreiben Sie Ihre
code so, dass beliebige URLs für Bilder und
Videos sind einfach konfiguriert
auf einem anderen server in der Zukunft. Ein
web-server optimiert für statische
Inhalte können leicht dazu führen, dass Dutzende oder sogar
Hunderte Male schneller als ein
dynamic-content-server.
Das ist, was ich mir denken kann aus der Spitze von meinem Kopf. Googeln um für die PHP-best practices finden Sie eine Menge Tipps, wie Sie schneller schreiben/bessere Codes (z.B.:
echo
ist schneller alsprint
).Zuerst begreifen, dass die Leistung ist ein iterativer Prozess. Sie nicht erstellen einer Webanwendung in einem einzigen Durchgang, es zu starten, und arbeiten Sie nie auf es wieder. Im Gegenteil, Sie fangen klein an, und beheben Sie performance-Probleme, wie Ihre Website wächst.
Nun, auf Besonderheiten:
Oben wird Sie sehr weit bringen. Das heißt, auch ein ziemlich db-schwere-Website sollte in der Lage sein, zu überleben digg frontpage auf einem einzigen bescheiden geskilled-server, wenn Sie getan haben, die oben genannten.
Werden Sie schließlich traf einen Punkt, wo die Standard-apache-config nicht immer in der Lage sein zu halten mit den eingehenden Anfragen. Wenn Sie auf dieser Wand gibt es zwei Dinge zu tun:
Sobald Sie so weit gekommen sind, es ist weitgehend eine Frage der Zwischenspeicherung mehr, und halten ein Auge auf Ihre Datenbank. Schließlich werden Sie entwachsen einem einzigen server. Zunächst werden Sie wahrscheinlich fügen Sie mehrere front-end-Boxen, all backed by a single database server. Dann sind Sie gehen zu müssen, beginnen die Verbreitung Ihrer Datenbank laden um, vermutlich durch Splitter. Für einen exzellenten überblick über dieses Wachstum Prozess finden Sie unter dieser livejournal-Präsentation
Für ein mehr in Tiefe Blick auf viele der oben genannten, überprüfen Sie heraus Building Scalable Web Sites, von Cal Henderson, Flickr Ruhm. Google hat Teile des Buches in der Vorschau
Ich verwendet habe, MysqlTuner für die performance-Analyse auf meinem mysql-Server und dessen gegeben, einen guten Einblick in weitere Themen googeln, sowie seine eigenen Empfehlungen
Einer Ressource, die Sie vielleicht hilfreich finden, ist das YDN Reihe von performance-Regeln.
Vergessen Sie nicht die Tatsache, dass Ihre Benutzer werden Tausende von Meilen Weg von Ihrem server herunterladen und Dutzende von Dateien zu Rendern einer einzelnen Seite. Dass die Latenz und der overhead für das rendering der Seite im Browser kann größer sein als die Menge der Zeit, die Sie ausgeben, sammeln Informationen und generieren der Seite.
Sehen die Seiten bei Yahoo Developer Network über Best Practices for Speeding Up your Web Site, und die YSlow tool um zu sehen, welche Teil der das herunterladen von der Website nimmt Zeit.
Vergessen Sie nicht, schalten Sie Zeit für Ihr Dateisystem!
Ich würde empfehlen, mit Jet Profiler for MySQL zu finden, schlechte Abfragen. Ich habe erfolgreich verwendet es auf ein paar meiner Seiten. Wirklich hilfreich und viel einfacher zu verdauen als das slow-query-log.
Ich würde empfehlen, beginnend mit http://highscalability.com/
Als für deine Vorschläge:
Komprimierung für Bilder, auf jeden Fall nicht. Typ der Dateien, system-Tuning, ja, das könnte eine gewisse Wirkung haben, aber minimal. Aber eigentlich das beste ist, um mit der in-memory-reverse-proxy oder noch besser CDN.
Für Apache im Grunde nur das laden der Module, die Sie benötigen. Laden nicht irgendetwas anderes. Mit PHP können Sie nur verwenden, Gabeln MPM, es ist wichtig zu halten es schlank. Für optimale Einstellungen, sowie Sie haben, um die Feinabstimmung auf bestimmte Anwendung, hardware, etc. Wenn man genug CPU, ist es empfehlenswert, dass Sie verwenden mod_deflate. Schneller kann der server senden Daten an den client, schneller kann mit der Verarbeitung beginnen nächste Anfrage.