Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?"-Test (https://www.delphipraxis.net/91130-%5Bd4php%5D-ajax-beispiel-findet-ein-redraw-statt-test.html)

DelphiProgrammierer 30. Apr 2007 01:52


[D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?"
 
Seit gestern Abend teste ich die Delphi for PHP Trial und war besonders gespannt auf das Thema Ajax, d.h. Verzicht auf einen Redraw der kompletten Seite. Zum Glück gibt es ein Sample Project BasicAjax.phprj. Dies tut auch soweit.
Nur: Wie kann ich testen, ob wirklich nicht ge-re-drawed wird (auch wenn die Logik des Codes tatsächlich besagt, dass zumindest kein neuer Request an den Server geschickt wird).
Ich dachte mir folgendes: Ich habe einfach einen Label2 angelegt, der im OnShow-Ereignis des Formulars einen neuen (zufälligen) Wert zugewiesen bekommt.
Code:
               function IndexBeforeShow($sender, $params)
               {
                 $this->Label2->Caption=rand(1,1000);
                }
Tja, das Lustige ist halt jetzt, dass beim Drücken des Buttons das "Hello from Ajax" im farbigen Feld erscheint, aber eben auch Label2 seine Caption ändert. Ich habe mal Button1 und Label1 auf ein Panel1 gelegt und Label2 auf ein Panel2. Das Verhalten ist identisch.
Hat mir jemand eine Erklärung dafür? Wo liegt mein Denkfehler? Ich muss dazu sagen, dass das jetzt meine ersten Versuche überhaupt mit Ajax sind.

[edit=Phoenix]Delphi-Tags in Code-Tags geändert. Obwohl es zwar "Delphi" für PHP ist, kann unser Syntaxhighlighter DAS dann doch nicht :mrgreen: Mfg, Phoenix[/edit]

Phoenix 30. Apr 2007 07:55

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
 
Letzlich bedeutet AJAX folgendes:
  • Das JavaScript erzeugt ein XML - HTTP - Request Objekt
  • Dieses Objekt (im Browser) sendet einen speziellen http-Request an den Webserver
  • Das PHP-Script auf dem Server (in unserem Fall die VCL für PHP) erzeugt eine XML-Struktur als Antwort auf die Anfrage und schickt diese zum Browser
  • Das Javascript verwendet diese Antwort um die Inhalte auf der Webseite auszutauschen

Ganz kurz gesagt, werden durch AJAX nicht immer die ganze Seite, sondern nur die Änderungen an einer Webseite vom Server geholt.

Ich habe mich mit der VCL für PHP noch nicht beschäftigt, aber es kann sehr gut sein, dass das Script einfach in jedem Callback alle Controls aktualisiert, wenn sich dort etwas ändert.

DelphiProgrammierer 30. Apr 2007 14:44

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
 
Zitat:

Zitat von Phoenix
Ich habe mich mit der VCL für PHP noch nicht beschäftigt, aber es kann sehr gut sein, dass das Script einfach in jedem Callback alle Controls aktualisiert, wenn sich dort etwas ändert.

Ich sollte erwähnen, dass es keine Rolle spielt, ob ich den Label2 in OnShow oder BeforeShow verändere.
Vielleicht bin ich nur irritiert, dass diese Ereignisse überhaupt ausgelöst werden. Erst das OnShow bzw. BeforeShow-Ereignis führen ja zu einer Veränderung von Label2.

Worum es mir aber eigentlich geht: Wie könnte ein Beispiel (Test) aussehen, das beweist, dass bei einer Änderung unbeteiligte Controls auch tatsächlich nicht neu dargestellt werden?
Mir scheint es, es findet eben doch ein kompletter Redraw der Seite statt - nur eben kein Reload?

Phoenix 30. Apr 2007 15:55

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
 
In deinem Page-Lifecycle wird doch das Label geändert. Also ist es beteiligt, also wird dessen Inhalt neu Übertragen.

Nochmal: Das PHP-Script wird in jedem Fall komplett durchlaufen. Es werden jedoch lediglich die Änderungen an den Controls an den Client übertragen und dort angewendet.

DelphiProgrammierer 30. Apr 2007 16:16

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
 
Ist dann so ein "Beweis", dass kein Redraw stattfindet, gar nicht möglich, weil ich mit dem Experiment das Control verändere und damit den Redraw erzwinge?

OK, ich glaube, ich sehe ein, dass ich mich um andere Fragen innerhalb der D4PHP Evaluation kümmern sollte.
Z.B. vermisse ich ein DrawGrid oder StringGrid.

Phoenix 30. Apr 2007 16:33

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
 
Bitte spreche im Zusammenhang mit HTML / CSS nicht von Redraw. Da werden Elemente maximal ausgetauscht, aber nie, gar nie nicht, neu gezeichnet. Es gibt entweder einen kompletten Page Reload oder einen Callback / AJAX-Call.

Ich würde aber jede Wette eingehen, dass es auf dem Formular eine Eigenschaft gibt die Dir sagt, ob Du im Reload oder im Callback bist.

Wegen Controls: Ich denke nicht, dass eine Art DrawGrid im Bereich HTML / CSS Sinn machen würde.

Elvis 30. Apr 2007 16:37

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
 
Zitat:

Zitat von DelphiProgrammierer
Ist dann so ein "Beweis", dass kein Redraw stattfindet, gar nicht möglich, weil ich mit dem Experiment das Control verändere und damit den Redraw erzwinge?

Es geht darum, dass kein komplettes Neuladen der Seite nötig wird.
Natürlich kann sie neu gezeichnet werden, das stört ja auch nicht so krass wie ein Neuladen. (Fokusverlust, inhalten von Controls, Flackern, und vor allem WARTEN)

Bin aber glücklicherweise kein Webfritze, löcher' also lieber Phoenix. :)

DelphiProgrammierer 30. Apr 2007 16:44

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
 
Zitat:

Zitat von Elvis
Natürlich kann sie neu gezeichnet werden, das stört ja auch nicht so krass wie ein Neuladen. (Fokusverlust, inhalten von Controls, Flackern, und vor allem WARTEN)

Bin aber glücklicherweise kein Webfritze, löcher' also lieber Phoenix. :)

Dass ein Neuladen viel schlimmer wäre als ein Neu-Zeichnen ist völlig klar, deswegen ja Ajax. Mir geht es um das eventuelle Flackern. Wird man nachher bei größeren Projekten bequem arbeiten können oder flackert es jeweils, weil mit jedem Button-Click etc. die komplette Seite neu dargestellt wird.

Eigentlich geht es mir darum, inwiefern ich eine Delphi-Rich-Client-EXE durch eine D4PHP-Browser-Lösung (zumindest partiell) ersetzen kann oder welche Nachteile unvermeidlich sind.

DGL-luke 30. Apr 2007 16:51

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?
 
Hallo,

der Sinn von Ajax ist das Nachladen von dynamischen Inhalten, ohne die statischen Inhalte auch neuzuladen.
Da solltest du der VCL for PHP einfach vertrauen, die macht das schon richtig ;-)

EDIT: Vorausgesetzt, du baust das ganze richtig auf. Ein PHP-Script wird auf jeden Fall komplett ausgeführt. Nur wenn deine "index.php" die statischen Inhalte + ein JavaScript an den Webbrowser schickt, und dieses JavaScript dann die dynamischen Inhalte von einer "content.php?module=xy&id=42" nachlädt, haut das hin.

DelphiProgrammierer 30. Apr 2007 17:01

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?
 
Zitat:

Zitat von DGL-luke
Da solltest du der VCL for PHP einfach vertrauen, die macht das schon richtig ;-)

Nachdem ich gehört hatte (OT), dass bei IntraWeb der Zurück-Button nicht benutzt werden darf, was ich als KO-Kriterium werte, ist zwar Vertrauen gut, aber ich suche auch hier bei D4PHP nach eventuellen KO-Kriterien. Wenn irgendwelche elementaren Dinge nicht userfreundlich täten, dann könnte ich mit meinen Tests sofort aufhören.
Aber ich nehme Dich beim Wort, stelle die in diesem Thread diskutierten Experimente ein und vertraue, was das Thema Reload und Flackern anbelangt, den Fähigen der PHP-VCL von D4PHP.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz