2011-10-01 72 views
0

它的工作原理,我想使它超快。 index page是非常靜態的,除非日期更新或地圖更新,否則幾天之內不會改變。所以應該可以非常快地進行優化,因爲它沒有太大的改變。我最近遷移到HRD和我的URI是montaoproject.appspot.com我改寫了這一點,以便它僅僅是Python和Django的/ HTML(無數據層之旅。)內存緩存?其他選項?減少JavaScript?我第一次確信,數據層沒有被觸及:如何讓我的主頁非常快速?

def get(self): 
    logo = '' 
    if get_host().find('.br') > 0: 
     cookie_django_language = 'pt-br' 
     logo = 'montao' 
    elif get_host().find('allt') > 0 and not self.request.get('hl'): 
     logo = '' 
     cookie_django_language = 'sv' 
    elif get_host().find('gralumo') > 0 \ 
     and not self.request.get('hl'): 
     cookie_django_language = 'es_AR' # learn 
    else: 
     logo = '' 
     cookie_django_language = self.request.get('hl', '') # edit 
    if cookie_django_language: 
     if cookie_django_language == 'unset': 
      del self.request.COOKIES['django_language'] 
     else: 
      self.request.COOKIES['django_language'] = \ 
       cookie_django_language 
     translation.activate(cookie_django_language) 
    loginmsg = '' 
    user = users.get_current_user() 
    twittername = None 
    client = OAuthClient('twitter', self) 
    if client.get_cookie(): 
     info = client.get('/account/verify_credentials') 
     twittername = info['screen_name'] 

    # seconds_valid = 8600 
    # self.response.headers['Cache-Control'] = "public, max-age=%d" % seconds_valid 

    if logo == 'montao': 
     self.render(
      u'montao', 
      host=get_host(), 
      twittername=twittername, 
      continue_url=get_host(), 
      loginmsg=loginmsg, 
      form_url=blobstore.create_upload_url('/fileupload'), 
      user_url=(api.users.create_logout_url(self.request.uri) if api.users.get_current_user() else api.users.create_login_url(self.request.uri)), 
      admin=users.is_current_user_admin(), 
      user=(users.get_current_user() if users.get_current_user() else '' 
       ), 
      logo=logo, 
      ) 
    else: 
     self.render(
      u'home', 
      host=get_host(), 
      twittername=twittername, 
      continue_url=get_host(), 
      loginmsg=loginmsg, 
      form_url=blobstore.create_upload_url('/fileupload'), 
      latest=Ad.all().filter('published =', 
        True).order('-modified').get(), 
      user_url=(api.users.create_logout_url(self.request.uri) if api.users.get_current_user() else api.users.create_login_url(self.request.uri)), 
      admin=users.is_current_user_admin(), 
      guser=(users.get_current_user() if users.get_current_user() else '' 
        ), 
      logo=logo, 
      ) 
+1

如果你使用Django,你有沒有考慮閱讀有關緩存Django文檔? https://docs.djangoproject.com/en/dev/topics/cache/。如果你不使用django,你有沒有考慮使用像Varnish這樣的現成的緩存工具? –

+0

我按照鏈接。謝謝 –

回答

1

通常情況下,我建議翻轉頁面,把index.html的作爲一個靜態文件,以及CSS和JS文件,然後製作一個AJAX請求到服務器,以填補在動態位。靜態文件加載非常快。

您可能仍然能夠通過使用客戶端JavaScript來確定要使用哪個徽標等,但獲取文件上傳表單會變得更慢,因爲create_upload_url需要發生服務器側。

+0

對於基本功能,我認爲我可以使一切變得靜止。我只需要翻譯和我可以使用靜態html而不是Django翻譯。 'create_upload_url'我可以移動到真正需要腳本的另一個頁面。我認爲最快的可以讓所有東西都靜態化,並用ETags或類似的方法緩存。動態位像日常更新+ logged_in_user.name,這些不是基本功能。我也不需要登錄用戶的歡迎消息「歡迎,{{logged_in_user.name}}'是不必要的糖果,我可以讓它變得更快,或者用AJAX編寫歡迎消息 –

+0

我不認爲修改在用戶的瀏覽器的行動開展,以適應一個相當任意的(「靜止」 VS「動態」)服務器端的區別是一個好主意。相反,你可以預先渲染在服務器端的內容,並將其投放到具有用戶非常低的延遲 - 請參閱[我的文章](http://blog.notdot.net/2009/10/Blogging-on-App-Engine-part-1-Static-serving)關於此主題的示例。 –

+0

Nick和我有這樣的討論,並同意不同意。預渲染是好的,如果沒有服務器啓動抗衡。如果你的網站獲得足夠的流量就永遠會有一個現場實例,預渲染可以工作。在另一方面,快速加載靜態內容會產生快速響應的錯覺。請使用任何適合您的方法。 –

2

我不知道蟒蛇,但如果它不更改幾天我相信你可以寫的東西上面轉換成HTML(比如每小時),然後只提供HTML版本。這將爲您提供可能的最大優化之一,因爲您的主頁完全不必由腳本引擎處理。

+0

是的,我可以讓我的cron作業,使HTML文件。我認爲那會非常快。非常感謝您的洞察力。它可能需要處理,因爲它使用的Django選擇語言的翻譯是在文件中的代碼,如'django.po',這樣的參數可以indicitate語言即'HL = el'希臘 –

+1

OK,您的主頁可能是一個Django腳本重定向到您支持的每種語言之一(index_en.html,index_de.html等)。您需要爲每種不同的語言每小時重新生成一次,但這對服務器來說不是太大的負載。結果仍然比使用腳本構建每個頁面的速度更快。 – halfer

+0

優秀。我只需要翻譯和我可以使用靜態html而不是Django翻譯。 –

相關問題