rfc822() vs. rfc1123_date()

16 August 2007   0 comments   Zope

Powered by Fusion×

To set the Expires header in my web application I used to use the Zope DateTime function rfc822() which doesn't return the date in GMT format. Here's how I used it:

>>> from DateTime import DateTime
>>> hours = 5
>>> then = DateTime() + hours/24.0
>>> then.rfc822()
'Thu, 16 Aug 2007 20:43:59 +0100'

Then I found out (from using YSlow) that it's better to use the GMT format (RFC 1123), and here's how to do that in Zope:

>>> from App.Common import rfc1123_date
>>> from time import time
>>> rfc1123_date(time() + 3600*hours)
'Thu, 16 Aug 2007 19:45:12 GMT'

(notice that even though my locale is here in London, because of the summer time an hour is added)

Well, I thought I'd do a quick benchmark to compare the two approaches because I suspected that rfc1123_date() was faster because you don't have to create a DateTime() object. Here's what the two methods looked like to benchmark it:

   def foo1(self, hours):
       t0 = time()
       now = DateTime()
       then = now+float(hours/24.0)
       return time()-t0

   def foo2(self, hours):
       t0 = time()
       x = rfc1123_date(time() + 3600*hours)
       return time()-t0

The result was as I expected, rfc1123_date() was much faster. Here are the results for 10,000 iterations:

Times1: 1.25969386101
Times2: 0.16867017746


But a benchmark on something like this is a bit non-sense. Why? Because even if there's a 7 times difference, you'll only ever need one of these iterations per page. Not 10,000. The first function foo1() takes 0.00013 seconds.

Conclusion, worry more about getting the right output rather than speed at this kind of level.


Thank you for posting a comment

Your email will never ever be published

Related posts

html2plaintext Python script to convert HTML emails to plain text 10 August 2007
Printer usability problem 24 August 2007
Related by keywords:
Fastest way to uniqify a list in Python 14 August 2006
Local Django development with Nginx 11 October 2010
Optimization of getting random rows out of a PostgreSQL in Django 23 February 2011
Fastest way to thousands-commafy large numbers in Python/PyPy 13 October 2012
'Cache-Control' or Expires 16 September 2005
Date formatting in python or in PostgreSQL 20 July 2004
PostgreSQL, MySQL or SQLite 04 April 2004
Gzip and Slimmer optimization anecdote 30 January 2007
Custom CacheMiddleware that tells Javascript a page is cached in Django 24 August 2009
django-fancy-cache with or without stats 11 March 2013
To $('#foo p') or to $('p', $('#foo')) 24 February 2009
Nice date input 17 October 2003