anpera.net
http://anpera.homeip.net/phpbb3/

Splitting, bzw. Auslagern
http://anpera.homeip.net/phpbb3/viewtopic.php?f=25&t=1040
Seite 1 von 1

Autor:  Amerilion [ So 27 Feb, 2005 20:02 ]
Betreff des Beitrags:  Splitting, bzw. Auslagern

Alllssoooo

Ich habe nun schon einige LoGD's gesehen die ihre functions Auslagern, und habe nun bei den Bedingung um Hilfe zu bekommen gelesen das es die Ladezeit erhöhen würde.
Da dies von Chaosmaker geschrieben wurde glaube ich das auch so zimlich anstandslos, nur würd ich gerne wissen warum dem so ist...

Dann noch das Splitting, so habe ich es genannt wenn man seine common.php in 2 Dateien aufteil. Hatt dies Irgendeinen Nutzen?

Und dann noch ein Frage, in einiger älterer Beiträge und der common.php ist die Rede von einem "Beta"-Status, den man durch einen Pavilion erreichen konnte... Nur rein aus Intresse, was ist/war das?

So, eher unwichtige Fragen, aber ich wollte sie doch mal stellen ;)

Autor:  Chaosmaker [ So 27 Feb, 2005 20:35 ]
Betreff des Beitrags: 

Der Beta-Status wird, wenn ich nicht irre, gar nicht mehr genutzt.
An sich ist er dafür gedacht, daß bestimmte User für neue Features als Betatester eingetragen werden können.

Zum Auslagern der Funktionen: Es würde genau dann Sinn machen, wenn man nur bei Bedarf die benötigte Funktion includet. D.h., daß Funktionen wie output() in der common.php bleiben und nur spezielle (wie z.B. forest() oder wie die heißt) ausgelagert werden, da die nicht überall nötig sind.
Werden aber alle includet, werden die Funktionen natürlich nach wie vor alle "geladen" und zusätzlich (geringe) Rechenleistung für das includen benötigt.
Wenn jemand tatsächlich einige Funktionen auslagert (was ich auch schon überlegt habe), spricht eigentlich nix dagegen, den Ordner dafür auch freizugeben.

Warum man die common.php aufsplitten sollte, weiß ich nicht - da müßte man natürlich wissen, was in beiden Versionen drinsteht.

Autor:  Scartha [ So 27 Feb, 2005 20:40 ]
Betreff des Beitrags: 

Hi!

Also ich hab eine 2 common datei, ganz einfach weil sie

1. viel zu gross wurde und 2. steht in der 2 die function für die gamepostion und infostats und die städte (cities).

Rein prinzipiell NUR weil sie wirklich zu gross wurde, man muss sich auch noch ein bischen noch den Überblick halten können und ich komme so besser klar.

Autor:  Gast [ So 27 Feb, 2005 21:02 ]
Betreff des Beitrags: 

:) Genau bei dir habe ich mir die gesplittete datei angeschaut ^^
Habe das aber auch schon irgendwo hier im Forum gelesen gehabt....

Nya so wie du das hast wird das denke ich aber auch kein Rechengewinn bringen (denn du rein prinzipiell auch net willst).

Mmmm also würde es etwas bringen wenn man nur z.b. Die forest und die chat function auslagern würde... Wie viel? Ich habe davon nicht so wirklich eine Vorstellung was das bringen soll, denn so viel Text ist ja nicht...

Autor:  Chaosmaker [ So 27 Feb, 2005 23:41 ]
Betreff des Beitrags: 

Es geht nicht um die Menge an Text, sondern um den generellen "Aufwand", eine Funktion zu initialisieren, was in jedem Fall passiert, wenn sie vorhanden ist.
Bei der Chatfunktion würde sich das wohl nicht ganz so stark auswirken, weil sie fast überall genutzt wird - aber klar, ist im Prinzip richtig, alles was nicht immer gebraucht wird kann raus.

