php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.11.2009, 11:14  
Neuer Benutzer
 
Registriert seit: 10.11.2009
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
coyUgl befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] str_replace() vs. Codegenerierung?

Hallo, ich hoffe, ich hab meine Frage im richtigen Forum positioniert.

Ich plane gerade ein Persistensframework, dass die Beziehung zwischen PHP-Objekten a la Entity-Relationship-Modell auf Datenbankqueries abbilden soll. Um das ganze effizient zu halten, sollen die generierten Queries natürlich gecacht werden. Soviel zur Vorgeschichte.

Ich sehe da nun zwei Ansätze:

1. Query-Templates generieren: "CREATE `${table}` ....." und die Nicht-Terminale zur Laufzeit mit str_replace() ersetzen.

2. PHP-Code generieren: $query = 'CREATE' . $table . '....' und den Code zur Laufzeit includen oder evaluieren.

Nun endlich meine Frage: Gibts hier Erfahrungswerte, welcher der beiden Ansätze schneller ist?

Vermutlich hängt die Antwort letzten Endes davon ab, wie str_replace() im PHP-Kern implementiert ist: Wird str_replace() auf eine native C-Funktion abgebildet (und ist somit schnell), so ist Ansatz 1 vermutlich die bessere Wahl.
Ist str_replace() allerdings intern irgendwie selbst in PHP implementiert (so wie z.B. viele Matlabfunktionen selbst in Matlab realisiert sind), dann ist Ansatz 2 trotz Parsing, Syntax- und Sematik-Analyse und Bytecodeerzeugung wohl der schnellere Weg.

Na, jetzt hab ich mir hier beim Schreiben schon irgendwie selbst die Antwort gegeben - bleibt zu klären, wie str_replace() implementiert ist. Kann mir das vielleicht jemand beantworten? Ist ja wahrscheinlich nicht nur für mich interessant ^^

Viele Grüße,
coyUgl
coyUgl ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.11.2009, 12:30  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.245
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Die Extensions sind eigentlich vollständig nativer C-Code. Die einzelnen Typbehandlungen, die Extensions aufrufen können, beispielsweise für Strings, sind relativ gut optimiert.

Der 2. Ansatz ist in aller Regel schneller. Wieviel schneller kommt stark auf den Fall drauf an. Bei einem einfachen Suchen-Ersetzen ist es immer schneller. str_replace nutzt man normalerweise dann, wenn das Template und die Variableninhalte sehr dynamisch werden, beispielsweise über ein Array definiert sind. Bei aufwändigeren Sachen sind RegExps in aller Regel die schnellste Variante.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist gerade online   Mit Zitat antworten
Alt 10.11.2009, 14:29  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Um das ganze effizient zu halten
Wie wäre es mit preparedd statements statt dieser replace-Orgie?
xm22 ist offline   Mit Zitat antworten
Alt 10.11.2009, 15:48  
Neuer Benutzer
 
Registriert seit: 10.11.2009
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
coyUgl befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

danke für die Antworten. Prepared Statements sind eben erst ab PHP 5.1 möglich, ich würde gerne ien paar Versionen abwärtskompatibel bleiben. Ansonsten wäre das natürlich die Lösung.
Im Prinzp hat sich meine Frage damit geklärt, danke!
coyUgl ist offline   Mit Zitat antworten
Alt 10.11.2009, 16:03  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.245
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Prepared Statements gehen jedoch nur bedingt. IMHO lässt sich der Tabellenname nicht dadurch abbilden. Davon abgesehen aber einen Hinweis:
Abwärtskompatibilität bei neuen Produkten sollte die Ausnahme bleiben. Und wenn sollte sie nur bei "sinnvollen" Versionen eingesetzt werden.
Abwärtskompatibilität zu PHP4 macht exakt 0 Sinn. Und Kompatibilität zu 5.0 würde ich nicht machen wollen. Die aktuellen PHP-Versionsstränge sind 5.2 und mit wesentlich neuen Features die 5.3. Es würde also genügen in meinen Augen, bei einer Neuentwicklung alles ab 5.1 zu überstützen, wenn man die Wahl hat.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist gerade online   Mit Zitat antworten
Alt 11.11.2009, 13:22  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
IMHO lässt sich der Tabellenname nicht dadurch abbilden
Ist auch richtig, aber ein Query bezieht sich i. d. R. auch auf eine feste Tabelle...
xm22 ist offline   Mit Zitat antworten
Alt 11.11.2009, 13:38  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.245
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

In obigem Beispiel nicht...
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist gerade online   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
java str_replace, str_replace java, matlab str_replace, matlab strreplace, matlab str replace, java str replace, java strreplace, matlab, str_replace tabelle, strreplace matlab, php strtr() str_replace() was ist schneller, php str_replace vs strtr, implementation str_replace, str_replace vs strtr, wiki dynamische codegenerierung, java .str_replace, strreplace in java, str_replace implementierung, str_replace for java, c function strreplace

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:36 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum