16

In welchen interpretierten Programmiersprachen, wie PHP und JavaScript, welche Auswirkungen hat die Verwendung eines objektorientierten Ansatzes gegenüber einem prozeduralen Ansatz?Geschwindigkeitsvergleiche - Prozedural vs. OO in interpretierten Sprachen

Genau das, was ich suche, ist eine Checkliste von Dingen, die beim Erstellen einer Webanwendung zu berücksichtigen sind, und die Wahl zwischen prozeduralen und objektorientierten Ansätzen, um nicht nur Geschwindigkeit, sondern auch Wartbarkeit zu optimieren. Zitierte Recherche- und Testfälle wären auch hilfreich, wenn Sie Artikel darüber kennen.

Fazit: Wie groß (wenn überhaupt) ist der Performance-Hit wirklich, wenn OO vs. Procedural in einer interpretierten Sprache läuft?

Antwort

17

Vielleicht bin ich verrückt, aber Sorgen über die Geschwindigkeit in solchen Fällen mit einer interpretierenden Sprache ist wie zu versuchen, herauszufinden, welche Farbe der Schuppen zu malen. Lassen Sie uns nicht einmal auf die Idee kommen, dass diese Art von Optimierung völlig voreilig ist.

Sie haben den Nagel auf den Kopf getroffen, als Sie "Wartbarkeit" sagten. Ich würde den Ansatz wählen, der am produktivsten und am haltbarsten ist. Wenn Sie später Geschwindigkeit brauchen, wird es nicht von einem Wechsel zwischen prozeduralen und objektorientierten Kodierparadigmen innerhalb einer interpretierten Sprache kommen.

+0

Ich hatte den Chef aus der Hölle. Er wusste nichts über Programmierung, dachte aber, er wüsste alles (er hat mich einmal über Unix-Zeitstempel gelehrt und mir gesagt, "Unix-Zeitstempel sind wie europäische Zeitstempel. Sie machen es komisch, sie setzen den Tag zuerst und dann den Monat so: dd/mm/yyyy "ROFL, was für ein Idiot!" Also, als er herausfand, dass ich OO PHP machte, kippte er aus und sagte, dass es "unsere Seite verlangsamen würde". Ich suchte nach irgendeiner Art von Studie, die ich finden konnte, um zu beweisen, dass er voll davon war, damit ich OO weiter programmieren konnte ... – cmcculloh

+2

klingt wie ein http://clientsfromhell.net/ – Xeoncross

+0

OOP ist weniger produktiv und weniger wartbar. –

5

Fazit: Nein, weil der Overhead der Interpretation den Overhead der Methodenverteilung überfordert.

2

Wenn Sie eine interpretierte Sprache verwenden, ist der Unterschied irrelevant. Sie sollten keine interpretierte Sprache verwenden, wenn die Leistung ein Problem darstellt. Beide werden ungefähr dasselbe leisten.

0

Ich habe tatsächlich einen kleinen Test wie folgt in Python auf einer Website, die ich beibehalten und festgestellt, dass sie fast gleich schnell sind, mit dem prozeduralen Ansatz durch etwa zehntausendstel einer Sekunde gewinnen, aber dass die OO Code war so deutlich sauberer Ich habe die Übung nicht länger als eine Iteration fortgesetzt.

Also wirklich, es ist egal (in meiner Erfahrung sowieso).

1

Ihre Leistung wird durch die Implementierung gekennzeichnet, nicht die Sprache. Sie können die langsamste Sprache verwenden und skalieren, um die größte Website der Welt zu werden, solange Sie sie skalieren.

Denken Sie nur an die erste Optimierungsregel.

Nicht.

:)

10

Leider habe ich meine Tests auch getan. Ich habe die Geschwindigkeit getestet, und es ist ungefähr das Gleiche, aber als ich nach der Speicherbelegung von memory_get_usage() in PHP suchte, sah ich eine überwältigend größere Zahl auf der OOP-Seite.

116.576 Bytes für OOP zu 18.856 Bytes für prozedurale. Ich weiß "Hardware ist billig", aber komm schon! 1.000% mehr Nutzung? Entschuldigung, das ist nicht optimal. Und da so viele Nutzer gleichzeitig auf Ihre Website zugreifen, bin ich mir sicher, dass Ihr Arbeitsspeicher einfach brennen würde oder ausgeht. Liege ich falsch?

1

Meiner Erfahrung nach wird eine Website, die stark ausgelastet ist, festgefahren und reagiert mit OOP-Code viel einfacher als prozedural. Der Grund ist leicht zu verstehen.

OOP erfordert viel mehr Speicherzuweisungen (MALLOC) und viel mehr Operationen im Arbeitsspeicher als prozeduralen Code ausgeführt werden. Es erfordert viel mehr CPU-Zeit, um seine Aufgaben zu erfüllen.Es ist im Wesentlichen "overhead", um den prozeduralen Code gewickelt, was die CPU-Belastung erhöht, um es auszuführen, insbesondere wenn Datenbankoperationen durchgeführt werden.

Viele Programmierer mögen den Komfort von OOP, indem sie kleine schwarze Kästchen hinter einfachen Schnittstellen erstellen. Ich bin jedoch gut bezahlt worden, um Websites wiederzubeleben, deren Beantwortung unter starker Benutzerbelastung ewig gedauert hat. Das Entfernen der OOP und das Ersetzen durch einfache Verfahrensfunktionen machten einen großen Unterschied.

Wenn Sie nicht erwarten, dass Ihre Website sehr beschäftigt ist, verwenden Sie unbedingt OOP. Wenn Sie ein System mit hohem Datenverkehr aufbauen, sollten Sie jeden CPU-Zyklus von der Verarbeitung und jedes Byte von der Ausgabe entfernen.