[Seaside-dev] Comet request handling / Ajax performance

Andreas Raab andreas.raab at gmx.de
Thu Aug 5 07:40:57 UTC 2010


On 8/5/2010 12:27 AM, Gerhard Obermann wrote:
> I tried the AjaxBench with Seaside 3.0RC without any modifications and I
> get approx. 46 req/sec.
> I dont't see the drop to 1 req/sec

Interesting. What browser/platform/adaptor were you using? With the 
standard Seaside 3 WAComancheAdaptor I see FF 3.6 on Windows dropping to 
1 req/sec; Chrome 5 / Windows appears to run at 6-7 req/sec but in very 
strange bursts. IE8 doesn't display anything. That's all the browsers I 
have right now :-)

Cheers,
   - Andreas

> On Wed, Aug 4, 2010 at 6:21 AM, Andreas Raab <andreas.raab at gmx.de
> <mailto:andreas.raab at gmx.de>> wrote:
>
>     Hi -
>
>     I have a couple of questions about Comet request handling and
>     related performance issues. Comet currently insists on having a
>     subclass of WAStreamedResponse but if one looks at the code more
>     closely it is pretty clear that there's a bunch of unneeded
>     complexity here. It seems to me that what Comet wants is access to
>     the stream so it can push the data; but since the Comet request's
>     life cycle is such that it never returns to the caller, the use of
>     WAStreamedResponse is quite simply overkill. The same result can be
>     achieved by having a WAResponse return a suitable #cometStream
>     (i.e., the external socket stream to write data to) and prevent
>     WABufferedResponse from inserting the Content-Length header when
>     pushing out the initial response.
>
>     At this point, any subclass of WAResponse that can provide a
>     suitable cometStream is capable of supporting Comet. I've
>     implemented this as a proof of concept in a subclass of
>     WABufferedResponse (see attached CometRequests.cs) that can be used
>     by any server adaptor that has a SocketStream available, such as
>     Comanche.
>
>     You might wonder why I care about this. Simply put: Ajax response
>     times. I've been trying to see if one can get interactive update
>     rates using Ajax updaters and/or Comet but the design of
>     WABufferedResponse is such that that it pretty much forces the
>     server to close the connection after each request. Which kills all
>     the performance for Ajax requests since Ajax performance pretty much
>     exclusively relies on persistent HTTP connections (in my experiments
>     the performance drops from a nice steady 50 req/sec using a
>     persistent HTTP connection to 1 req/sec when the connection is
>     closed). I'm actually a little surprised that nobody has complained
>     yet about the abysmal performance of Ajax :-) And of course this
>     only gets worse when you do it over https which I eventually intend
>     to do.
>
>     So, right now the alternative is that your server will EITHER
>     support Comet OR efficient Ajax updates but not both. I can almost
>     certainly work my way around this for WebServer but what I'm curious
>     about is if people here think this should be fixed in Seaside in
>     general or not. It depends a little on how you value both Comet and
>     Ajax and how important wide and efficient support for either one is.
>     I won't invest any more time in this for now, but there are a couple
>     of obvious further simplifications given that WAStreamedResponse
>     appears to be unused outside of Comet, and of course WACometResponse
>     could be trivially folded into WABufferedResponse by pushing the
>     cometStream up.
>
>     For comparison, I'm also attaching my little Ajax benchmark. If you
>     run it with WAWebServerAdaptor you should see a nice steady 50
>     req/secs whereas all other adaptors drop to about 1 req/sec.
>
>     Cheers,
>       - Andreas
>
>     _______________________________________________
>     seaside-dev mailing list
>     seaside-dev at lists.squeakfoundation.org
>     <mailto:seaside-dev at lists.squeakfoundation.org>
>     http://lists.squeakfoundation.org/mailman/listinfo/seaside-dev
>
>
>
>
> _______________________________________________
> seaside-dev mailing list
> seaside-dev at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/seaside-dev


More information about the seaside-dev mailing list