uhm. download() lets web2py stream the file instead of nginx. fast_download() too, it just skips the part that handles the authorization logic and adds correct cache headers, but this will lead to faster loading of pages from the 2nd time the user accesses the page: it won't change a thing in the 1st request.
Why don't you just put those images in "static/something" ? The other very smart thing to do is using http://wiki.nginx.org/X-accel . This basically enables nginx to "intercept" an empty page with some special headers (so web2py does it without even accessing the file) and take care of serving the file instead of your application. This will probably speed up your 1st request (and releaves some pressure from the web2py process), but the hard-limit of bandwith will of course remain there, no matter what. Your fast download will then kinda look like def fast_download(): .... filename = os.path.join(request.folder,'uploads',request.args(0)) response.headers['X-Accel-Redirect'] = os.path.join(request.folder, 'uploads', document.file) return '' On Thursday, August 22, 2013 10:06:34 PM UTC+2, Adi wrote: > > > > Hello everyone. > > Am trying to populate a page with around 20 dynamic images from the upload > folder, but they get rendered extremely slow, even as thumbnails. Tried > using a suggest approach from the forum "fast_download()", but without luck > in my case. > > Anyone has a suggestion, what should I be looking at, and how to improve > the speed of loading dynamic images? > > Platform: clean ubuntu node with web2py and nginx (no caching setup, 1Gb > of ram). Nothing else is running on it. > > Performed following three tests: > > Regular download(): > Compressed images (through PIL, with extension .thumbnail): > http://www.webpagetest.org/result/130822_1F_WAD/ (500Kb in 25 sec) > Regular size images: http://www.webpagetest.org/result/130822_5K_ZSX/(3Mb in > 26 sec) > > Fast_Download() with regular size images: > http://www.webpagetest.org/result/130822_C3_1008/ (3Mb in 28 sec) > > Tried to implement caching in nginx site config, but that disabled images > completely, and I couldn't get it to work: > > #location ~* ^.+\.(jpg|jpeg|gif)$ { > # root /home/www-data/web2py/applications/; > # access_log off; > # expires 30d; > #} > > or > > #location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { > # access_log off; > # log_not_found off; > # expires 180d; > #} > > Fast download used: > def fast_download(): > session.forget(response) > cache.action(time_expire=604800)(lambda: 0)() > > # very basic security (only allow fast_download on > your_table.upload_field): > if not request.args(0).startswith("product.image"): > return download() > > filename = os.path.join(request.folder,'uploads',request.args(0)) > > return response.stream(open(filename,'rb')) > > > Segment of the code that displays the images: > > <div id="prod_img" itemprop="image"> > {{if p.image:}} > <a href="{{=product_link}}"> > {{ > #big_regex = re.compile('|'.join(map(re.escape, > IMAGE_EXTENSIONS))) > #tmb_image = big_regex.sub(INDEX_TMB, p.image) > }} > <img src="{{=URL('download', > args=p.image, scheme=True, host=True)}}" > alt="{{=product_name}}" href="{{=product_link}}" > height="180px" width="160px"/> > </a> > <img data-src='{{=tmb_image}}' > > {{pass}} > </div> > > > > > > -- --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.