Zum Geschwindigkeitsunterschied:
Ich hab gerade in einem Script zunächst eine Datei includet, die 100mal jeweils die addcommentary und die viewcommentary enthielt (nur jeweils mit anderem namen, damit es keinen Fehler gibt, also addcommentary1() bis addcommentary100() und entsprechend mit viewcommentary).
Anschließend hab ich noch eine weitere Datei includet, die nur "$var = 'test';" enthält, um die Dauer vom include() an sich rauszufiltern.
Gegenüber standen sich also:
a) 200 Funktionsdefinitionen (wohlgemerkt wurden die Funktionen NICHT aufgerufen, sondern nur definiert!) entsprechend 100 LoGD-Scriptaufrufen, die unnötig die beiden Kommentarfunktionen enthalten
b) 1 Variablendefinition

Zeiten:
a) 0.38186s
b) 0.00037s

Die reinen Funktionsdefinitionen haben somit ca. 1032mal solange zum Laden gebraucht wie die Variablendefinition.
Anders ausgedrückt: Wenn 30 User zugleich online sind und jeder 10 Waldkämpfe macht, wird dabei eine Sekunde Rechenzeit verschenkt.
Ich habe grad mal nachgezählt und sage und schreibe 83(!) Funktionen in der common.php.
Würde ich davon 50 auslagern, würde das bei 30 Usern (sofern alle Funktionen die gleiche Zeit zur Initialisierung bräuchten) bei besagten 10 Waldkämpfen 25 Sekunden ergeben. D.h. wenn nur ein einziger User 10 Waldkämpfe macht, könnte er dabei fast eine Sekunde sparen.
Bei mir lokal braucht übrigens so eine Seite bei meiner aktuellen Systemlast etwa 0,15 Sekunden reine PHP-Zeit zum Laden, macht bei 10 Seitenaufrufen nach Adam Riese 1,5 Sekunden. Ich würde also 66% sparen.
Man könnte sogar so weit gehen und sagen, daß die Ladezeit ja bei oben erwähnten 30 Usern höher ist und somit die Ersparnis noch größer sein müßte. ;)

Autor:  Devilzimti [ Mo 28 Feb, 2005 07:09 ]
Betreff des Beitrags: 

Ähm köennen wir nicht auch den Ordner fuctions freigeben?

Autor:  bibir [ Mo 28 Feb, 2005 08:12 ]
Betreff des Beitrags: 

Devilzimti hat geschrieben:
Ähm köennen wir nicht auch den Ordner fuctions freigeben?


1. warum ist das nicht bereits geschehen?
denn du hinderst alle hier daran, wirklcih support zu geben, weil gerade in den funktionen hin und wieder seiteneffekte auftreten, die man sonst gar nicht sehen kann

2. was hat das damit zu tun?
chaosmaker sagte nicht, dass das (nicht)freigeben rechenzeit schluckt, sonder dass es das grundsaetzliche auslagern ist!

Autor:  Chaosmaker [ Mo 28 Feb, 2005 09:38 ]
Betreff des Beitrags: 

Ich persönlich bin natürlich zufrieden, wenn der Ordner freigegeben ist.
Hier ging es lediglich noch darum, darzustellen, warum es für den Server, auf dem das so ist, Nachteile bringt.

Autor:  Weasel [ Mo 28 Feb, 2005 13:45 ]
Betreff des Beitrags: 

ob das mit der rechenzeit auch so bei inet server ist, wage ich zu bezweifeln, da dort noch andere faktoren gelten, das ist aber nur meine meinung

oder sehe ich da was falsch?

Autor:  Chaosmaker [ Mo 28 Feb, 2005 14:07 ]
Betreff des Beitrags: 

Richtig ist, daß bei einem leistungsfähigen Internetserver der Faktor vermutlich nicht ganz so hoch ist, wie bei einem Heimrechner.
In jedem Fall wird aber durch die vielen Funktionsdefinitionen Rechenzeit verbraucht, die im Verhältnis zur übrigen reinen PHP-Zeit relativ hoch ist.
Der größte Unterschied bei den meisten Internetservern dürfte sein, daß der Flaschenhals MySQL ist und so eine Beschleunigung der PHP-Ladezeit von z.B. 0,05 auf 0,02 Sekunden bei 0,8 Sekunden MySQL-Zeit nicht bemerkbar ist.
Dennoch vertrete ich da den Standpunkt, daß Sparsamkeit (was Last betrifft - nicht bei der Serverleistung! :P ) nie schaden kann, auch wenn es nur sehr wenig ausmacht.
Solle allerdings jemand einen stark ausgelasteten Server haben, wo auch die PHP-Zeit recht hoch ist, ist der Unterschied durchaus stark bemerkbar.

Autor:  anpera [ Mo 28 Feb, 2005 15:00 ]
Betreff des Beitrags: 

Zitat:
Ähm köennen wir nicht auch den Ordner fuctions freigeben?


Ordner "functions" in der source.php freigeben:[php]//// Finde in source.php:
$legal_dirs = array(
$subdir."" => 1,
$subdir."special/" => 1
);

//// Ersetze es durch:
$legal_dirs = array(
$subdir."" => 1,
$subdir."special/" => 1,
$subdir."functions/" => 1
);[/php]

Zum Thema Geschwindigkeit durch Auslagern von Funktionen:

Es ist richtig, dass das Auslagern von Funktionen, die nicht bei jedem Klick benötigt werden, Rechenzeit spart. Allerdings könnte die so gewonnene Zeit wieder verloren gehen, sobald diese Funktionen benötigt werden. Wenn sich die Datei mit der Funktion nicht bereits in irgendeinem Cache befindet, müssen statt einer jetzt zwei Dateien geöffnet werden. Dabei schlägt die Zugriffsgeschwindigkeit von Festplatten doppelt zu, die ja wesentlich geringer ist, als die reine Lesegeschwindigkeit und mit der Geschwindigkeit von Prozessor und Arbeitsspeicher kaum zu vergleichen ist.

Wie stark sich dieser Faktor auswirkt, hängt wieder von der verwendeten Hardware, vom Betriebssystem (bei NTFS kann z.B. der Inhalt von kleinen Dateien komplett im Inhaltsverzeichnis gespeichert werden), von Cache- und Dateigrößen und von der Auslastung (gleichzeitige Anzahl an Zugriffen) ab.

Hehe, ich glaub, das muss jeder für sich und sein System selbst austesten, was mehr bringt und bei welcher Funktion es sich wirklich lohnt, sie auszulagern.

Autor:  Saaxa [ Fr 16 Sep, 2011 17:36 ]
Betreff des Beitrags:  Re: Splitting, bzw. Auslagern

hätt da noch ne frage...
hab testweise "function charstats(...." aus der common entfernt und auf ner neuen datei(function.php genannt) eingefügt.
funktioniert bei mir nicht >weiße seite mit fehlermeldung das sql passwort fehlt/nicht vorh. ist (dbwrapper)

habe es in der common mit "include "funktion.php";" und auch mit "require_once("function.php");" ausprobiert und umgekehrt in der function.php auch mit include/require_onces

wie verbinde ich denn mögliche 2te, 3te datei mit functionen drin???

gruss und dank vorab

EDIT: nutze 097 von anpera

Autor:  Jack [ Fr 16 Sep, 2011 19:15 ]
Betreff des Beitrags:  Re: Splitting, bzw. Auslagern

du hast laut Fehlermeldung entweder die dbconnect.php garnicht oder falsch eingebunden oder falsche Daten eingetragen

Autor:  Saaxa [ Fr 16 Sep, 2011 19:31 ]
Betreff des Beitrags:  Re: Splitting, bzw. Auslagern

Jack hat geschrieben:
du hast laut Fehlermeldung entweder die dbconnect.php garnicht oder falsch eingebunden oder falsche Daten eingetragen


doch doch... ohne das teilen der common.php läuft das spiel ja...
geht nur nicht, wie gesagt, wenn ich zB function charstats(....);{......} auf 2te datei auslagern will..

