2009-05-09 // Bessere Performance durch PHP-Klassenkonstanten statt define()
Kleiner PHP-Tipp am Rande: wer wie ich Konfigurationswerte und andere eigentlich konstanten Werte äußerst ungern in nicht-konstanten Variablen oder Arrays unterbringt (z.B. $_CONFIG['foo'] = “bar”;
), sollte sich dennoch das massenhafte Einsetzen von define()
gut überlegen. Eine bessere Alternative stellen Klassenkostanten dar:
class config { const foo = "bar"; } echo config::foo;
define()
ist relativ langsam und hat einen nicht unerheblichen Ausführungs-Overhead. Auch apc_define_constants()
hilft nicht wirklich weiter, da nur geringfügige Geschwindigkeitsvorteile erzielbar sind (und man auf IMHO hässliche Art und Weise in den Code eingreifen und sich an den ggf. nicht verfügbaren APC bindet).
Klassenkonstanten haben hingegen enorme Vorteile:
- Klassenkonstanten werden zur Kompilierzeit geparst, es gibt keinen Ausführungs-Overhead.
- Genau deshalb können sie OP-Code-Cache freundlich verarbeitet werden (
define()
wird immer wieder ausgeführt, OP-Code-Cache hin oder her!). Dies ist IMHO auch der Hauptvorteil, der für einen Einsatz in performance-krtitischen Anwendungen spricht, da OP-Code-Caches gut greifen ohne den Code anfassen zu müssen. - auf Klassenkonstanten kann performanter zugegriffen werden (kleinere Hashs!)
- man hat nen schicken Namespace.
Also, falls man sich noch nicht damit befasst hat nochmal nachlesen, einsetzen und über die Vorteile freuen.
Comments
Leave a comment…
- E-Mail address will not be published.
- Formatting:
//italic// __underlined__
**bold**''preformatted''
- Links:
[[http://example.com]]
[[http://example.com|Link Text]] - Quotation:
> This is a quote. Don't forget the space in front of the text: "> "
- Code:
<code>This is unspecific source code</code>
<code [lang]>This is specifc [lang] code</code>
<code php><?php echo 'example'; ?></code>
Available: html, css, javascript, bash, cpp, … - Lists:
Indent your text by two spaces and use a * for
each unordered list item or a - for ordered ones.
Vielen Dank für die Idee bzw. die Information, hat mir sehr gefallen!
komme von hier phphatesme.com hier her
gruß alex