This thread from the developers list a few months ago may interest you: 
https://groups.google.com/d/topic/web2py-developers/rYKg1TUXem0/discussion
 
Anthony

On Monday, August 15, 2011 8:18:30 PM UTC-4, Kevin Ivarsen wrote:

> Hi Anthony, 
>
> Thanks for the quick response. 
>
> I do use migrate=False already. I have not tried bytecode compiling 
> the app, but earlier today I did a quick test: I wrapped the contents 
> of my long db.py in an "if False:" block (causing it to compile, but 
> not run, the code for each request), and compared this to an empty 
> db.py (nothing to compile or run). It looks like compiling the code 
> took about 7ms - about 5% of the total overhead. I don't think 
> bytecode compiling will produce the dramatic improvement that I'm 
> hoping to find (though I will of course try it when I get a chance.) 
>
> Conditional models might help some - at the expense of additional 
> planning and maintenance required during development. In any case, I 
> still worry about the number of tables that need to be shared across 
> at least two controllers, and the lower bound on performance those 
> will impose. I was hoping to find a more global way to speed up 
> models. 
>
> Optimizing DAL creation would be an interesting area for future web2py 
> development, IMHO. When I get some more time I might try to look at 
> this in more detail. 
>
> Cheers, 
> Kevin 
>
>
>
> On Aug 15, 3:59 pm, Anthony <abas...@gmail.com> wrote: 
> > First, have you set migrate to False for all tables, and have you 
> bytecode 
> > compiled the app? That should speed things up. 
> > 
> > Also, do you need all 70 tables for any requests, or can they be broken 
> up 
> > based on the particular controller/function called? If so, you may speed 
> > things up with conditional models. Any files in /models/controller1 will 
> > only be executed on requests for controller1, and any files in 
> > /models/controller1/function1 will only be executed on requests for 
> > controller1/function1. (We're working on more general functionality for 
> > conditional models that won't be based solely on the controller and 
> > function.) 
> > 
> > Anthony 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > On Monday, August 15, 2011 6:30:06 PM UTC-4, Kevin Ivarsen wrote: 
> > > Hello, 
> > 
> > > I'm using web2py with a relatively large legacy database. We have 
> > > about 70 tables, and models/db.py is close to 1000 lines long. 
> > 
> > > The problem I'm facing is that all of these Field() constructors and 
> > > define_table() calls take about 150-200ms to execute, and this 
> > > overhead occurs each time any request is made to web2py. Compare this 
> > > to a minimal web2py app, which might have a (reasonable) 10-30ms of 
> > > overhead before response data starts flowing to the client. 
> > 
> > > I was hoping that a simple solution would be to declare the DAL 
> > > structure once in an importable module, which would be run once on 
> > > web2py startup rather than at each request. I could then deepcopy it 
> > > in my model file (which I think would be faster than all the calls to 
> > > define_table(), Field(), etc.), and then establish a connection to the 
> > > database from this copied DAL. 
> > 
> > > Unfortunately, there are a few problems with this: 
> > >   1. If a DAL instance is to be connected to the database, it must 
> > > happen in the constructor. It doesn't seem that you can do "db = 
> > > DAL(None)" and then establish a connection after the fact. Also, it 
> > > looks like some db-specific behavior is set up in the DAL constructor 
> > > based on the connection URL - this wouldn't happen in the case of 
> > > DAL(None). 
> > 
> > >   2. Table and Field instances have a reference to db, so it seems 
> > > that define_table() needs to be called *after* the DAL connection has 
> > > been established in order to set up these references. 
> > 
> > > I suppose it would be possible to deepcopy a DAL(None) instance that 
> > > has been established with Tables and Fields, and monkey-patch the db 
> > > references thoughout the DAL structure, but chances seem good that 
> > > this will create subtle bugs down the road if the internal DAL 
> > > implementation ever changes. 
> > 
> > > Can anyone suggest a better way to speed up DAL creation for large 
> > > schemas? 
> > 
> > > Thanks, 
> > > Kevin

Reply via email to