mmofacts.com

Was ich gerne früher gewußt hätte ...

gepostet vor 19 Jahre, 11 Monate von neit
Ich meine wir hatten den Thread schonmal im alten Forum, war finde ich ne lustige Idee und würde ich gerne fortsetzen ....

Ich habe z.B. Ewigkeiten gebraucht um zu merken das man in PHP4 Variablen mithilfe eines vorangestellten "&" als Referenzen statt als Kopie z.B. an Funktionen weitergeben kann. Inzwischen ist das zwar egal da PHP5 das automatisch macht aber viele werden sicherlich noch nicht upgegraded haben.
gepostet vor 19 Jahre, 11 Monate von Bierchen
Macht es sicherhaltshalber (wegen der Kompatibilität) trotzdem!
gepostet vor 19 Jahre, 11 Monate von Krisch
Das gilt nur für Objekte, andere Parameter werden natürlich weiter per Wert übergeben. Und bei Objekten ist das bei den meisten Sprachen so, dass diese per Referenz übergeben werden.
gepostet vor 19 Jahre, 11 Monate von lazlow
--OOPS--
gepostet vor 19 Jahre, 11 Monate von TheUndeadable
Hätte ich gewusst, dass die Integration von Java oder C# in einem Webserver so leicht geht, hätte ich mir nie PHP angeschaut.
gepostet vor 19 Jahre, 11 Monate von None
TuD: Hihi
Die frage ist nur. Bist du sicher? Ich mein anfangen tut man mit billig bis gratis hosts...
Und die sind nun mal ned Java / C#

Gruss
gepostet vor 19 Jahre, 11 Monate von TheUndeadable
Mein 'Gratishost' sitzt bei mir zu Hause an wahnsinnigen 128 kBit Upstream, der macht, was ich will und mein 'Bezahlhost' auf der Arbeit ist schon der Lage was ordentliches auszuführen...
gepostet vor 19 Jahre, 11 Monate von Bierchen
Der Vorteil von PHP ist eindeutig das es von vornherein für web "anwendungen" gedacht war.

JAVA/J++/J#/C# etc. kann man dafür verwenden, in einzelfällen ist es sogar besser, aber PHP hat doch viele unschlagbare Vorteile.
Welche das sind, muss jeder für sich selber entscheiden.

Mein absoluter Favorit ist die Variablengültigkeit
gepostet vor 19 Jahre, 11 Monate von Qmaster
Hätte ich gewusst dass PHP so ein S****ß ist, hätte ich meine Studienarbeit direkt in einer vernünftigen Programmiersprache angefangen z.B JAVA
gepostet vor 19 Jahre, 11 Monate von feuerfuchs
Original von Bierchen
Der Vorteil von PHP ist eindeutig das es von vornherein für web "anwendungen" gedacht war.

JAVA/J++/J#/C# etc. kann man dafür verwenden, in einzelfällen ist es sogar besser, aber PHP hat doch viele unschlagbare Vorteile.
Welche das sind, muss jeder für sich selber entscheiden.

Mein absoluter Favorit ist die Variablengültigkeit


Mich würde jetzt mal interessieren, welche der viele unschlagbare Vorteile Du in PHP siehst?

Die Variablengültigkeit erkaufst Du Dir mit internem Casten, welches Rechenzeit benötigt.

Ich denke, das es wichtiger ist, welche Ziele man für seine Anwendung hat.
Danach sollte man die Programmiersprache wählen.
gepostet vor 19 Jahre, 11 Monate von Gambler
Ich denke eine gute Mischung ist für die meisten Games die richtige Wahl. Was nicht überprüft werden muss oder optische Effekte mit Java. Frontend mit PHP/ASP oder auch C# und alles was im Hintergrund läuft mit einer möglichst schnellen Sprache wie C++. Die Wahl sollte jeder nach seinen Fähigkeiten und Vorlieben vornehmen.
gepostet vor 19 Jahre, 6 Monate von Freshman
@ Bierchen:

Php hat vorteile?

Nein, hat es nicht, es hat sogar nur nachteile c++ gegenüber, auch in
sachen webprogrammierung, WENN man erstmal etwas vorarbeit
geleistet hat.

Man muss natürlich eine Klasse haben, die einem POSt und GET befehle
auslesen kann, Formulare verwalten kann, und mit datenbanken
komuniziert. Auch Cookies und Sessions sollte man mit einbauen.

Sobald man content txpe HTML gesetzt hat, geht jede ausgabe per
printf ( cout ) direkt auf die html seite.

Da muss man zwar etwas Vorarbeit leisten, bis man das ganze am laufen
hat, aber dann geht es steil vorran.


Ich schreibe ein onlinespiel in c++, und mekre die vorteile auf den Fuß.
Habt ihr euch bei php nicht auch mal einen schönen debugger
gewünscht? Oder die freiheit des funtktionsumfangs wie bei c++?

Vor allem das debuggen ist ein großer vorteil bei c++, gegenüber PHP,
denn langes suchen kann einen viel Zeit kosten. Oder wir haben den Fall,
dass ein weiterer Programmierer hinzukommt, der nimmt sich die
main() und geht von da an nach unten im debugger, und schon läuft er
schritt für schritt live durch das programm ( spiel )


Zum Thema variblengültigkeit........ muss ich was sagen, oder reicht
es, dass es die in so gut wie jeder programmiersprache gibt, man
darf nie vergessen, dass so gut wie alle Programmiersprachen sich
als vorbild c genommen haben ( 1972 entwikelt )


du könntest jetzt sagen, dass Assembler dies nicht hat, aber das zieht
nicht


Fazit:

wer ein spiel, oder eine etwas rechenlastigere seite aufbauen will, der
sollte sich c++ mal anschauen, dann kann man nämlich
sachen wie kmapfsystem, ressourcen, usw progblemlos immer
beim klicken der user ausführen, und die cpu merkt das nichtmal

wer allerdings nur kleine seiten aufbauen will, dem sei PHP und Javascript
näher gelegt, denn diese Sprachen sind anfang viel schneller einzubauen,
das der Apache diese Sprachen ( PHP ) schon beherscht.

wenn man noch nicht Programmieren kann, dann ist das ganze eh
abzuwägen, denn c++ ist als erste programmiersprache ohne Hilfe
sehr schwer, und es geben viele auf. da wäre dann auch PHP
angebraucht, da man dort nicht mit variblentypen usw. kämpfen muss.


mfg

Freshman
gepostet vor 19 Jahre, 6 Monate von Gambler
Da kann ich mich nur anschliessen.
Allerdings das mit dem PHP Debuggen ist so nicht korrekt.
Der Zend Debugger liefert mir sogar mehr Infos wie mein C++ Debugger.
Allerdings kostet der halt.
gepostet vor 19 Jahre, 6 Monate von Freshman
mehr infos als Visual Studio???

was geht denn noch mehr als assemblercode und ausrufliste???


ps.: ich lasse mich immer gerne eines besseren belehren

edit: du hast mein debugger geschrieben, sorry dachte ein debugger.
was nutzt du denn?
gepostet vor 19 Jahre, 6 Monate von Gambler
Borland, Visual oder Bloodshed.
Ja aber was nützt mir der Assambler Code? Damit kann ich ehrlichgesagt überhaupt nix anfangen.
Manch andere vielleicht schon aber ich denk mal der Großteil eher nicht. Hab zwar auch schon Assamblerprogrammierung 2 Jahre gemacht aber ich kann da trotzdem nicht wirklich was im Debugging erkennen.
gepostet vor 19 Jahre, 6 Monate von Freshman
ich frage nur, weil mich interessiert, was ein debugger mehr anzeigen
kann als z.B. Visual studio, da dort seeeeeeehr viel gezeigt wird, alle
variblen, die funktonsaufrufe, parameter, typen, usw....

du kannst auch, wenn du nen Fehler gefunden hast einfach 6 Schritte
zurückgehen, und nochmal genau schauen.

Du hast natürich recht, assembler ist nur sehr sehr selten nötig.
wer es kann ist eine gute frage, nicht viele, aber die, die es können,
können mit dem wissen programme mit etwas aufwand disassemblieren
mit hilfe des studios.
gepostet vor 19 Jahre, 6 Monate von Kampfhoernchen
Also ich hab so einen Debugger noch nie gebraucht. Da kloppt man mal eben 30 Echos ins script, und schon hat man seinen Debugger )


Was ich gerne gewusst hätte:
Es es neben der squrt() auch noch die Funktion bcsqurt() gibt.
Und: Das Webweaver eine absolut geniale PHP-IDE ist, und mich mich lange mit PHPEclipse und Weaverslave herumgeschlagen habe.
gepostet vor 19 Jahre, 6 Monate von Freshman
meinst du sqrt() oder was meinst du? die funtkion squrt() kenne ich
nicht, sorry.
gepostet vor 19 Jahre, 6 Monate von BLUESCREEN
Original von Kampfhoernchen
Was ich gerne gewusst hätte:
Es es neben der squrt() auch noch die Funktion bcsqurt() gibt.

Die 'u' müssen da weg.
Die bc-Funktionen bieten "beliebige Genauigkeit" (Stellen hinter dem Komma) - siehe http://de.php.net/manual/de/ref.bc.php
gepostet vor 19 Jahre, 6 Monate von Sogil
Also ich hab mein Spiel in C geschrieben, und muss sagen, dass das auch Nachteile hat. Ein PHP Skript kann zum Beispiel nicht abstürzen. Und man muss sich zusätzlich Gedanken über das Speichermanagement machen. Und dass mein Programm gleich auch noch die Datenbank beinhaltet macht das ganze natürlich noch zusätzlich Arbeitsaufwendig.

Aber von der Performance her ist das ganze natürlich top!
gepostet vor 19 Jahre, 6 Monate von Kampfhoernchen
Hehe, vielleicht sollte man erst denken, dann schreiben. Habe ich natürlich gemeint. Genau das mit der Genauigkeit wollte ich ja.
gepostet vor 19 Jahre, 6 Monate von smf68
Original von Freshman
@ Bierchen:

Php hat vorteile?

Nein, hat es nicht, es hat sogar nur nachteile c++ gegenüber, auch in
sachen webprogrammierung, WENN man erstmal etwas vorarbeit
geleistet hat.

Man muss natürlich eine Klasse haben, die einem POSt und GET befehle
auslesen kann, Formulare verwalten kann, und mit datenbanken
komuniziert. Auch Cookies und Sessions sollte man mit einbauen.

Sobald man content txpe HTML gesetzt hat, geht jede ausgabe per
printf ( cout ) direkt auf die html seite.

Da muss man zwar etwas Vorarbeit leisten, bis man das ganze am laufen
hat, aber dann geht es steil vorran.


Ich schreibe ein onlinespiel in c++, und mekre die vorteile auf den Fuß.
Habt ihr euch bei php nicht auch mal einen schönen debugger
gewünscht? Oder die freiheit des funtktionsumfangs wie bei c++?

Vor allem das debuggen ist ein großer vorteil bei c++, gegenüber PHP,
denn langes suchen kann einen viel Zeit kosten. Oder wir haben den Fall,
dass ein weiterer Programmierer hinzukommt, der nimmt sich die
main() und geht von da an nach unten im debugger, und schon läuft er
schritt für schritt live durch das programm ( spiel )


Zum Thema variblengültigkeit........ muss ich was sagen, oder reicht
es, dass es die in so gut wie jeder programmiersprache gibt, man
darf nie vergessen, dass so gut wie alle Programmiersprachen sich
als vorbild c genommen haben ( 1972 entwikelt )


du könntest jetzt sagen, dass Assembler dies nicht hat, aber das zieht
nicht


Fazit:

wer ein spiel, oder eine etwas rechenlastigere seite aufbauen will, der
sollte sich c++ mal anschauen, dann kann man nämlich
sachen wie kmapfsystem, ressourcen, usw progblemlos immer
beim klicken der user ausführen, und die cpu merkt das nichtmal

wer allerdings nur kleine seiten aufbauen will, dem sei PHP und Javascript
näher gelegt, denn diese Sprachen sind anfang viel schneller einzubauen,
das der Apache diese Sprachen ( PHP ) schon beherscht.

wenn man noch nicht Programmieren kann, dann ist das ganze eh
abzuwägen, denn c++ ist als erste programmiersprache ohne Hilfe
sehr schwer, und es geben viele auf. da wäre dann auch PHP
angebraucht, da man dort nicht mit variblentypen usw. kämpfen muss.


mfg

Freshman


Hallo,
Ich finde deine Ausführungen sehr interessant. Allerdings gibt es noch ein paar Dinge, bei denen ich gerne noch genauer nachhaken würde:
- Nimmt dein Programm direkt Anfragen über Port 80 an und agiert quasi wie ein Webserver, oder gibt es da noch einen "Zwischenhändler"?
- Für was für einen Server siehst du so ein Programm vor? Windows, Linux oder was ganz anderes?
- Was machst du mit den Spieldaten? Verwendest du eine Datenbankumgebung wie postgre oder MySQL (, etc...)? Oder hast du was anderes, eigenes?
- Programmierst du (ihr?) nur mit Visual C++?
- Gibt es einen Link zu deinem Spiel? Würde mir das gerne mal ansehen
- Wie umfangreich ist die ganze Vorarbeit, von der zu sprichst?

Würde mich freuen über Beantwortung dieser Fragen
mfg smf68
gepostet vor 19 Jahre, 6 Monate von TheUndeadable
Von jmd anderem:
Für mich hat diese Vorarbeit etwa 1 Woche gekostet. Es wurde ein einfacher HTTP-Server auf Port 80 aufgebaut, der Cookies, Sessions, POST, GET und Keep-Alive unterstützt. Dieses Programm läuft in einem eigenen Thread und kann dementsprechend als Win32-Konsole oder Win32-GUI-Anwendung genutzt werden.
Linux und andere BS unterstützt mein Webserver nicht.
Als Datenbank habe ich MySQL direkt unterstützt (mysql C-API)

Die Portierung auf C# hat etwa 1 Tag gedauert und läuft nun unter .Net und Mono. Als Datenbank nutzte ich das ADO-Interface. Momentan ist das Projekt aber etwas vergraben (Hass auf HTML/CSS/IE)
gepostet vor 19 Jahre, 6 Monate von Freshman
Ich hab edrüber nachgedacht, ob ich einen webserver einbauen soll, oder
nicht. Habe mich dann dagegen entscheiden, da es einfach zu zeitaufwendig ist, einen Kompletten webserver aufzubauen.

Stattdessen habe ich mich dafür entschieden, den apache als server zu benutzen, und mein Spiel als cgi-bin laufen zu lassen. Ich weiß auch, dass es schnellere Wege oder elegantere Wege gibt, aber dieser ist sicher.

Der Einbau eines Servers ( soweit Vorhanden ) qürde ca. 3 Tage dauern, wobei man dann den Vorteil hätte, dass ein paar Wichtige Daten in den Cache geladen werden können, aber nötig ist das nicht, da der Zeitvorteil nicht so groß ist.

Das Programm ist auf Windows geschrieben, komplett mit dem VC++ 6.0
Da muss ich sagen, dass ich es so mache, weil das mein Standartcompiler auf der Arbeit ist, und man sich sehr schnell an sowas gewöhnt.

Als Datenbank verwende ich MySql weil sie kostenlos ist. Die Datenbank ist schnell, ich habe nicht sooo viele Anfragen, da ich Forschungen und Gebäude klein gemacht habe. Alles in allem steht die Verbindung.


Du hast noch geschrieben du ( ihr? )...

ICh Programmiere allein, nicht weil ich es unbedingt will, aber man findet halt nicht so schnell leute, die an sowas interessiert sind.

so ist halt das Leben, aber ich komme recht schnell vorran, habe jetzt vor knappp 7 Monaten angefangen ( kann auch mehr sein ) und bin in ca 3 Wochen soweit, dass ich die erste version richig freigeben werde


Einen Link kann ich dir per PM geben ^^
gepostet vor 19 Jahre, 3 Monate von felix
Die Programm-Teile für ne Webanwendung in C++ findet man sicher im Netz. Wahrscheinlich braucht man da nicht ne Woche dazu...

Der einzige Nachteil ist das Compilieren was bei der Programmierung selbst ein bissel Zeit in anspruch nimmt.
Das mit dem Speichermanagment kann man C überlassen, man sollte/muss NICHT reinfummeln. Kannste aber z.B. direkt einen Speicherbereich von verschiedenen Programmen auslesen und musst nicht alles in die Datenbank schreiben...solches ist aber nix für mich, weil man das OS sehr gut kennen muss.
Alleine Variablendefinitionen können schon Speicherplatz und auch Rechenzeit sparen. Bin aber zu faul für sowas. Was den CPU in die Knie zwingt sind letzlich andre Dinge...z.B. Mailattacken, verschwenderischer Programmierstil und schlechte Wartung der Datenbanken...endlos lange Joins und Unions in den SQL-Statements etc. etc...

WebScripte sollte man ja sowieso kleinhalten. Dinge wie Tickers die einige Tausend Linien lang sein können, kann man ja problemlos in C schreiben.

An PHP gefällt mir, dass ich alte Perl Scripte per "Search+Replace" in PHP Scripte umwandeln kann. Und eben dass es viele Leute können, und so kann man einfacher Teilbereiche an Helfer abgeben
gepostet vor 19 Jahre, 2 Monate von Kampfhoernchen
Was ich noch gerne gewusst hätte ....

Wenn Register-Globals auf on sind, und eine Session-Variable namens 'isle' besteht, und gleichzeitig eine "normale" Variable namens $isle, und man macht unset($isle), auch die Session-Variable gelöscht wird.

Und was ich auch gerne gewusst hätte: Bei 1und1 ist die Funktion ini_set disabled, es wird aber ein völlig anderer (unsinniger) Fehler in der letzten Code-Zeile angezeigt.
gepostet vor 18 Jahre, 10 Monate von mifritscher
Hmm, php ist halt herrlich einfach, hat viele Module, die man nicht erst zusammenklauben muss, und man hat sehr schnell vorzeigbare Ergebnisse, auch weil es sehr viel Code in php für Webanwendungen gibt.

C nervt mich mit den ständigen Speicherschutzverletzungen und dass es mit den Strings zumindest am Anfang doch schwierig wird.

Allerdings ist php bissle arg lässig, was Variablendefinitionen etc betrifft. Da könnte man mit Sicherheit noch einiges an Performance rausholen. Außerdem wäre es mit Sicherheit sinnvoll nicht bei jedem Aufruf sämmtliche Module zu laden, und einen eingebauten Opcode-Cache wäre auch nicht übel (soll es ja ab php 6.0 geben)
gepostet vor 18 Jahre, 10 Monate von MrMaxx
Hätt ich gewusst, das wir Webdevelopment so viel Spass macht, haett ich viel früher aufgehört andere (nicht Browser-)Spiele zu entwickeln.

Hätt ich gewusst, das Webdeveloptment unter Java mit J2EE so elegant sein kann, hätt ich viel früher aufgehört mich mit php zu beschaeftigen.

Hätt ich gewusst, das Softwareentwicklung mit einer gemanagten Programmiersprache so viel einfacher und sauberer ist, dann hätt ich mir nie C / C++ angeguckt.

Mr.Maxx
gepostet vor 18 Jahre, 10 Monate von TheUndeadable
> Hätt ich gewusst, das Softwareentwicklung mit einer gemanagten Programmiersprache so viel einfacher und sauberer ist, dann hätt ich mir nie C / C++ angeguckt.

Du weißt, dass Managed aus dem .Net-Sprachgebrauch kommt? ;-)
Aber ansonsten hast du scheinbar den gleichen Werdegang 'durchgemacht', wie ich. Ewig an C++ festgehalten, mal eine neue Programmiersprache probiert und gleich verliebt...
Wobei ich einen Hass auf Browser habe, egal welcher Art, ob IE, ob Firefox oder Opera....
gepostet vor 18 Jahre, 9 Monate von Drezil
... das der bug, den ich seit 3h versuche zu fixen nen bug in php und nicht im script ist .. also immer schön updaten ... *g*
gepostet vor 18 Jahre, 9 Monate von knalli
Original von Drezil
... das der bug, den ich seit 3h versuche zu fixen nen bug in php und nicht im script ist .. also immer schön updaten ... *g*


Die drei Stunden kann ich toppen :roll:
gepostet vor 18 Jahre, 7 Monate von Crafty-Catcher
...das microtime ab php5 endlich mit microtime(true) aufgerufen werden kann und dann eine Gleitkommazahl ausspuckt und nichtmehr einen string der mit nem explode auf Leerzeichen in zwei Teile zerlegt werden muss.
gepostet vor 17 Jahre, 3 Monate von None
Original von TheUndeadable
Von jmd anderem:
Für mich hat diese Vorarbeit etwa 1 Woche gekostet. Es wurde ein einfacher HTTP-Server auf Port 80 aufgebaut, der Cookies, Sessions, POST, GET und Keep-Alive unterstützt. Dieses Programm läuft in einem eigenen Thread und kann dementsprechend als Win32-Konsole oder Win32-GUI-Anwendung genutzt werden.
Linux und andere BS unterstützt mein Webserver nicht.
Als Datenbank habe ich MySQL direkt unterstützt (mysql C-API)
Die Portierung auf C# hat etwa 1 Tag gedauert und läuft nun unter .Net und Mono. Als Datenbank nutzte ich das ADO-Interface. Momentan ist das Projekt aber etwas vergraben (Hass auf HTML/CSS/IE)

