Themenvorschläge

Ich versuche stets über Themen zu schreiben, die euch Leser in Bezug auf PHP, MySQL, Server und ganz allgemein Webentwicklung interessieren. Dazu lese ich andere Blogs, stolpere über Fragen bei der täglichen Arbeit oder nehme Themen auf, die mir von euch Lesern vorgeschlagen werden. Insbesondere letzterer Punkt bringt mich immer wieder auf neue Ideen, denn die Recherchearbeit für die Beiträge lehrt immer wieder viele neue Details. Diese teile ich dann natürlich mit euch, damit alle etwas davon haben.

Um eine zentrale Plattform zu haben, auf der Themenvorschläge gesammelt werden, habe ich diese Seite hier eingerichtet. In den Kommentaren bitte ich euch neue Themenvorschläge zu schreiben, die euch derzeit brennend interessieren und die mal für einen Beitrag getestet bzw. analysiert werden können.
Auch Diskussionen rund um die Themen sind natürlich ausdrücklich erlaubt.




68 Kommentare bisher »

  1. Eric sagt

    am 23. April 2008 @ 02:02

    Ich fände einen ausführlichen Artikel zu fileservern, loadbalancing, u.ä. Wie geht man vor wenn man Dateien für eine Highperformance Webseite speichern möchte, was sollte man von Anfang an bei der Entwicklung bedenken, usw.

  2. Phate sagt

    am 23. April 2008 @ 08:15

    Hallo,
    durch reinen Zufall war ich vor einigen Tagen über die Frage gestolpert, wie man in CSS Farben angeben kann. Beantworten konnte ich die Frage schnell und problemlos:

    – hexadezimal color:#ff0000;
    – Textform color:red;
    – RGB-Angabe color:rgb(255,0,0);

    Dann bin ich wenige Zeit später durch das FF-AddOn Web-Developer darüber gestolpert, dass FireFox intern augenscheinlich aus allen Angaben RGB-Werte baut, egal was man nun verwendet hat.

    Hat das Auswirkung auf den Aufbau der Seite, wenn ich statt hexadezimal zB den RGB-Wert verwende? Klar ist immer Client- und damit Rechenleistungsabhängig, aber theoretisch dürfte somit die Rechenzeit für das Umbauen in RGB wegfallen, wenn ich direkt RGB verwende, oder?

  3. Jan sagt

    am 23. April 2008 @ 08:49

    @Eric:
    Load Balancing finde ich selbst sehr spannend, kann ich mir durchaus mal einen Artikel darüber vorstellen.

    Was meinst Du aber mit Fileservern? Ein Fileserver ist für mich einfach ein Webserver, auf dessen Dateien man von außen zugreifen kann. Hat an sich erstmal nix mit WWW zu tun. Das würde mir dann zu sehr in Richtung technische Administration gehen. Oder aber ich hab was falsch verstanden, dann erläutere bitte dieses Thema nochmal ein wenig.

    Und was man von Anfang an bedenken sollte, ist natürlich auch sehr allgemein, aber ich werde sehen, ob ich da eine Art "Performance Tuning für Dummies" zusammenstellen kann ;-)

    @Phate:
    Leider weiß ich nicht, wie der Firefox intern mit den unterschiedlichen Farbwert-Definitionen umgeht, aber wenn das so stimmt, würde es durchaus etwas Performance kosten. Ich persänlich arbeite sowieso am liebsten mit den Hex-Werten – daran sollte man sich einfach gewöhnen.
    Und wenn Du unbedingt eine andere Art einsetzt Farben zu kodieren, dann hat das auf den Client einen soooo geringen Performance-Einfluss, dass er es nicht merkt. Für den sind das prinzipiell 3 Multiplikationen und über die musst Du dir keine Gedanken machen (insbesondere wenns auf dem Client ist).

    PS: Schlauerweise hatte mein Blog-Template bis gestern keinen Kommentarbereich unter den statischen Seiten, deshalb konnte bisher hier nicht kommentiert werden. Nun freut es mich aber, dass die Funktion funktioniert und von euch angenommen wird. Weiter so! ;-)

  4. Lukas sagt

    am 8. Mai 2008 @ 00:41

    Wann ist eigentlich eine Abfrage schnell und wann langsam? Wie merke ich, ob man die Seitengenerierung als langsam bezeichnen kann

  5. Jan sagt

    am 8. Mai 2008 @ 09:07

    Oho, die Frage ist ja schon fast philosophisch ;-)

    Ganz einfach: Vergleiche die Seite mit anderen. Google ist beispielsweise schnell. Kaum hat man eine Anfrage getätigt, bekommt man auch schon ne Antwort. Zur Analyse langsamer oder schneller Seiten empfehle ich die FF Extensions YSlow und Firebug.

    Und wenn Du mit Anfragen SQL-Anfragen meinst: Alles, was länger als 4 Sekunden dauert, solltest Du entweder optimieren oder wenn möglich in nem CCronjob zu nachtschlafender Zeit ausführen.

  6. Denis sagt

    am 15. Mai 2008 @ 04:15

    Was ich ein spannendes Thema fände…

    Id des letzten Inserts herausfinden.

    Hier gibt es allgemein zwei Möglichkeiten:

    über SQL: SELECT LAST_INSERT_ID()
    oder über PHP: mysql_insert_id()

    Abgesehen davon dass PHP mit bigint-Spalten ein Problem hat (MySQL dafür mit unsigned bigint ebenfalls…) machen eigentlich beide das selbe, sie liefern die Id des letzten Insers zurück.

    Nur was ist jetzt schneller?
    Oder auch: besser/empfehlenswerter/sicherer?

    :-)

    denn momentan schaut's codeseitig bei mir etwa so aus…

    function MySQL_executeSQL_GetInsertId($sql, $use_database = true)
    {
    MySQL_executeSQL($sql);

    $last_insert_id = $use_database ? MySQL_executeSQLQuery_First('SELECT LAST_INSERT_ID()') : mysql_insert_id();

    return $last_insert_id;
    }

  7. Steffen Jahr sagt

    am 15. Mai 2008 @ 11:57

    Ich fände mal einen Vergleich der Performance bei der Durchführung der Staments bei einem direkten Absetzen gegenüber der prepare-Funktion interessant. Kann sein, dass es da schon etwas gibt, aber ich habe bisher nichts gefunden

    Viele Grüße

    Steffen

    P.S. Tolle Seite :)

  8. Jan sagt

    am 15. Mai 2008 @ 12:02

    Nö, gibts noch nix, nehm ich aber gern auf für einen zukünftigen Beitrag.

  9. chris sagt

    am 5. Juni 2008 @ 03:54

    Vielleicht auch mal,

    maschinennahe Befehle (Schnittstellen) zur Datenspeicherung bei MyISAM, ist ja um einiges schneller.

    und auch mal was zu den MEMORY Tabellen …

  10. Jan sagt

    am 5. Juni 2008 @ 09:06

    @chris: Kannst Du kurz ein Beispiel nennen, was Du unter maschinennahen Befehlen bzw. Schnittstellen verstehst?

    Memory-Speicherengine habe ich bisher tatsächlich sträflich vernachlässigt. Werde ich mich mal drüber informieren, welche Vor- und Nachteile die hat…

  11. Florian sagt

    am 10. Juni 2008 @ 10:23

    Hallo,

    Folgende Situation:
    2 Tabellen. Wenn in die erste Tabelle eine Zeile hinzugefügt wird, soll in der zweiten Tabelle in einer bestimmten Zeile der Wert einer INT-Spalte um eins erhöht werden.

    Nun stell ich mir schon ständig die Frage welche Methode sinnvoller wäre dies zu lösen:
    2 mysql_query's in php (ein insert in die erste tabelle und ein update auf die zweite) oder
    1 mysql_query in php (insert in die erste tabelle) und ein trigger der automatisch bei einem insert in die erste tabelle das update für die zweite tabelle durchführt?

    Dies würd mich brennend interessieren, generell die Thematik "Trigger und Performance" würd ich sehr interessant finden.

  12. reinhard sagt

    am 13. Juni 2008 @ 13:36

    Also ich suche einen Artikel, über das Erstellen von Sitemaps für einen Onlineshop. Die Sitempas/Inhaltsverzeichnisse sollen suchmaschinenfreundlich sein. Der sogenannte mode rewrite reicht nicht aus, um in die Indexe von Google aufgenommen zu werden. es geht ja auch um die Produktbeschreibungen, für die man sich ja Mühe macht. Google will eine xml sitemap. Habe ich auch Google angeboten, der findet aber nur die Überschriften der Kategorien, wovon es bei mir zur Zeit nur 2 gibt. Und ob durch diese Sitemap auch der Inhalt aufgenommen wird ist fraglich. Am besten wäre eine komplette Kopie aus normalen html Seiten, die irgendwie durch Weiterleitung auf die dynamischen Seiten verweisen. (Ich verwende xtcommerce.
    Grüße

  13. workerholic sagt

    am 4. Juli 2008 @ 20:21

    Also erstmal einen dicken lob an die Seite ich lese sie regelmässig, wenn mal etwas neues gibt da ich schon so ein performance junky bin :p
    Ich würde mich über folgende Themen freuen:
    - Es gibt eine Menge von Methoden Verschiedene Sprachen in ein Skript einzubinden ( jeden text via define(); Alle werte in einen großen array halten und via index drauf zugreifen, in eine klasse transformieren und sie dann über einen methodenaufruf abfragen, und nochmal mit den in array halten wo sie $key => "text text %d %d" gehalten wird und dann via strpos die zeichen ersetzt werden )

    - error_handling ( thorw Exception() oder ne eigene klasse die logs hält und dann abgerufen wird, oder direkte ausgabe von errors… if(!xy) echo … else weiter… )

    - geschwindigkeiten zwischen include, include_once, require, require_once

    und was mich richtig interessiert ist folgendes szenario: normale site request, die die seite komplett parsen und dann cacha, gzippen was auch immer, und einmal wo die seite teilweise geladen wird und der rest via ajax geladen wird! was mich hierbei interessiert ist das die netzwerkauslastung und die die performance beim rendern! weil ist klar das man wenn man weniger pasren muss es schneller ist, ajax replys kann man ja auch cachen und wiederverwenden etc….
    aber es geht darum das die ajax request eine andere charakteristischen netzwerkauslastung machen wie normale request… ich könnte mir vorstellen, wenn man vieles via ajax macht das der server mehr ausgelastet ist, weil der zwischendurch noch viel arbeiten muss, zwar kleinere sachen aber mehr…

    ich hoffe einige themen könntet ihr mal aufgreifen und checken ;-)

  14. workerholic sagt

    am 4. Juli 2008 @ 20:32

    ach nochwas ;-) ich würd mich auch wahnsinnig über load balacing freuen, hatte schonmal was interessantes zu dem thema gefunden, wenn ich mich recht errinere war es was mit Spread-Ring in Clustern….

  15. workerholic sagt

    am 4. Juli 2008 @ 21:03

    glaube jetzt gehts los :p hab nochwas ;-)

    wie kann man relativ perfomant statische arrays definieren?!

    ähnlich wie man mit zahlen und strings es via define macht, könnte ich mir vorstellen eine klasse zu erstellen und diese dann eine variable static $xy = array(-…); zu definieren vorteil, array unveränderbar…

  16. pm sagt

    am 6. Juli 2008 @ 11:49

    Was mich interessieren würde ist die Performance von Smarty. Die Macher loben immer die sehr gute Performance dieses Template-Enginges. Aber stimmt das auch? Vielleicht im Vergleich zu anderen Templates oder auch im Vergleich zu einem "normalen" PHP/HTML Mix.

  17. avedo sagt

    am 20. Juli 2008 @ 01:51

    Ich fände es sehr interessant, wenn mal etwas über verschiedene Such-Algorithmen und die mögliche Strukturierung einer Search Engine erscheinen würde.
    MfG, Andy

  18. ZodiacXP sagt

    am 3. August 2008 @ 14:21

    Es wäre auch mal interessant wieviel Speicher bei den einzelnen Algos belegt wird. So gibt es zum Beispiel bei dem auslesen eines Arrays und dessen Keys mit einer for-Schleife einen Algo der genau so schnell ist und weniger Speicher verbraucht.
    Eine do-Schleife mit while (next($aFoo)) und innen key($aFoo) mit current($aFoo)

  19. Jan sagt

    am 3. August 2008 @ 16:59

    Tests des Speicherverbrauchs kann ich irgendwie schlecht messen. Zumindest misst das Apache Benchmark Tool diesen nicht. Hast Du eine Idee, wie ich den aufzeichnen könnte?

  20. ZodiacXP sagt

    am 5. August 2008 @ 01:41

    Tut mir leid, wüsste leider nur wie man das mit Overhead vielleicht hinkriegt. PHP: Differenz von memory_get_usage(). Ein einzelner Aufruf des Testscripts reicht ja, wobei man drauf achten müsste, dass das echo (zum ausgeben der Differenz oder des belegten Speichers) selbst auch ein paar Byte wegnimmt. Zudem das Problem ob die SQL-Querys mit drin sind. Oha! Die Probleme stapeln sich in meinem Kopf, aber vielleicht ist es ja doch Möglich.

  21. ZodiacXP sagt

    am 5. August 2008 @ 21:29

    Ach ich find die Seite toll. Mir fallen so viele schöne Sachen ein.

    Aber PHP verarscht mich – glaub ich. Aber wenn's stimmt wäre es ein Wunder.

    session_set_cookie_params() : 0,0018 s (gemittelt)

    setcookie() mit session_name direkt als string (man weis ihn ja) und session_id : 0,0010 s (gemittelt)

  22. *Nerv* sagt

    am 7. August 2008 @ 16:16

    preg_match_all("/{(.*)}/", $sHtm, $a) um z.B. Template-Variablen zu finden wie {foo}, oder:

    $a = explode("{", $sHtm);
    $i = count($a)-1;
    for ($j = $i; $j != 0; $j–) {
    $s = substr($a[$j], 0, strpos($a[$j], "}"));
    $a[] = $s;
    }

  23. Mala sagt

    am 11. August 2008 @ 00:52

    Hallo,

    ich fände einen Beitrag zum richtigen Einsatz von Locks und Transaktionen bei Nested Sets wichtig (das wird gerne mal unter den Tisch gekehrt, weil man davon ausgeht, dass niemals mehr als ein Benutzer gleichzeitig z.b. einen Knoten im selben Baum einfügen will.)

    MfG, Martin

  24. Jan sagt

    am 11. August 2008 @ 12:52

    @Mala: Und worauf sol da eingegangen werden – insbesondere aus performance-technischer Sicht? Dass Locks wichtig sind, hast Du ja bereits gesagt, aber viel mehr würde mir zu dem Thema auch nicht einfallen.

  25. Mala sagt

    am 11. August 2008 @ 15:37

    @Jan:

    Naja, performance-technisch ist das recht uninteressant, aber nachdem dein Eintrag im Blog wohl eine der wenigen Anlaufstellen für Nested Sets auf deutsch ist, wäre ein zumindest ein Hinweis im genannten Artikel angebracht. Vielleicht schreib ich selbst mal einen oder zwei Absätze und lass dir das zukommen, wenn ich mir einen ordentlichen Blick über das Thema verschafft habe.

  26. Jan sagt

    am 11. August 2008 @ 17:25

    Jo, wenn Du da kurz was zu sagen könntest, wäre toll. Ich wüsste jetzt auch nicht mehr dazu und nen extra Beitrag würde es vom Umfang nicht rechtfertigen.

    Danke Dir im Voraus.

  27. Auslesen der zuletzt eingefügten ID (auto increment) » Beitrag » PHP Performance sagt

    am 2. September 2008 @ 20:03

    [...] Themenvorschläge [...]

  28. h4 sagt

    am 3. September 2008 @ 07:37

    Hi,

    könntest Du evt. mal einen Vergleich zwischen "PDO" und "mysql_* Functionen" machen? Zwecks Performance und Handling?

    btw. super Seite!

    Mfg h4

  29. ZodiacXP sagt

    am 11. September 2008 @ 12:54

    Ein Tip:
    Wenn du bei deinem Suchfeld das Attribut name="pattern" setzt sieht jeder dort auch die Suchbegriffe die er mal bei php.net eingegeben hat.

    Ein Vorschlag:
    Ist session_set_save_handler() schneller? In fast allen Tutorials dazu wird geschrieben es sei schneller, bietet mehr Kontrolle, ist Sicherer,… das übliche Geplänkel.

  30. handyaner sagt

    am 27. September 2008 @ 11:28

    hallo

    ich hätte da auch einen vorschlag.
    ich stehe vor dem problem eine funktion zu schreiben, die ähnliche titel anzeigt. dafür gibt es verschiedene möglichkeiten, die mir bekannt sind:
    levenstein()
    soundex()
    similar_text()
    metaphone()

    nun würde mich interesieren, welche an perfomantesten ist

  31. Jan sagt

    am 27. September 2008 @ 12:08

    @handyaner: Mich auch ;-)

    Das Problem ist, dass die Funktion soundex() auf die englische Sprache zugeschnitten ist, deshalb bringt die im Deutschen unzufriedenstellende Ergebnisse (nicht immer aber manchmal).

    So etwas wäre vielleicht gut für ne Gemeinschaftsentwicklung im Rahmen des sich in Arbeit befindlichen Forums.

  32. GhostGambler sagt

    am 27. September 2008 @ 13:46

    Im "live"-Betrieb ist denke ich sowieso gar keine der Funktionen zu empfehlen…

  33. Ramegni sagt

    am 30. September 2008 @ 13:47

    Ich beschäftige mich der Frage, was im Einsatz sinnvoller wäre: Ein REPLACE INTO oder INSERT INTO … ON DUPLICATE KEY UPDATE. Und dann würde mich interessieren, wie stark sich diese beiden SQLs von UPDATE und INSERT betreffend Laufzeit unterscheiden.

  34. Forgi sagt

    am 20. Oktober 2008 @ 00:21

    Wie währe es den, wenn man mal testen würde ob z.B. require "blub.php"; oder require("blub.php"); schneller ist? Also mit oder ohne ()
    oder ob if(1==1) … oder if(1==1) { … }
    Grüße,
    Forgi

  35. Ichi sagt

    am 21. Oktober 2008 @ 21:21

    Hi,

    ich hoffe ich drücke mich jetzt richtig aus.

    Mich würde interessieren wie man eine performante Suche ansatzweise realisiert mit großen Datenbanken. Wer jetzt beispielsweise das neue phpbb3.0 kennt, weiß vielleicht das man dort 2 Möglichkeiten hat, einmal zwischen "fulltext native" und "fulltext mysql". (Setze ich nicht ein, wollte nur mal gucken wie es funktioniert…) Und ob es noch andere bessere Lösungen gibt, die möglichst schnell sind. Sprengt vielleicht den Rahmen des Blogs?

    Wollte mich noch für diesen Blog bedanken!

    Gruß Ichi

  36. GhostGambler sagt

    am 22. Oktober 2008 @ 22:35

    Sphinx
    apache lucene

    Kommt wohl wie immer aufs Umfeld an~

  37. ichi sagt

    am 22. Oktober 2008 @ 23:10

    @Ghost, danke, ich habe nur einen gemanagten und das will ich auch so lassen, weil ich den fachlich nur zu 30% bedienen könnte.

    Wie macht das eigentlich Google, die haben verschiedene Server die Requests abarbeiten, aber speichern die da was zwischen, bei populären Suchbegriffen, teilen sie die Datenbanken in A-Z auf?

    "Ergebnisse 1 – 10 von ungefähr 440.000 für apache lucene. (0,09 Sekunden)"

    Wie sieht das hier mit dem Forum aus, @admin kannst du nicht mal Testweise bbpress einbauen, benutze ich zwar nicht, aber ist ne coole wordpresslösung :-)

    Grüße ichi

  38. Jan sagt

    am 23. Oktober 2008 @ 08:15

    Forum ist in Arbeit und wird schon sehr bald kommen.

  39. Timo sagt

    am 5. November 2008 @ 21:35

    Mich würde es freuen, einen Artikel über Konfigurations Daten als ini File oder in der DB was ist bei lesen schneller, was ist beim schreiben Schneller?

  40. Psaniko sagt

    am 6. November 2008 @ 10:16

    Was ich interessant fände, wäre ein Artikel über die Performance bei größeren Applications, bzw. Frameworks.
    Timo's Vorschlag (s.o.) würde mich auch interessieren, da ich selbst grade an einem Framework arbeite.

  41. PHP-Dateien in andere Scripts einbinden » Beitrag » PHP Performance sagt

    am 26. November 2008 @ 10:59

    [...] Themenvorschläge [...]

  42. Forgi sagt

    am 27. November 2008 @ 17:38

    wie währe es wenn mal mysql und mysqli getestet wird…? zusätzlich dann noch die oop klasse mysqli…?

  43. Danilo sagt

    am 8. Dezember 2008 @ 19:16

    ich wollte soeben genau das selbe requesten wie forgi über mir ;) wär mal einen post wert.

  44. workerholic sagt

    am 21. Januar 2009 @ 00:40

    Wie isset den mit MySQL-Suche?
    Interessant wäre natürlich LIKE und MATCH AGAINST ?

  45. Robert Westenkirchner sagt

    am 22. Januar 2009 @ 09:20

    Infos zur Volltext-Suche: Hab die bei LinkMatrix realisiert. Hab viele Buecher zu PHP + MySQL aber die schweigen sich fast alle zur MySQL Volltext-Suche aus. Einzig drei Seiten in "MySQL Tutorial – Die kompakte Einfuehrung in die Arbeit mit MySQL" (die Reihe "MySQL Press" von Addison-Wesley, also von den Machern direkt, Wissen aus erste Hand). Seite 155 bis 158.

    LinkMatrix verfuegt ueber eingebautes, oeffentliches Benchmarking mit Zielvorgaben, d.h. rechts unten wird immer der Speed dieser Seite eingeblendet. Unter 50 Millisekunden in gruen, ueber 50 ms in rot.

    Volltextsuche funzt nur auf Tabellen vom Typ MyISAM. In der Tabelle muss man die Felder festlegen, auf der die Volltextsuche angewendet werden soll, beispielsweise title, body.

    Abfragen dann mit:

    SELECT title
    FROM article
    WHERE MATCH (title,body)
    AGAINST ('PHP MySQL Ajax Linkmatrix')

    MySQL ermittelt automatisch intern einen sog. Relevanzwert fuer die automatische Sortierung.
    AS RELEVANCE

    Mit diesem automatischen Ranking bin ich nicht gluecklich, daher hab ich mir mein eigenes Ranking gebastelt…

    Leider werden Woerter, die kuerzer als vier Buchstaben sind, nicht gefunden. Also nach PHP suchen bringt damit null Treffer, kann man aber mit der Variablen ft_min_word_len abaendertn.

    Stop-Woerter sind in MATCH…AGAINST… bereits eingebaut, z.B. "soon", "again" usw. Man kann sich auch selbst Stop-Wortlisten erstellen z.B. fuer die deutsche Sprache.

    Performanter und flexibler und einfacher ist vor der Suche in den Suchwoertern die Stop-Woerter rauszufiltern. Ich mach das so bei der Linkmatrix Volltextsuche. Bei Einwortsuchen verwende ich klassische LIKE %searchword%. Die eingebaute MySQL Volltextsuche ist laut obigem MySQL Press Buch sehr performant bei Datenbanken unter 1.000.000 Datensaetze. Dann kann es in die Knie gehen. Da LIKE immer den gesamten Text durchkaemmen muss, ist das ziemlich langsam. Die Volltextsuche sucht in einer optimierten speziellen Indexdatei, das geht messbar schneller.

    Das Benchmarking bei LinkMatrix ergab:

    - bei Einwortsuchen mit LIKE: 26 ms
    - bei Mehrwortsuchen mit MATCH..AGAINST: 12 ms

    (gleiche Suchbegriffe)

    LinkMatrix cached alle Suchergebnisse, daher wird "PHP" meist in 6 ms gefunden. Performant wirds mit gecachten Suchanfragen.

    Richtig performant wird es, wenn man extra Tabellen mit Suchbegriffen (die muss man erstmal haben) und Referenzen auf die Treffer mit nem guten Ranking Algorithmus verbindet. Jede Suchmaschine macht das so. Es gibt nen guten, freien Artikel (GNU Free Documentation License) dazu:
    http://www.linkmatrix.de/index.php?education=search&search=Volltextsuche

    Gleich erster Treffer. Dort findet man auch Stop-Wortlisten fuer deutsch und englisch.

    Bei Interesse schreib ich eine ausfuehrlichere Anleitung zum Thema Volltextsuche. Einfach bei mir melden.

    Hoffe das hilft ein wenig.

    Viel Spass beim Ausprobieren!

  46. Jan sagt

    am 22. Januar 2009 @ 09:47

    Hallo Robert,
    ein sehr schöner und informationsreicher Kommentar.
    Ich bin ja immer auf der Suche nach Leuten, die hier im Blog mitschreiben. Und da Du es mir so nett anbietest, würde ich gern zugreifen. Hättest Du Interesse Deinen Kommentar in einen eigenen Beitrag hier im Blog zu gießen? Am besten Du meldest Dich per Mail bei mir -> siehe Impressum

  47. workerholic sagt

    am 22. Januar 2009 @ 10:16

    Jungs das ist eine Super Idee, da ich wirklich schon lange dannach suche was mir performance von suchanfragen etwas bescheunigt! Wenn ihr schon dabei seid so einen Artikel zu machen, könnt ihr ja noch die suche mit joins gleich mitvergleichen :-)

  48. Timo sagt

    am 3. Februar 2009 @ 22:11

    Mich würde es freuen, einen Artikel über Konfigurations Daten als ini File oder in der DB was ist bei lesen schneller, was ist beim schreiben Schneller?

    *push* Sorry

  49. ms sagt

    am 18. Februar 2009 @ 15:02

    Einfache Sache:

    Und zwar sieht man oft das man Listen anhand einer Spalte sortieren kann, indem man den Spaltenkopf anklickt. Die Art der Sortierung erscheint als Pfeil daneben. Wie löst man das?

    1. Variante (Variable variablen)

    $spalte1 = $spalte2 = "blank.gif";
    $$_GET["order_field"] = $_GET["order_direction"] . ".gif";
    echo 'Spalte1 … usw';

    2. Variante (mehrere Bedingungen)

    if ($_GET["order_field"] != "DieseSpalte")
    echo ";
    else
    echo ";

    Vor allem: Was ist im Zusammenhang mit der passenden SQL-Abfrage am schnellsten?

  50. workerholic sagt

    am 24. Februar 2009 @ 09:19

    Huhu, ich nerv mal wieder ein bischen ;-)
    Folgendes:
    Fehler Abfangen von eine Methode die nichts existiert, folgendes könnte man testen:
    - method_exists( ); Überprüfen ob eine Methode in der Klasse existiert
    - __call(); Aufrufen, wenn keine methode vorhanden ist, wird __call(); ausgegeben
    - Exception // try catch Abfangen

    Mich würde interessiere was eine Bessere Performance bietet, da ich bei einige Kern Komponenten öffter method_exists verwende und dadurch habe ich das gefühl, dass das System doch ein bischen langsamer geladen wird, als wenn ich die Überprüfung bei mir abschalte. Wäre über einen Kurzen Test dankbar!

  51. Sven sagt

    am 24. April 2009 @ 10:47

    Hallo,

    ich wäre für eine ausführliche Übersicht wie man Variablen auf Ihr vorhandensein testet.

    Z.b habe ich festgestellt dass

    if(isset($_GET['variable)) && $_GET['variable'] == 'myvalue)

    schneller ist als ohne isset….

    Allerdings nur wenn die Variable nicht existiert.

    wie ist denn der beste Weg an die Geschwindigkeit ohne isset heranzukommen wenn die Variable existiert?

    wenn man außerhalb eine for-Schleife auf isset testet, kommt man glaub ich schon sehr nah ran.

    Also ich wäre begeistert hier man eine schöne Aufstellung zu bekommen!

  52. Jan sagt

    am 24. April 2009 @ 10:58

    @Sven: Hilft Dir folgender Beitrag weiter?
    http://phpperformance.de/wenn-ein-string-false-ist/

  53. Miriam sagt

    am 3. Mai 2009 @ 20:35

    Hi,
    wenn man die zuladenden Dateien einer Website auf 2 Domains splittet, kann der User ja quasi von 2 Servern gleichzeitig runterladen. Da normalerweise die Files nacheinander heruntergeladen werden.

    Beispiel:
    beispiel.com (da liegen nur die HTML, PHP Dateien)
    media.beispiel.com (dort liegen die CSS, JS, Bilder usw.)

    Das Problem ist nur, dass dadurch auch ZWEI DNS Abfragen getätigt werden und somit viel Speed verloren geht.
    Irgendwo hab ich gelesen, dass man das irgendwie mit OpenDNS beheben könnte. Leider fand ich dazu keine Anleitung etc. wie man das anstellen kann.

    Es wäre somit sehr hilfreich, wenn du diese Praktik mal erklären könntest.

  54. Denis sagt

    am 3. Mai 2009 @ 21:32

    Hallo Miriam,

    > quasi von 2 Servern gleichzeitig runterladen

    Wenn du Probleme mit "ausgelasteten" Servern haben solltest oder allgemein nur statische und dynamische Inhalte getrennt ausliefern möchtest, würde ich dir vielmehr dazu raten, diese unter der selben Domain, aber per getrenntem Load-Balancing doch über mehrere Server verteilt auszuliefern.

    Beispiel:

    http://example.org/* => geht an die Server web01, web02
    *aber*
    http://example.org/static/* => geht an static01, static02, static03

    Das lässt sich beispielsweise mit Lighttpd realisieren.

    So mache ich dieses bei wirklich großen Projekten bei uns, und dies hat sich bisher sehr bewährt. Zu einer eigenen (Sub-)Domain bei statischen Inhalten würde ich erst dann greifen wenn die DNS-Server an sich mit den Anfragen so überlastet sind, dass man diesen auf dem Weg etwas Last abnehmen kann. (dann aber auf Kosten der Ladegeschwindigkeit, da 2 DNS-Anfragen)

    Alternativ könntest du natürlich statisches auch über die reine IP ausliefern, kwick.de macht dies zub Beispiel so. Finde ich persönlich aber wenig elegant. (auch ein User verschickt mal 'nen Direktlink zum Bild)

    Um noch mal auf das Ursprungsposting zurückzukommen…
    > dass man das irgendwie mit OpenDNS beheben könnte
    das kann ich mir nicht vorstellen – denn OpenDNS müsste dann ja zum einen JEDER USER von dir auf seinem PC als Nameserver eintragen, und zum andern – dann sind es konzeptbedingt ja immer noch zwei Anfragen.
    Wobei, schneller könnte es sein, denn OpenDNS bedient ja auch nicht das ganze Internet. :)
    Aber das müsste jeder User dann selbst einstellen.

    Viele Grüße,
    Denis

  55. Miriam sagt

    am 5. Mai 2009 @ 01:04

    Hi,
    danke für Deine ausführliche Erklärung.
    Meine Seiten sind nur (noch) nicht so groß das man überhaupt über ein Server nachdenken muss. Ich möchte eben durch eine Subdomain, wie es zB auch kwick.de mit "img.kwick.de" macht, statischen Inhalt von den PHP&HTML Seiten trennen. Daraus erhoffe ich mir eine erhöhte Ladegeschwindigkeit der Website.

    Vielleicht habe ich mich zu verkorkst ausgedrückt. Mein eigentliches Anliegen bestand darin, dass Problem mit den "2 DNS-Anfragen" zu beheben/verbessern/lösen. Ich mein Google, Ebay, Yahoo usw. nutzen diese "Taktik" ja auch mit Erfolg. Klar die haben auch CDN und viele Server, jedoch finden doch da auch immer mehrere DNS-Anfragen statt, oder nicht?. Daher muss es doch eine Lösung geben.

    Aus meiner noch unerfahrenen Sicht sollte doch folgende Theorie umsetzbar sein:
    Wenn die Subdomain zur selben IP wie die eigentliche Domain "linkt", dann mache kein weiteren DNS-Abfrage. Sonst schon. Kann man das nicht irgendwie Client mäßig lösen durch ein Cookie, der diese Informationen mitliefert oder so etwas in der Richtung.

    Bitte seht nach, dass meine Kenntnisse (noch) nicht ausreichen, um euch Mein Problem mit Fachtermini zu erläutern.

    Danke
    Miriam

  56. MTZ sagt

    am 27. Juni 2009 @ 00:26

    Hallo!

    Ich bin gerade am Planen eines neuen PHP-Projektes. Uns stellt sich gerade die Frage, ob wir ein Framework verwenden sollen oder nicht…

    Mich würde daher ein Pro/Contra-Framework Beitrag interessieren sowie eine Performance-Analyse der gängigsten. (ZEND Framework, CakePHP,…)

    Vielen Dank!
    Matthias

  57. workerholic sagt

    am 1. Juli 2009 @ 17:34

    *nerv* *nerv*
    Folgende Ausgangssituation:
    Ich muss auf einen Datenbestand von über 4000 Zeilen aus MySQL zurückgreifen. ( 4 App-Server greifen auf 1 MySQL server zu) bei fast jede Seite, jetzt habe ich mir folgendes überlegt:
    MySQL einmal laden und diese als XML auf dem Lokalen Server speichern und diese dann bei den Restlichen aufrufen aus der XML lesen: Problem Geschwindigkeit:
    - obwohl wenn ich das Query aus MySQL hole bekomme ich das in ungefähr 0.08 Sekunden zurück (alle Zeilen)
    - wenn ich das aus der XML Lade dauert das ganze um die 1.62 Sekunden.
    Jetzt ist natürlich meine Frage, wie kann ich das auslesen der XML Datei beschleunigen?

    Problem zwei, wenn Dateien auf dem App-Server hochgeladen werden, werden diese mit einem Datenserver Synchronisiert und werden Lokal gelöscht. Zur Zeit wird das mit FTP ( ftp_connect….) gemacht, gibt es da Möglichkeiten diese Synchronisation zu beschleunigen?

    Internationalisierung & Versionierung:
    Ich liste Alle Elemente aus dem bereich auf wo man sich gerade befindet: in der Sprache die der Benutzer für sich definiert hat, falls diese nicht vorhanden ist, wird die Sprachdatei angezeigt die für diese inhalte vorhanden sind angezeigt. und natürlich in der letzten Version die vorhanden ist, so das immer die aktuelle version angezeigt wird. Das Problem bei der Sache ist das natürlich diese Abfrage sehr langsam ist und da wollte ich fragen ob ihr ne idee habt diesen query zu beschleunigen:

    SELECT con.content AS id,con.*,trans.trans_index,trans.title,trans.excerpt,trans.description,trans.content,trans.url,trans.meta_description,trans.meta_tags,trans.version,trans.created_alias
    FROM ".nx::$objTabs->get( "content" )." con, ".nx::$objTabs->get( "translator" )." trans
    WHERE con.visibility='public' AND con.parent_content='0' AND con.checkInDateget( "lang_index" )."'
    AND trans.version=(SELECT MAX(tm.version) FROM ".nx::$objTabs->get( "translator" )." tm WHERE tm.lang_index='".nx::$objUser->get( "lang_index" )."' AND tm.trans_key=trans.trans_key ) )
    )
    OR ( trans.lang_index=con.lang_index
    AND trans.version=(SELECT MAX(tm.version) FROM ".nx::$objTabs->get( "translator" )." tm WHERE tm.lang_index=con.lang_index AND tm.trans_key=trans.trans_key ) ) )
    ORDER BY con.norder ASC, con.checkInDate ASC, trans.title ASC";

  58. pSub sagt

    am 2. Juli 2009 @ 14:29

    Hallo!
    Ich plane gerade ein PHP/MySQL-Projekt und stehe vor der Entscheidung ob ich mysqli oder PDO nutzen soll. Wo seht ihr Vor- bzw. Nachteile und gibt es Geschwindigkeitsunterschiede?

    Vielen Dank
    pSub

  59. Joscha Prasse sagt

    am 4. Juli 2009 @ 06:02

    Ich schließe ich Eric bzgl. des Loadbalancing bei Hightraffic Webseiten an

    Sehr schöner Blog, weiter so!

  60. aso sagt

    am 29. Juli 2009 @ 13:41

    Servus,

    hätte eine Frage bzgl. der HTTP-Requests. Es heißt ja immer man solle diese minimieren. Gerade bei Stylesheets find ich es aber auf Dauer unübersichtlich alles in einer Datei zu haben.
    Nun gibt es ja die Möglichkeit im Stylesheet per @import andere Dateien einzubinden.
    Nun die Frage: Werden diese auch als HTTP-Request behandelt? Ist es schneller/langsamer? Vor/Nachteile etc.

    mfg

  61. Jan sagt

    am 29. Juli 2009 @ 15:05

    @aso: Ja, für @import sind genauso zusätzliche HTTP-Requests erforderlich wie wenn Du alle Stylesheet-Dateien per link-Tag angibst.

    Aber ich empfehle Dir unseren Artikel http://phpperformance.de/optimierung-externer-client-ressourcen-durch-ant-deploy-prozess/

  62. andreas sagt

    am 31. Juli 2009 @ 22:19

    Hallo!

    Mein Themenvorschlag, der mich übrigens selbst brennend interessiert wäre ein Benchmark zu verschiedenen Funktionen, die die Existenz von Dateien zb. Bildern überprüfen.

    Es gibt zig Lösungsansätze für diese Kontrollfunktion ich glaube gerade deshalb könnte dieses Thema interessant sein :

    - get_headers
    - curl
    - fsockopen
    - fopen :)
    - file_exists
    - zudem ist es auch möglich mit javascript-ajax diese Kontrolle durchzuführen. Allerdings bin ich da nicht so bewandert.

    lg
    andreas

  63. Andreas sagt

    am 27. Oktober 2009 @ 15:59

    Hallo,

    mich würde mal interessieren, wie so der Performance-Unterschied in verschiedenen Anwendungsbereichen bei folgenden Server-Kombinationen ist:

    Windows, Internet Information Services Webserver, PHP5
    Windows, Apache Webserver, PHP5
    Linux, Apache Webserver, PHP5

    Vielleicht auch noch CGI und mod_php Variante. Ist natürlich ein großes Projekt, wäre aber sicher nicht nur für mich interessant.

  64. Ren van Hoek sagt

    am 10. November 2009 @ 04:07

    Hallo,

    mich würde mal der Geschwindigkeitsunterschied zwischen einem verschachtelten if/else, if/elseif/else, einem switch/case Konstrukt und dem tenären Operator interessieren.

    Ich habe ich einem älteren Benchmark auf einer anderen Seite mal gelesen das der tenäre Operator wohl deutlich am schnellsten sein soll.

  65. Tim sagt

    am 9. Dezember 2009 @ 11:20

    Hallo,

    mich würde es einmal interessieren, wie viel (wenn überhaupt) schneller caching ist, wenn man immer auf html-Dateien verlinkt.

    Diese werden dann ja vom Webserver ausgeliefert, was schneller sein sollte als wenn man erst php anschmeißt. Die 404er wenn eine Datei mal gelöscht wurde weil sie nicht mehr aktuell ist, fängt man dann mit PHP ab und erzugt die Datei.

    Desweiteren würde mich der Performanceunterschied zwischen einem absoluten Include und direkt in der Datei niedergeschriebenem Code interessieren.

  66. martin sagt

    am 22. Dezember 2009 @ 20:45

    Mich würde interessieren, wie man Webseiten auf große Besucheranstürme vorbereitet, also wie man die Skripte gestaltet, wem man mit mehreren Servern/Datenbanken arbeiten muss.

  67. workerholic sagt

    am 20. Januar 2010 @ 10:48

    wird mal zeit für neue beiträge ;-)

  68. Alex sagt

    am 4. März 2010 @ 21:17

    Ein Vergleich zu verschiedenen Methoden die existens einer Datei zu Überprüfen (Kommt ja häufiger vor) wäre vll. mal interessant.
    z.B. file_exists() vs try..catch

    vg

Komentar RSS · TrackBack URI

Hinterlasse einen Kommentar

Name: (erforderlich)

eMail: (erforderlich)

Website:

Kommentar: