SORU
15 NİSAN 2009, ÇARŞAMBA


Django tabanlı proje A/B testi hakkında bir fikriniz var mı?

Şimdi Django tabanlı projemiz İçİn A/B testi yapmaya başladı. En iyi uygulamalar hakkında ya da yararlı bilgi bu Bilgi, Bu A/B test edebilirim.

İdeal olarak her yeni test sayfası tek bir parametre(sadece Gmail gibi) ile tanır. mysite.com/?ui=2 farklı bir sayfa ver. Her görünüm için 'uı' parametresi değeri. göre farklı şablonlarını yüklemek için bir dekoratör yazmak istiyorum. Ve ben zor dekoratörler herhangi bir şablon kod adları. Nasıl urls.py url kalıbı olacak?

CEVAP
15 Mayıs 2009, Cuma


A/B test kodu içine dalış önce ne yapmaya çalıştığını yararlı bir adım geri ve soyut. Tam olarak bir test yapmak için neler gerekir?

  • Bir Koşul olan Hedef
  • En az iki farklı Yolları Amaç bu Durumu karşılamak için
  • Yolu aşağı göndermek izleyiciler için bir sistem
  • Test Sonuçları kaydetmek için bir sistem

Bu düşünceyle uygulaması düşünelim.

Amaç

Ne zaman biz düşünmek hakkında bir Gol web'de Genellikle ortalama bir kullanıcının ulaştığı belli bir sayfa ya da onlar tam bir belirli bir eylem, örneğin başarıyla kayıt olarak bir kullanıcı veya almak için ödeme sayfası.

Django bir görünüm içinde birkaç şekilde - belki de safça, bir Hedefe ulaşıldığı zaman bir işlevi çağırmadan model edebiliriz:

    def checkout(request):
        a_b_goal_complete(request)
        ...

Ama bunun bir yararı yok, çünkü biz gerekecek Ekle o kodu her yerde ihtiyacımız var - artı, eğer kullanıyoruz herhangi takılabilir uygulamalar tercih değil, düzen kendi kodu eklemek bizim A/B testi.

Nasıl doğrudan düzenleme görünümü kod olmadan/B Bir Gol tanıtabilir miyiz? Ne bir Katman?

    class ABMiddleware:
      def process_request(self, request):
          if a_b_goal_conditions_met(request):
            a_b_goal_complete(request)

Bu bize/B Bir Gol sitede herhangi bir yerde izlemek için izin verecek.

Nasıl bir Amaç bu koşulların olduğunu biliyor muyuz? Uygulama kolaylığı için bir Amacı vardır biliyoruz telkin edeceğim koşulları bir kullanıcı belirli bir URL yolu ulaştığında bir araya geldi. Bir bonus olarak elimizde bir iç görünüm kirletmeden bu ölçebiliriz. Bizim örnek bir kullanıcı kayıt gitmek için bu hedefe kullanıcı URL yolunu ulaştığında karşılandı söyleyebiliriz:

kayıt /tam/

Biz 7 ** tanımlamak:

     a_b_goal_conditions_met(request):
       return request.path == "/registration/complete":

Yolları

Django Yolları hakkında düşünmeye zaman doğal farklı şablonlar kullanma fikri atlamak için. İster başka bir şekilde keşfedilmeyi kalır. A/B test, iki sayfa ve tedbir arasında küçük farklar sonuçlar. Bu nedenle hangi Amaç için tüm Yolları aşmalı tek temel Yolu bir şablon tanımlamak için en iyi yöntem olmalı.

Nasıl bu şablonları işlemek gerekir? Bir dekoratör muhtemelen iyi bir başlangıç - Django içinde en iyi yöntem bir dekoratör zamanında bu parametre değiştirebilir görüşleriniz için 9 ** bir parametre vardır.

    @a_b
    def registration(request, extra_context=None, template_name="reg/reg.html"):
       ...

Bu dekoratör ya da kaydırılan işlevi introspecting ve template_name değişken değiştirme veya bir yerden doğru şablonları (manken gibi) bakarak görebilirsin. Eğer her fonksiyon için dekoratör eklemek istemiyorduk ama bizim ABMiddleware bir parçası olarak bunu uygulayabilir miyiz:

    class ABMiddleware:
       ...
       def process_view(self, request, view_func, view_args, view_kwargs):
         if should_do_a_b_test(...) and "template_name" in view_kwargs:
           # Modify the template name to one of our Path templates
           view_kwargs["template_name"] = get_a_b_path_for_view(view_func)
           response = view_func(view_args, view_kwargs)
           return response

Ayrıca bazı şekilde eklemek gerekir manzarası A/B testleri vardır parça vb koşmaya devam etmeliyiz.

İzleyiciler bir Yolu aşağı göndermek için bir sistem

Teoride kolay ama hangisi en iyisidir net değil çok farklı uygulamaları var. Bildiğimiz iyi bir sistem gerekiyor bölmek kullanıcılar eşit aşağı yolu - Bazı karma yöntem kullanılmalıdır - Belki de kullanabilirsin modül memcache karşı bölü numarası Yolları - belki daha iyi bir yolu.

Test Sonuçları kaydetmek için bir sistem

İhtiyacımız rekor kaç kullanıcıların neler Yolunu buluruz da gerek erişim için bu bilgileri kullanıcıya ulaştığı topa ihtiyacımız var edebilmek için ne Yol geldikleri için bir araya geldi Koşul Amacı) - saçmalıktan başka bir tür Model(ler) için kayıt veri ve ya Django Oturumları veya Çerezleri için geçerli Yolu bilgi kadar, kullanıcı uygun Hedef durumu.

Kapanış Düşünceler

Verebileceğim bir sürü sahte kod uygulamak için A/B test Django - yukarıda olduğunu asla tam bir çözüm ama iyi bir başlangıç oluşturma yolunda bir yeniden çerçeve için A/B test Django.

Başvuru için GitHub Paul Mar Yedi Dakika/Bs bakmak isteyebilirsiniz - yukarıda ROR versiyonu! http://github.com/paulmars/seven_minute_abs/tree/master

< / ^ hr .

Güncelleme

Google Web Sitesi Optimize Edici, daha fazla düşünme ve araştırma ile ilgili yukarıdaki mantık kocaman delikler var gibi görünüyor. Farklı şablonlar Yolları temsil etmek için kullanarak tüm görünümü (veya eğer görünümü önbelleğe her zaman aynı yolda hizmet edecektir!) önbellekleme Ara. Bunun yerine, kullanma Yolları, I would yerine çalmak BÜYÜK terminoloji ve kullanma fikri Combinations - bir kısmı belirli bir şablonu değiştirmek - örneğin, değişen <h1> etiketi olan bir site.

Çözüm JavaScript aşağı kılacak şablon etiketler içeriyor. Sayfa tarayıcıya yüklendiğinde JavaScript Olası Kombinasyonları getirir hangi sunucuya bir istekte bulunur.

Önbellekleme koruyarak, sayfa başına birden fazla kombinasyonları test edebilirsiniz bu şekilde!

< / ^ hr .

Güncelleme

Hala şablonu değiştirme için bir oda, örneğin, tamamen yeni bir ana sayfa tanıtmak demek ve eski ana - hala şablonu değiştirme tekniği kullanmalısın karşı performansını test etmek istiyorum. Akılda tutulması gereken şey, bir yol bulmak için X sayfanın önbelleğe alınan sürüm numarası arasında geçiş yapmak için gidiyor. Bunu yapmak için kendi A/B testi istenen URL üzerinde çalışan olup olmadığını görmek için standart önbelleğe alınan katman geçersiz kılmak gerekir. O zaman doğru önbelleğe alınan sürüm göstermeyi tercih olabilir!!!

< / ^ hr .

Güncelleme

Temel/B test Django için takılabilir bir uygulama hayata geçirdim yukarıdaki fikirleri kullanarak nitelendirdi. Şunu Github alabilirsiniz:

http://github.com/johnboxall/django-ab/tree/master

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bogdan Gabriel

    Bogdan Gabri

    5 Aralık 2006
  • Elliot Davin

    Elliot Davin

    28 Kasım 2008
  • rekjavicxxx

    rekjavicxxx

    28 EKİM 2007