Kannst du mir vielleicht mal einen Teil der Klassen zeigen, ich würde gerne wissen wie sowa auszusehen hat!?
gepostet vor 17 Jahre, 3 Monate von DrakeL
...Dass ein Tag lesen im Design Pattern Buch mir 2 Wochen Denkarbeit über meine Engine erspart hätten (Hab immerhin 5 Patterns entdeckt, auf die ich ohne Hilfe gekommen bin, jetzt kenne ich wenigstens auch die Namen dafür ^^)
gepostet vor 17 Jahre, 3 Monate von None
Design Pattern Buch? Gibts das auch als E-Book?
gepostet vor 17 Jahre, 3 Monate von DrakeL
Nicht das ich wüsste, aber wenn ein Buch sein Geld Wert ist, dann das (Entwurfsmuster von Kopf bis Fuß). Ich habe es selbst nur ausgeliehen bekommen, werde es mir aber auf jeden Fall noch selbst kaufen.
gepostet vor 17 Jahre, 3 Monate von Agmemon
Original von TheHawk
Design Pattern Buch? Gibts das auch als E-Book?

DrakeL meint vermutlich das Buch aus der Head Up First reihe. Im deutschen heißt das, glaube ich, Entwurfsmuster von Kopf bis Fuss. Wenn es das als eBook gibt, höchstens im Safari Book Shelve von O'Reilly und das ist gebührenpflichtig.
Darüber hinaus ist diese Buchreihe nichts, was man als eBook lesen sollte, da es ganz neue Formen der Wissenvermittlung einsetzt. Ist schwer zu beschreiben. man muss es sich einfach mal ansehen.
Ansonsten findest Du massig Entwurfsmuster Quellen im Netz. Gerade was die Gang of Four Pattern betrifft.
gepostet vor 16 Jahre, 12 Monate von KoMtuR
Hätt ich gewusst, dass es XStream für Java gibt, hätt ich mir sparen können XML-Dateien umständlich über jDom einzulesen -.-
gepostet vor 16 Jahre, 12 Monate von Fornax
Dass es in Java Layout Manager gibt. Ich habe wieder angefangen was mit Java zu machen, und ein Beispiel mit einem null-LayoutManger [und dementsprechend button.setBounds(..)...] genommen - und Java verflucht, dass es so kompliziert/umständlich ist!
Nach ein paar Tagen unterhalte ich mich mit jemanden: "Warum nimmst du nicht einen Layout Manager?". Als ich dann im Internet gesucht habe, sind alte (2003?) Erinnerungen daran hochgekommen
gepostet vor 16 Jahre, 12 Monate von None
...ich mir das Buch MySQL Performance Tuning hätte sparen können, wäre mir früher die eine oder andere FAQ aus dem Internet in die Hand gefallen.
...ich von Amazon neuerdings Bücher mit STRICKMUSTERN angeboten bekommen, seitdem ich nach Entwurfsmustern / Designpattern gesucht habe.
...die Box von Munchkin nicht umsonst so viele leere Fächer hat und jetzt Teil 5 zzgl. der Weihnachtsedition rausgekommen ist.
...man noch so viel Mühe in saubere Makefiles stecken kann, wenn man zum einen verpennt sich aufzuschreiben welche Version der Zusatzbibliotheken man verwendet hat und man weiterhin auch noch die Distribution wechselt.
...Microsoft einem keine Chance läßt bei .NET nachzukommen und die einzigsten welche was dabei verdienen, die Autoren sind, dann hätte ich auch schon ein Buch darüber geschrieben.
...ich so stolz darauf war endlich eine eigene Klasse zum laden von XML-Konfigurationen zu haben und man mit LINQ das ganze in 10 Zeilen mit allen meinen Features machen kann.
gepostet vor 16 Jahre, 12 Monate von Nuky
"...ich mir das Buch MySQL Performance Tuning hätte sparen können, wäre mir früher die eine oder andere FAQ aus dem Internet in die Hand gefallen."
Hab ähnliche Bücher gelesen, und bis jetzt hat mir jedes was neues Verraten.
Need Links zu guten FAQs!
gepostet vor 16 Jahre, 12 Monate von Macavity
Das Partials durchaus Sinn machen wenn Elemente einer Seite nach dem gleichen Muster interaktiv neugeladen werden müssen.
gepostet vor 16 Jahre, 11 Monate von Valerion
Das der einzige Fehler im Code ein "`" zu viel war^^
gepostet vor 16 Jahre, 11 Monate von knalli
Original von Valerion
Das der einzige Fehler im Code ein "`" zu viel war^^

..oder eins zu wenig
gepostet vor 16 Jahre, 7 Monate von MannaZ
... ist, dass Lighttpd einfach performanter ist als Apache2.
gepostet vor 16 Jahre, 7 Monate von Nightflyer
... dass es völlig egal ist wie Schiffe, Gebäude etc. in einem Spiel heissen und man daher besser in der Datenbank einfach ship1, ship2, ship3..., geb1, geb2, geb3 schreibt damit man erstens im Code das ganze über dynamische Variablen durchlaufen kann und zweitens Gebäudenamen etc. später ohne grossen Aufwand ändern kann.
.... dass es Sinn macht bevor man sich ein BG programmiert erst ein JavaScript Framework einzuarbeiten.
gepostet vor 16 Jahre, 7 Monate von TheUndeadable
> ship1, ship2, ship3..., geb1, geb2, geb3
Ich 'hoffe', dass dies keine Spaltennamen sind...
Zum Topic:
Hätte ich gewusst, dass ich bei meiner momentanen Diplomarbeit unter Linux arbeiten muss, wäre ich dort nie angetreten ;-)
gepostet vor 16 Jahre, 7 Monate von Lubi
Die waren doch gleich die Normalisierungs-Regeln für relationale Datenbanken? (wichtig: Die gelten nicht uneingeschränkt für Objekt-Orientierte Datenbanken...)
gepostet vor 16 Jahre, 7 Monate von Nuky
Wenn man Blind allen Regeln folgt, wird man nie auf neue Wege kommen.. und von aussen einfach nur irgendwas kritisieren (was man nicht ganz Verstehen kann, da man die Umgebung und den Sinn nicht kennt) zeigt für mich eigentlich nichts gutes
x-post & follow-up to gnews.flames
gepostet vor 16 Jahre, 7 Monate von Kallisti
"ship1, ship2, ship3" in die Datenbank zu schreiben _kann nicht_ gut sein, ganz egal wie man es dreht und wendet... Es erwartet sicher niemand, dass jede Datenbank voll und ganz 3NF entspricht, aber dennoch haben die Normalisierungen gute Gruende und in den meisten Faellen (abgesehen von Performance, da sind Redundanzen u.U. gewuenscht) macht es definitiv Sinn.
gepostet vor 16 Jahre, 7 Monate von knalli
Original von Nuky
Wenn man Blind allen Regeln folgt, wird man nie auf neue Wege kommen.. und von aussen einfach nur irgendwas kritisieren (was man nicht ganz Verstehen kann, da man die Umgebung und den Sinn nicht kennt) zeigt für mich eigentlich nichts gutes
x-post & follow-up to gnews.flames