Saaxa hat geschrieben:
habe es in der common mit "include "funktion.php";" und auch mit "require_once("function.php");" ausprobiert und umgekehrt in der function.php auch mit include/require_onces

wie verbinde ich denn mögliche 2te, 3te datei mit functionen drin???

Autor:  Tidus [ Fr 16 Sep, 2011 22:50 ]
Betreff des Beitrags:  Re: Splitting, bzw. Auslagern

Hallo,

keine ahnung wie du es machst, aber ich habe meine charstats auch ausgelagert und das funktioniert anstandslos.

Du musst allerdings die include ganz oben an den anfang der common.php setzen, wie das mit dem Fehler zusammenhängt kann ich jetz so aus dem Stehgreif überhaupt nicht nachvollziehen.

grüße

Autor:  Jack [ Sa 17 Sep, 2011 13:32 ]
Betreff des Beitrags:  Re: Splitting, bzw. Auslagern

@Tidus also da muss ich dir jetzt widersprechen.. Bzw etwas widerlegen

MÜSSEN tut er es nicht. Ich habe das "include('lib/charstat.lib.php');" (in der die charstat funktion drin ist) genau an der stelle an der die funktion charstat{} vorher angefangen hat. Denn ganz oben hatte bei mir nie geklappt

Autor:  Saaxa [ Sa 17 Sep, 2011 22:38 ]
Betreff des Beitrags:  Re: Splitting, bzw. Auslagern

aha, da kommen wirder sache schon näher...

also da wo ich eine function aus der common ausbau einfach ein include hin von der datei wo die function nun drauf ist?

test ich mal

Autor:  Eliwood [ So 18 Sep, 2011 10:08 ]
Betreff des Beitrags:  Re: Splitting, bzw. Auslagern

Du musst darauf achten, was du auslagerst. Ohne Probleme auslagern und in den Kopf der common.php einbinden kannst du alle Funktionen - du musst aber penibel darauf achten, dass wirklich *nur* Funktionen und kein Programmablauf kopiert wird. Das ist bei dir nämlich passiert: Du hast (aller Wahrscheinlichkeit nach) Code ausserhalb von Funktionen kopiert, der mit der Datenbank kommunizieren möchte - und das, bevor die common.php sich mit der Datenbank verbunden hat. Schematisch sieht das ungefähr so aus: $this->bbcode_second_pass_code('', ' Binde [function.php] ein
Definiere Funktion soundso()
Definiere Funktion spam()
Mache das und das in der Datenbank
Ende [function.php]
[...]
Binde [dbwrapper.php] ein
Verbinde mit Datenbank')

Es wäre *extrem praktisch*, wenn du beide Dateien zur Verfügung stellen könntest - sonst kann man dir nur mit allgemeinen Tipps helfen.

Was für einen Editor verwendest du? Wenn es einer ist, der Codeteile "einklappen" kann - das wäre praktisch, um nur einzelne Funktionen cut&pasten zu können.

Autor:  Tidus [ Mo 03 Okt, 2011 23:21 ]
Betreff des Beitrags:  Re: Splitting, bzw. Auslagern

Jack hat geschrieben:
@Tidus also da muss ich dir jetzt widersprechen.. Bzw etwas widerlegen

MÜSSEN tut er es nicht. Ich habe das "include('lib/charstat.lib.php');" (in der die charstat funktion drin ist) genau an der stelle an der die funktion charstat{} vorher angefangen hat. Denn ganz oben hatte bei mir nie geklappt



Nagut _muss_ er nicht, aber bei mir funktioniert es, ich habe alle funktionen die ich ausgelagert habe, am anfang in die common eingebunden, weil es für mich so auch ordentlicher ist als überall irgendwo nen include be zeile 1234 etc. reinzumachen.

wenn es bei dir nicht funktioniert weis ich allerdings auch nicht wieso ...

PS: Ich habe meine Common.php nur aus einem grund teilweise ausgelagert, da mein Internet upload schwindend gering ist, war die Hochlade Zeit für die Common.php einfach nicht tragbar oder etragbar XD

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/