Mailinglisten-Archive |
"Listor, Listornet" wrote: > wenn du php programmieren kannst wirst du wohl noch das > bischen code verstehen oder ist das zu hoch ? das 'bischen' code sieht recht übel aus, ich war mir auf den ersten Blick nicht einmal sicher ob/wann das flush() überhaupt erreicht wird > meine frage war doch wohl klar formuliert ?!? die Frage ja, der Code nein > ich hab die funktion mitgeschickt damit man eventuelle > fehler entdeckt es ist in solchen Fällen üblich, sich die Mühe zu machen, den Code auf das Wesentliche zu reduzieren, damit eventuelle Freiwillige, wenn sie schon das Debugging für dich übernehmen, nicht zu viel unnötige Zeit investieren müssen ... ok, ich habe mir jetzt die Mühe gemacht, das Rundherum um das flush() zu durchschauen und was muß ich da sehen? Busy-Waiting! So etwas ist zunächst eimal nur schlechter Stil, in einer Multitasking- und insbesondere Multiuser-Umgebung dagegen sträflich. D.h. du verbrauchst je ausgegebenem Zeichen eine ganze Sekunde CPU-Zeit(!), und das außerdem noch für einen äußerst zweifelhaften Zweck, den der Anwender auf der Browserseite weis i.A. schon selbst, wie schnell er lesen kann. Wenn's denn trotztdem sein muß, dann bitte so: function einZeichenJeSekunde($wort) { if(!empty($wort)) { $len = strlen($wort); for($i=0;$i<$len;$i++) { echo substr($wort,$i,1); flush(); sleep(1); } } } das ist erstens Resourcen-sparend, zweitens hätten wir uns die vorigen beiden Mails sparen können > und mir sagt woran es liegen könnte, > daß flush beim ersten aufruf der seite nicht läuft aber wenn > man die seite refresht dann doch so wie es soll. Auf dem Weg vom Script zum Browser gibt es mehrere Instanzen, die ihre eigenen Puffermechanismen betreiben, um eine effektive Übertragung zu gewährleisten flush() leert nur den PHP-Internen Puffer, danach müssen noch der Webserver, eventuelle Proxies und der Browser durchlaufen werden. Oft werden Eingangsdaten zb.b nur Zeilenweise verarbeitet, damit nicht für jedes einzelne Byte ein TCP-Packet auf die Reise geschickt werden muß (in dem dann 98.5% der Minimalgröße nicht genutzt werden, sondern als Ballast mitwandern) dazu kommt noch, das bei einem einfachen Refresh im Browser oft einfach nur der bereits vorhandene HTML-Code noch einmal angezeigt wird, ein echter Reload läßt sich zum Bespiel bei Netscape mit SHIFT-Reload erzwingen, den IE kenn ich nicht Lange Rede, kurzer Sinn: versuchs mal mit 'nem '\n' hinter dem Echo und hoffe, das dein Provider niemals auf die Idee kommt, nach verbrauchter Rechenzeit abzurechnen <grummel/> PS: fällt "Obenquoter" eigentlich in die selbe Kategorie wie "Schattenparker"? -- Hartmut Holzgraefe hartmut_(at)_six.de http://www.six.de +49-711-99091-77 fax:-99
php::bar PHP Wiki - Listenarchive