Ich flame nicht, sondern begründe es sogar: Gerade hier zeigt sich, das es über eine geeignete Relationswahl viel besser pflegbar ist, beispielweise: Auf einmal gibt es 10 "Ships", was dann? Wenn der Code (ey, völlig egal ob OOP oder nicht) darauf richtig abgestimmt ist, braucht man da entweder gar nichts oder nur wenig zu ändern. Gleichermaßen aber brechen sich die Regeln natürlich mit einigen Konstellationen.. aber i.d.R. ist das vertretbar oder eben ein Sonderfall.
Hart verdrahtete Relationen wie hier sind de facto nur selten gut; wobei es natürlich Ausnahmen geben kann, die sind dann aber auch gut begründet.
@topic (aktuell):
Wenn ich gewusst hätte, wie geil Eclipse/WTP mit Tomcat zusammenspielt, hätte ich mich viel eher dmit beschäftigt. Es spart nicht nur Arbeit, sondern auch Zeit..
gepostet vor 16 Jahre, 7 Monate von Lubi
@Nuky:
Ich kenne Sayphillion von innen und von außen...
gepostet vor 16 Jahre, 6 Monate von sami06
...dass ein schönes design meist wichtiger ist als ein durchdachtes fehlerfreies Gameplay, hätte ich nicht php, sondern designen als erstes gelernt...
nun hab ich ein schönes Spiel und ein mittelmäßiges Lückenhaftes Design...
...php so schön einfach ist, sodass ich glaub ich nichts anderes ernsthaft erlernen werde (aber mal ne frage, performance probleme in php kenn ich nicht (kaum), das einzige war der Kampfscript, aber mit ein wenig mathe braucht der nun auch keine minuten (was in php mit einem limit von 30 Sekungen i wie zu problemem fürht) sondern nur noch Sekunden (wenn überhaupt)
wobei sich nun die fehlersuche als sehr sehr schwer erweist^^
na ja, zum testen des kampfscriptes (sim.zehnsur.de)
gepostet vor 16 Jahre, 6 Monate von Valerion
100 Echo's im Script und du hast den Fehler normalerweise^^
gepostet vor 16 Jahre, 6 Monate von Dunedan
... dass der Stringparser von Django für gettext nur *.py- und *.html-Dateien parst. Dann hätte ich mir einen halben Nachmittag gespart. Immerhin gibt's schon einen Bugreport.
gepostet vor 16 Jahre, 6 Monate von Bringer
das man bei phpbb3 durchaus auch mal den offiziellen bugtracker einsehen sollte...
hatte vergessen in phpmyadmin meinem konto die berechtigung für "ALTER" zu geben.
Dummerweise kommt es aber dann beim Upgrade zu phpbb 3.0.1 zu einem fehler, welcher jedoch nicht angezeigt wird und mich damit ca 20 std meines Lebens gekostet hat...
www.phpbb.com/bugs/phpbb3/ticket.php?ticket_id=26325
gepostet vor 16 Jahre, 5 Monate von Amun Ra
... ist, das Javascript bei
for (var i = 0; i < object.childNodes.length; i++) {

bla();
}
auch Leerzeichen, Zeilenumbrüche und Text
als Kindknoten vom Typ undefined erkennt
und deshalb hässliche Warnings ausgibt.
Und das man das zum Beispiel mit
for (var i = 0; i < object.childNodes.length; i++) {

if (object.childNodes.nodeType == 1) {
bla();
}
}
ganz leicht umgehen kann.
Dann hätt ich mir gerade 2 Stunden Haare raufen und googlen erspart...
gepostet vor 16 Jahre, 5 Monate von tkdmatze

Hätte ich gewusst,

...das JSP-Tags so einfach zu schreiben sind

HTML:






wäre ich schon viel früher zur komponentenbasierten Entwicklung übergegangen...
...dass Progressive Enhancement direkt in den Tags durchgeführt werden kann
wäre ich schon viel früher zur komponentenbasierten Entwicklung übergegangen...
...dass man 50% der Entwicklungszeit für moderne Webseiten mit der Frage "Warum funzt das auf DEM EINEN(man weiss welcher) Browser nicht" beschäftigt ....
hätte ich "moderne standardkonforme Browser" beim Klienten vorausgesetzt
...wie sehr mir Mylyn(Eclipse Anbindung an Bugtracker) hilft,
hätte ich es von anfang benutzt

gepostet vor 16 Jahre, 4 Monate von Dunedan
..., dass es beim sogenannten Parallelport zwei verschiedene Arten von Steckern gibt.
Also wer einen 36-poligen "Centronics"-Stecker braucht: bitte melden. ;-)
gepostet vor 16 Jahre, 2 Monate von n26

Bin bestimmt der einzige Depp der das bisher nicht wusste

... dass das PHP Script nach einem header('Location:...'); weiterläuft

gepostet vor 16 Jahre, 2 Monate von Kallisti

Dass der Markt für professionelle Captcha-Löser schon so weit fortgeschritten ist..

http://www.freelance-projects.info/data-entry/need-captcha-entry-team-by-urigarin/

ca. 0.70-0.80$ / 1k captchas und es gibt Teams, die Kapazitäten bis 400k-1mio / Tag offerieren (die wollen dann aber 2-3$ / 1k captchas haben).

Ich denke das ist momentan eher ein Markt für Spammer, aber sofern Browsergames groß genug werden und ein Markt für Ingame Währung wächst (siehe WoW), wird das sicher auch professionelle Bots gepaart mit dergleichen Services anlocken.

