Slow loading (was Re: [PHP] Re: How to run one php app from another? RECAP)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



PHP tends to send output in content transfer encoding "chunked" (I think
this is true when output buffering is on).  <?php ?> blocks usually have
their output sent in one chunk.  The browser renders the chunks as they
come, but oftentimes they delay rendering until a sensible number of
HTML closing tags have arrived.

Now, on to the real answer to your question.  No, under normal
conditions you can't have your users' browsers interact with a live PHP
script.  Web programming is Web REQUEST->PHP RESPONSE, and you must use
support technology (like sessions, cookies or manual carryover of form
data) to make session state persistence possible.

In other words: no, if the user clicks a button, it doesn't "call a
function or branch in an if/then control statement" immediately.
Rather, an entirely new PHP process, totally unaware of the former one,
is called upon to service that request.

Now, while in the PHP realm, there *is* one way to have your web client
follow the pattern "REQUEST->RESPONSE,RESPONSE,RESPONSE" ad infinitum. 

This is called slow loading (or Comet), and basically involves:

- having the web client load a PHP script through a hidden IFRAME
- having the PHP script *never* finish execution (unless, of course, the
user hits Stop in his browser window), and continually send data through
the connection (plus one ob_flush() after each chunk just to be
politically correct).  Usually, data payloads ("page updates") are to be
carried on via JavaScript snippets, because that's about the only
technology that allows for browser state manipulation "in vivo", I mean,
live as the connection goes and never finishes.

Given a properly architected solution, this kind of technology can
outperform the famous AJAX, both in response times and in server load.
Given a poorly done solution, this kind of technology can be as bad or
dramatically worse than AJAX.

Plus, you gotta remember that PHP usually has a maximum duration on
scripts, so you need to architect around that (which isn't hard to do,
namely you have a counter and as the counter approaches the maximum load
time, just a few seconds earlier you send a <script>location.href
= ...</script> to have the browser reload the IFRAME, and exit() your
PHP script.



El vie, 16-06-2006 a las 17:04 -0400, tedd escribió:
> At 3:52 PM -0500 6/16/06, Richard Lynch wrote:
> >On Fri, June 16, 2006 8:26 am, tedd wrote:
> >> At 2:35 PM +0200 6/16/06, Barry wrote:
> >>>But once output is made. You can't remove it.
> >>>
> >>>That isn't possible with PHP.
> >>
> >> I think I get it now.
> >>
> >> PHP does everything before the user see's anything.
> >
> >This is not quite 100% correct...
> >
> >PHP output is buffered, possibly by PHP with ob_start and friends, and
> >then possibly by Apache, and then possibly by TCP packets and their
> >ordered arrival (or not) and then by the browser, but...
> >
> >It is entirely possible to construct a trivial example proving that
> >PHP can still be runing and finishing output while the browser has
> >rendered the beginning of the page.
> >
> >You can mostly THINK of it as PHP finishing before user sees anything,
> >as that will get you in a lot less trouble than thinking the other way
> >around, but to be pedantic, you should be aware it's not quite that
> >simple.
> 
> Good explanation and point.
> 
> How's this for the obvious -- the user doesn't see anything until php is done with it. That doesn't mean that the entire operation must be finished, but rather anything that the user see's (while and after loading) php has already finished with.
> 
> That about right?
> 
> tedd
> -- 
> ------------------------------------------------------------------------------------
> http://sperling.com  http://ancientstones.com  http://earthstones.com
> 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux