Ich habe vor kurzen den sehr interessante Talk Building Lanyrd von dem Lanyrd Co-Founder Simon Willison gesehen. Am Ende seines Talks zeigt/beschreibt er ein paar Tipps&Tricks die ich ziemlich gut finde. Damit ich diese nicht vergesse, will ich sie hier festhalten :)

Phantom Load Testing

  • Neue Version der Site auf eigenen Server/Cluster deployen
  • Alte Version der Site bestehen lassen
  • Unsichtbaren img link <img src='new_server/cluster' width=1 heigth=1>

cache_version

  • model.py
    class Conference(models.Model):
      ...
      cache_version = models.IntegerField(default=0)
      ...
      def save(self, *args, **kwargs):
        self.cache_version += 1
        super(Conference, self).save(*args, **kwargs)
          
  • template.html
    
    {% cache 36000 conf-topics conference.pk conference.cache_version %}
      the cached template code
    
      {{ conference.name }} ...
    
      {% for topic in conference.topics.all %}
        {{ topic.description }}
      {% endfor %}
    {% endcase %}
    
          

Signing

  • Django >= 1.4
  • zb Username im Cookie 'abspeichern' für 'You are logged in as foobar'. Somit kein Datenbankzugriff nötig
  • from django.core import signing
    
    signing.dumps({"foo": "bar"})
    
    signing.loads(signed_string)
    
    response.set_signed_cookie(key, value, ...)
    
    response.get_signed_cookie(key)
          

Hash static asset filesnames

  • global.js
    
    global.ed1d119.js
    
    static.foobar.host.com/js/global.ed1d119.js
    
  • Benefits
    • Far future expiry header
      Cache-Control: max-age=315360000
      Expires: Fri, 18 Jun 2021 00:00:00 -0000 GMT
      
    • Keine Client Cache Problem mit CSS oder JS (zb im IE)
    • Deployment von assets in advance
    • schnelles Rollback möglich, alte Version ist noch auf der Platte
  • ./manage.py push_static
    • Minifies JS and CSS
    • Renames files to include sha1(contents)[:6]
    • Push all assets to static server

mysql-proxy

  • Lua customisable proxy für mysql traffic
  • log.lua - logs out ALL queries

NoSQL == Not Only SQL

  • Suchen statt Datenbank Joins
  • Die Joins denormalisieren und Daten in Redis und Solr ablegen

MVC Mini Profiler

Global Settings are BAD

  • Feature Switches verwenden (gargoyle)
  • Einstellungen (DEBUG, TIME_ZONE, MIDDLEWARE, ...) in DB ablegen

Links
Talk + Slides http://lanyrd.com/2011/brightonpy-building-lanyrd/sgptt/
Lanyrd http://lanyrd.com
log.lua https://gist.github.com/1039751
MVC Mini Profiler http://www.codinghorror.com/blog/2011/06/performance-is-a-feature.html

Auf den Tag genau 2 Jahre nach meinen letzten Posting habe ich endlich mal wieder meinen Blog aufgefrischt.

Design: Twitter Bootstrap

Kommentarfunktion: Disqus (macht weiter so Jungs)

Noch immer powered by Python und Hyde.

Links