gepostet vor 15 Jahre, 10 Monate von Eckstoss
  1. If a method can be static, declare it static. Speed improvement is by a factor of 4.
  2. echo is faster than print.
  3. Use echo's multiple parameters instead of string concatenation.
  4. Set the maxvalue for your for-loops before and not in the loop.
  5. Unset your variables to free memory, especially large arrays.
  6. Avoid magic like __get, __set, __autoload
  7. require_once() is expensive
  8. Use full paths in includes and requires, less time spent on resolving the OS paths.
  9. If you need to find out the time when the script started executing, $_SERVER[REQUEST_TIME] is preferred to time()
  10. See if you can use strncasecmp, strpbrk and stripos instead of regex
  11. str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4
  12. If the function, such as string replacement function, accepts both arrays and single characters as arguments, and if your argument list is not too long, consider writing a few redundant replacement statements, passing one character at a time, instead of one line of code that accepts arrays as search and replace arguments.
  13. It's better to use switch statements than multi if, else if, statements.
  14. Error suppression with @ is very slow.
  15. Turn on apache's mod_deflate
  16. Close your database connections when you're done with them
  17. $row[id] is 7 times faster than $row[id]
  18. Error messages are expensive
  19. Do not use functions inside of for loop, such as for ($x=0; $x < count($array); $x) The count() function gets called each time.
  20. Incrementing a local variable in a method is the fastest. Nearly the same as calling a local variable in a function.
  21. Incrementing a global variable is 2 times slow than a local var.
  22. Incrementing an object property (eg. $this->prop++) is 3 times slower than a local variable.
  23. Incrementing an undefined local variable is 9-10 times slower than a pre-initialized one.
  24. Just declaring a global variable without using it in a function also slows things down (by about the same amount as incrementing a local var). PHP probably does a check to see if the global exists.
  25. Method invocation appears to be independent of the number of methods defined in the class because I added 10 more methods to the test class (before and after the test method) with no change in performance.
  26. Methods in derived classes run faster than ones defined in the base class.
  27. A function call with one parameter and an empty function body takes about the same time as doing 7-8 $localvar++ operations. A similar method call is of course about 15 $localvar++ operations.
  28. Surrounding your string by ' instead of " will make things interpret a little faster since php looks for variables inside "..." but not inside '...'. Of course you can only do this when you don't need to have variables in the string.
  29. When echoing strings it's faster to separate them by comma instead of dot. Note: This only works with echo, which is a function that can take several strings as arguments.
  30. A PHP script will be served at least 2-10 times slower than a static HTML page by Apache. Try to use more static HTML pages and fewer scripts.
  31. Your PHP scripts are recompiled every time unless the scripts are cached. Install a PHP caching product to typically increase performance by 25-100% by removing compile times.
  32. Cache as much as possible. Use memcached - memcached is a high-performance memory object caching system intended to speed up dynamic web applications by alleviating database load. OP code caches are useful so that your script does not have to be compiled on every request
  33. When working with strings and you need to check that the string is either of a certain length you'd understandably would want to use the strlen() function. This function is pretty quick since it's operation does not perform any calculation but merely return the already known length of a string available in the zval structure (internal C struct used to store variables in PHP). However because strlen() is a function it is still somewhat slow because the function call requires several operations such as lowercase & hashtable lookup followed by the execution of said function. In some instance you can improve the speed of your code by using an isset() trick.
    Ex.
    if (strlen($foo) < 5) { echo "Foo is too short"; }
    vs.
    if (!isset($foo{5})) { echo "Foo is too short"; }
    Calling isset() happens to be faster then strlen() because unlike strlen(), isset() is a language construct and not a function meaning that it's execution does not require function lookups and lowercase. This means you have virtually no overhead on top of the actual code that determines the string's length.
  34. When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i. This is something PHP specific and does not apply to other languages, so don't go modifying your C or Java code thinking it'll suddenly become faster, it won't. ++$i happens to be faster in PHP because instead of 4 opcodes used for $i++ you only need 3. Post incrementation actually causes in the creation of a temporary var that is then incremented. While pre-incrementation increases the original value directly. This is one of the optimization that opcode optimized like Zend's PHP optimizer. It is a still a good idea to keep in mind since not all opcode optimizers perform this optimization and there are plenty of ISPs and servers running without an opcode optimizer.
  35. Not everything has to be OOP, often it is too much overhead, each method and object call consumes a lot of memory.
  36. Do not implement every data structure as a class, arrays are useful, too
  37. Don't split methods too much, think, which code you will really re-use
  38. You can always split the code of a method later, when needed
  39. Make use of the countless predefined functions
  40. If you have very time consuming functions in your code, consider writing them as C extensions
  41. Profile your code. A profiler shows you, which parts of your code consumes how many time. The Xdebug debugger already contains a profiler. Profiling shows you the bottlenecks in overview
  42. mod_gzip which is available as an Apache module compresses your data on the fly and can reduce the data to transfer up to 80%
  43. Excellent Article about optimizing php by John Lim

Quelle : http://reinholdweber.com/?p=3

gepostet vor 15 Jahre, 10 Monate von Blabbo

Was soll man denn statt require_once() verwenden?

gepostet vor 15 Jahre, 10 Monate von knalli

Original von Blabbo

Was soll man denn statt require_once() verwenden?

Ich denke mal, man meint damit include_once.. und zwar on-demand.

Require_once macht de facto nur Sinn, wenn du es - zb bei OOP - vor dem class-token verwendest.

gepostet vor 15 Jahre, 10 Monate von Klaus

require_once und include_once sind das gleiche. Man sollte stattdessen die Varianten ohne _once benutzen, da diese ohne zusätzliche Überprüfung, ob die Datei schon eingebunden wurde, natürlich schneller sind.

Im großen und ganzen fordern diese Tipps natürlich einen schönen Spaghetti-Code.  Zwar hat der Optimierer von PHP hier versagt, doch wer auf Performance-Jagd ist, sollte sich sowieso von Skriptsprachen abwenden.

gepostet vor 15 Jahre, 10 Monate von Kallisti

17. $row[id] is 7 times faster than $row[id]

Das ist auf jeden Fall mein Favorit.

18. Error messages are expensive

Und deshalb verzichtet der gute Programmierer drauf? Haha!

20. Incrementing a local variable in a method is the fastest. Nearly the same as calling a local variable in a function.

21. Incrementing a global variable is 2 times slow than a local var.

Das ist auch toll. Performance ist nun also der Grund keine globalen Variablen zu benutzen. Wie waere es damit die gar nicht zu benutzen, wenn man sie nicht braucht?

3. Use echo's multiple parameters instead of string concatenation.

29. When echoing strings it's faster to separate them by comma instead of dot. Note: This only works with echo, which is a function that can take several strings as arguments.

Paar Argumente schinden indem man sie mehrfach auflistet?

15. Turn on apache's mod_deflate

42. mod_gzip which is available as an Apache module compresses your data on the fly and can reduce the data to transfer up to 80%

Das mit den doppelten Argumenten hat ja vorher auch funktioniert, wieso nicht fuer Apache 1 und 2 je einen Punkt?

Sind sicher noch mehr Kloepse drin, die oberen haben mir gereicht... einige Dinge sind sicher sinnvoll, aber so etwas unreflektiert hinnehmen ist das schlimmste, was man tun kann. Stimme Klaus da im Grossen und Ganzen zu. Ein paar der Punkte in der Auflistung sind aber schon sinnvoll und gehoeren imho zu gutem Programmierstil.

gepostet vor 15 Jahre, 10 Monate von knalli

Original von Klaus

require_once und include_once sind das gleiche. Man sollte stattdessen die Varianten ohne _once benutzen, da diese ohne zusätzliche Überprüfung, ob die Datei schon eingebunden wurde, natürlich schneller sind.

Im großen und ganzen fordern diese Tipps natürlich einen schönen Spaghetti-Code.  Zwar hat der Optimierer von PHP hier versagt, doch wer auf Performance-Jagd ist, sollte sich sowieso von Skriptsprachen abwenden.

