On Thursday, September 15, 2011 11:35:24 AM UTC-4, Jonathan Lundell wrote:
>
> On Sep 15, 2011, at 8:04 AM, Ross Peoples wrote:
>
> > The way it is now, the JSON runs first, then the XML. I never interleaved 
> the two because I wanted to keep it simple. I can make the XML run first 
> instead and do another test:
> > 
> > FINAL RESULTS
> > ==================================
> > JSON-RPC Average Time: 59.91 ms
> > JSON-RPC Total Time Taken: 10007.80 ms
> > XML-RPC Average Time: 21.84 ms
> > XML-RPC Total Time Taken: 6201.04 ms
> > Result: XML won by: 38.07 ms (274.3% faster)
> > 
> > No change when I made XML run first, before JSON.
>
> Thanks for the summary, Ross. Comments below.
>
> > 
> > 
> > SUMMARY OF THREE ISSUES
> > ========================
> > 
> > 1. Auth and JSON-RPC
> > -------------------------------------
> > 
> > This problem stems from enabling Auth:
> > 
> > auth = Auth(db)
> > auth.define_tables()
> > 
> > Whenever Auth is enabled, the average time per request for XML-RPC and 
> JSON-RPC are about 45 ms and 65 ms, respectively. However, whenever Auth is 
> not enabled, these times change dramatically, but only for XML-RPC. The 
> average time per request for XML-RPC and JSON-RPC is now about 20 ms and 60 
> ms, respectively. The time it takes for JSON-RPC requests to run drops about 
> 5 ms per request, however, the time XML-RPC requests drops by 25 ms (more 
> than half).
>
> Am I correct that pretty much the same thing happens if you turn off the 
> define_tables call?
>
Yes, when I am 'disabling' auth, I am basically removing 
auth.define_tables() and auth = Auth(db)
 

> A side note: one table (signatures) gets defined in the Auth() call 
> regardless. I didn't see anything else in Auth.__init__ that could account 
> for much time. The HMAC key logic by default reads a file from the file 
> system, but presumably that's thoroughly cached by the OS.
>
> It's not so surprising that bypassing the Auth logic speeds things up a 
> bit, though 25ms seems a bit high for what it's doing. But I can't see any 
> explanation for a differential effect between JSON and XML.
>
> > 
> > 2. Unicode and JSON-RPC
> > ---------------------------------------
> > 
> > As for the unicode issue, I noticed this as well. I also tried going back 
> to simplejsonrpc, but that also returns strings as unicode. Are unicode 
> strings a requirement of the JSON-RPC protocol?
>
> I don't actually see a problem with this. In contrib.simplejsonrpc we 
> specify a charset of utf8 on the content-type header. Just for idle 
> curiosity you could try that and get rid of the charset specifier and see if 
> that's the trigger. But we actually want that.
>
I removed the utf8 part of the content-type and it still returns as unicode. 
I don't have a problem with unicode, as I think this what it should be 
doing. I am equally interested in why XML doesn't do this.
 

> What I don't understand is why local strings like web2py_path are unicode 
> under JSON but not under XML. 
>
> > 
> > 
> > 3. SSL and web2py's simplejsonrpc
> > ----------------------------------------------------
> > 
> > Finally, on a note about web2py's simplejsonrpc implementation, it runs 
> much slower over SSL, possibly because it makes a new connection for each 
> request, whereas jsonrpclib and xmlrpclib leave the connection open for 
> subsequent requests.
>
> Yes, that's certainly what's going on. 
>
>
> The other big performance hit is that 2-3 places in web2py we do this:
>
> import contrib.simplejson as simplejson
>
> That really needs to change to something like this (with corresponding 
> changes to the code)
>
> try:
>     import json                             # try stdlib (py2.6)
> except ImportError:
>     try:
>         import simplejson as json           # try external module
>     except:
>         import gluon.contrib.simplejson as json   # fall back on 
> pure-Python module
>
> The problem is that we need to be using the optimized C libraries when we 
> can (that's why XML is faster, I think). But the copy in contrib is pure 
> Python. It works, but it's slow.
>

I had a feeling this might have something to do with it. I wonder if 
preferring the pure Python libraries is adding to Problem #1.

Reply via email to