Fast.. require wird unmittelbar eingefügt, include nur konditional. Deswegen wie bereits erwähnt: require hat seinen Sinn, wenn es in Abschnitten vorkommt, die nicht konditional sind (Schleifen, Funktionen, Methoden, Bedingungen) - include wiederum wird tatsächlich nur dann eingefügt, wenn es zur Ausführung kommt. Dementsprechend kann man auch die Wichtigkeit einschätzen: Dateien, die per require eingebunden werden, sind essentiell wichtig (bswp. die abgeleitete Klasse), das Include wiederum führt nur dazu, dass der eine Codeabschnitt fehlerhaft ist.. und eben nicht die ganze Datei. Ob die ganze Klasse damit kaputt geht, ist davon unabhängig.

gepostet vor 15 Jahre, 10 Monate von TheUndeadable

Oder als Quellcode:

php-5.2.8.tar\php-5.2.8\Zend\zend_vm_def.h: Zeile 2849

C++:

switch (Z_LVAL(opline->op2.u.constant)) {
  case ZEND_INCLUDE_ONCE:
  case ZEND_REQUIRE_ONCE: {
    zend_file_handle file_handle;

    if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) {
     cwd_state state;
 
     state.cwd_length = 0;
     state.cwd = malloc(1);
     state.cwd[0] = 0;

     failure_retval = (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
      zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1));

     free(state.cwd);
    }

    if (failure_retval) {
     /* do nothing */
    } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {

     if (!file_handle.opened_path) {
      file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));
     }

     if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
      new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
      zend_destroy_file_handle(&file_handle TSRMLS_CC);
     } else {
      zend_file_handle_dtor(&file_handle);
      failure_retval=1;
     }
    } else {
     if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
      zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
     } else {
      zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
     }
    }
   }
   break;
  case ZEND_INCLUDE:
  case ZEND_REQUIRE:
   new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
   break;

gepostet vor 15 Jahre, 10 Monate von knalli

Dann wüsste ich aber 'mal gerne, wieso der CodeSniffer darauf so einen Wert legt..

edit: Tatsache ist aber, das require nen Fatal liefert, und include ne Warning. Damit ist man ja eigentlich wieder bei essentiell und nicht-essentiell.

gepostet vor 15 Jahre, 10 Monate von TheUndeadable

Dank der Unterscheidung, die man auch wesentlich eleganter hinbekommen hätte:

else if (type==ZEND_REQUIRE) {
   va_end(files);
   EG(active_op_array) = orig_op_array;
   EG(return_value_ptr_ptr) = orig_retval_ptr_ptr;
   return FAILURE;

In einer völlig abwegigen Datei: zend.c

C++:


ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...)
{
 va_list files;
 int i;
 zend_file_handle *file_handle;
 zend_op_array *orig_op_array = EG(active_op_array);
 zval **orig_retval_ptr_ptr = EG(return_value_ptr_ptr);
 zval *local_retval=NULL;  va_start(files, file_count);
 for (i=0; i  file_handle = va_arg(files, zend_file_handle *);
  if (!file_handle) {
   continue;
  }
  EG(active_op_array) = zend_compile_file(file_handle, type TSRMLS_CC);
  if(file_handle->opened_path) {
   int dummy=1;
   zend_hash_add(&EG(included_files), file_handle->opened_path, strlen(file_handle->opened_path)+1, (void *)&dummy, sizeof(int), NULL);
  }
  zend_destroy_file_handle(file_handle TSRMLS_CC);
  if (EG(active_op_array)) {
   EG(return_value_ptr_ptr) = retval ? retval : &local_retval;
   zend_execute(EG(active_op_array) TSRMLS_CC);
   if (EG(exception)) {
    if (EG(user_exception_handler)) {
     zval *orig_user_exception_handler;
     zval ***params, *retval2, *old_exception;
     params = (zval ***)emalloc(sizeof(zval **));
     old_exception = EG(exception);
     EG(exception) = NULL;
     params[0] = &old_exception;
     orig_user_exception_handler = EG(user_exception_handler);
     if (call_user_function_ex(CG(function_table), NULL, orig_user_exception_handler, &retval2, 1, params, 1, NULL TSRMLS_CC) == SUCCESS) {
      if (retval2 != NULL) {
       zval_ptr_dtor(&retval2);
      }
     } else {
      if (!EG(exception)) {
       EG(exception) = old_exception;
      }
      zend_exception_error(EG(exception) TSRMLS_CC);
     }
     efree(params);
     zval_ptr_dtor(&old_exception);
     if (EG(exception)) {
      zval_ptr_dtor(&EG(exception));
      EG(exception) = NULL;
     }
    } else {
     zend_exception_error(EG(exception) TSRMLS_CC);
    }
    if (retval == NULL && *EG(return_value_ptr_ptr) != NULL) {
     zval_ptr_dtor(EG(return_value_ptr_ptr));
     local_retval = NULL;
    }
   } else if (!retval && *EG(return_value_ptr_ptr)) {
    zval_ptr_dtor(EG(return_value_ptr_ptr));
    local_retval = NULL;
   }
   destroy_op_array(EG(active_op_array) TSRMLS_CC);
   efree(EG(active_op_array));
  } else if (type==ZEND_REQUIRE) {
   va_end(files);
   EG(active_op_array) = orig_op_array;
   EG(return_value_ptr_ptr) = orig_retval_ptr_ptr;
   return FAILURE;
  }
 }
 va_end(files);
 EG(active_op_array) = orig_op_array;
 EG(return_value_ptr_ptr) = orig_retval_ptr_ptr;  return SUCCESS;
}

Für Nichtprogrammierer:

Die Funktion execute_script überprüft, ob die aufrufende(!) Funktion von 'INCLUDE' stammt. Ist dies der Fall, so wird hart die Funktion beendet.

Ansonsten wird ein Fehler ignoriert.

Eleganz, wie sie nur bei PHP auftritt. Von der Art und Weise der Kommentierung in dieser Funktion abgesehen.

gepostet vor 15 Jahre, 10 Monate von Todi42

Original von TheUndeadable

C++:

Um mal meine Lieblingssprache in Schutz zu nehmen, dass was Du uns da zeigst ist C

gepostet vor 15 Jahre, 10 Monate von TheUndeadable

> Um mal meine Lieblingssprache in Schutz zu nehmen, dass was Du uns da zeigst ist C

Yep.

Nur bot mir dieser GN-Editor kein C an...

gepostet vor 15 Jahre, 10 Monate von MarcusSchwarz

3. Use echo's multiple parameters instead of string concatenation.

29. When echoing strings it's faster to separate them by comma instead of dot. Note: This only works with echo, which is a function that can take several strings as arguments.

Das ist auch totaler Humbug. Ich geb zu, ich wusste nicht dass ich echo mit mehreren Parametern aufrufen kann. Und man sollte es auch sofort vergessen. Ich habe mir dafür einen kleinen Benchmark geschrieben. Der ist sicherlich aufgrund des eingeschränkten Testszenarios nicht allgemein gültig, aber für mich kam dabei raus, dass diese Variante mit Abstand die langsamste ist. Folgende Szenarien habe ich verglichen. Die Zeitangaben sind arithmetische Mittelwerte (Um Extremwerte bereinigt) mehrfacher Messungen, jeweils in Schleifen zu 1.000 Durchläufen:

Variante a)

echo 'Ich bin ein '.$berliner;

arithmetisches Mittel: 0,0008753

Variante b)

echo "Ich bin ein $berliner";

arithmetisches Mittel: 0,0490600; Etwa 56 mal langsamer als Variante a)

Variante c)

echo 'Ich bin ein', $berliner;

arithmetisches Mittel: 0,1547823; Etwa 176 mal (!!) langsamer als Variante a)

Das ganze lief unter PHP Version 5.2.0, vielleicht hat ja jemand Lust, die Ergebnisse durch einen Benchmark zu bestätigen oder zu widerlegen...

gepostet vor 15 Jahre, 10 Monate von Redrick

Original von MarcusSchwarz

Das ganze lief unter PHP Version 5.2.0, vielleicht hat ja jemand Lust, die Ergebnisse durch einen Benchmark zu bestätigen oder zu widerlegen...

/confirmed

jedoch mit einschränkungen (php 5.2.4)

----------------------------------------------------------------

zb bei 10000 durchläufen

0.78562 => 0.818375 => 0.893767

----------------------------------------------------------------

ab 100000 spinnen die werte total (überhaupt keine konstanz)

gepostet vor 15 Jahre, 10 Monate von Amun Ra

( Also erstmal dieser Editor hier ist richtig scheiße! )
Die Liste ist schon ganz brauchbar,
aber ich versteh immer nicht warum jemand in seinem Blog postet,
ohne das mal Korrektur zu lesen.
Doppelte Einträge, offensichtliche Fehler... was solls.
Ich hab da auch noch was zum Thema.
Rasmus Lerdorfs Simple Guidelines for PHP Programming:
o Try to limit yourself to 5 or less includes per request
o Dont go overboard on OOP. Use where appropriate.
o Same goes for Layers. Abstraction, Indirection, abstract classes.
o Everything has a cost
o Use an opcode cache
o Watch your regular expressions!
o Cache! Cache! Cache!
o If you have plenty of CPU but limited bandwidth, turn on output compression
Okay Punkt 1 kann man in größeren Projekten kaum umsetzen.
Aber da ist schon was dran.
Selbst mit opcode cache können zu viele includes bremsen.
Besonders mit opcode cache, require_once und falschem include_path.

gepostet vor 15 Jahre, 10 Monate von Sarge

Die Regeln sind zum größtenteil absolut bedeutungslos und viele sollten definitiv nicht beachtet werden:

Geschwindigkeit erreicht man durch die richtige Wahl seiner Algorithmen&Datenstrukturen, nicht dadurch ob man nun print oder echo verwendet.

Manche der Regeln führen sogar zu imho schlechten Code-Design, z.B

  1. Don't split methods too much, think, which code you will really re-use
  2. You can always split the code of a method later, when needed
  3. Error messages are expensive
  4. ...

Hier zeigt sichs doch deutlich, dass der Autor völlig absurde Ansichten über Codedesign besitzt. Funktionen sollten nicht (nur) der Wiederverwendbarkeithakber verwendet werden, sondern vorallem der besseren Lesbarkeit&Wartbarkeit des Codes. Schreib ich lieber 1 Funktion mit 250 Zeilen und mehr als x Einrückungen oder pack den eigtl hauptkriegsschauplatz in 50 Zeilen in die Funktion und die Nebenkriegschauplätze in 10 Funktionen a 20 Zeilen mit einer guten Namensgebung?

Ich glaube über die Fehlermeldungen müssen wir nicht wirklich reden? Wieviel Performance wollt ihr im Frontend einsparen wollen, dass es die Hilfe bei der Fehlersuche bzw. dem Nutzen für den User wettmacht?

Und das wichtigste: Die Grundregel des Optimierens: Optimiere die 10% des Codes die für 90% der Laufzeit verantwortlich sind und nichts anders :)

gepostet vor 15 Jahre, 10 Monate von MarcusSchwarz

Original von Amun Ra

o Try to limit yourself to 5 or less includes per request
Okay Punkt 1 kann man in größeren Projekten kaum umsetzen.
Aber da ist schon was dran.

Das ist richtig, aber man sollte immer prüfen, ob ein include wirklich nötig ist. Hierzu ein Erfahrungswert aus der Anfangszeit von Wurzelimperium: Ein include, welcher der Bequemlichkeit wegen eingebunden wurde (eine Funktionsdatei), war in einem bestimmten Script unnötig. Dieses Script war zugleich mit über 4 Mio Requests das mit Abstand am stärksten frequentierte Script. Ohne Opcode-Cache bedeutete das gut 90 Minuten Laufzeit. Der Server war also 90 Minuten am Tag damit beschäftigt eine Datei zu öffnen, zu lesen und wieder zu schließen, die er gar nicht brauchte.

Vielleicht sollte man daher die Regel anpassen: Prüfe, ob du wirklich einen include benötigst und versuche, die Gesamtzahl der includes so gering wie möglich zu halten.

gepostet vor 15 Jahre, 10 Monate von Blabbo

Nur 5 includes ... schafft ihr das?

Ich glaub ich brauch im moment bei einem Projekt locker 15 pro Aufruf :(

gepostet vor 15 Jahre, 10 Monate von Klaus

Du schreibst alles in eine Datei und springst dann mit goto zur jeweiligen Stelle. Das ist hammerschnell!

BTW: Wer weiß wie lange diese Liste schon durch das Internet schwirrt. Wahrscheinlich wurden da noch mit PHP3 Benchmarks betrieben.

gepostet vor 15 Jahre, 10 Monate von knalli

Original von Blabbo

Nur 5 includes ... schafft ihr das?

Ich glaub ich brauch im moment bei einem Projekt locker 15 pro Aufruf :(

Arg.. kennt ihr das auch? Man hat ein Bild von einer Webseite vor Augen, die man mal gesehen hat.. aber man findet sie einfach nicht wieder.. da mich das jetzt wachgehalten hat, hab ich laaaange gesucht :)

http://phpimpact.wordpress.com/2008/08/04/php-applications-where-is-the-include-coming-from/ Das zum Thema FÜNF Includes :)

gepostet vor 15 Jahre, 10 Monate von HSINC

die zahl max 5 includes ist genauso ein blödsinn wie die zahl max 20 db querys.

man sollte lieber anständigen wartbaren code schreiben, als obskure performancetricks anzuwenden

gepostet vor 15 Jahre, 10 Monate von Amun Ra

Ja sicher ist das ab einer gewissen Komplexität nicht mehr einzuhalten,
aber ich finde die angepasste Regel von MarcusSchwarz ganz treffend:
"Vielleicht sollte man daher die Regel anpassen:
Prüfe, ob du wirklich einen include benötigst und versuche,
die Gesamtzahl der includes so gering wie möglich zu halten."
Hört sich in meinen Ohren vernünftig an...

gepostet vor 15 Jahre, 10 Monate von knalli

Aber einen Include machst du doch eh "on demand" (include_once). Oder nicht? Alternativ autoload, dann muss man die Komplexität der autoload-Funktion (bzw. Objektmethode) "gegenrechnen".

Auf diese Diskussion antworten