2017-07-18 113 views
0

我將大的json文件加載爲我的頁面的靜態文件。這需要幾秒鐘。 由於閱讀和經驗豐富,Django(從runserver開始)在我的網站刷新時再次加載這些文件,這不是我想要的,因爲加載時間。不要使用runserver重新加載靜態文件,django

我怎樣才能最輕鬆地允許這種行爲,以便文件只在服務器啓動時加載一次?

在此先感謝!

回答

0

首先需要注意的是:

  1. 是要明白,你問到的東西覆蓋用戶故意這樣做是很重要的。點擊刷新意味着客戶端特別要求服務器再次加載所有內容,這就是整個問題。
  2. 瀏覽器通常自行緩存頁面,這會讓您的結果變得可疑 - 也許您以某種方式禁用了緩存?

這就是說,它可能是有用的緩存在客戶端上的數據大塊的,如果你知道他們不改變(即刷新,將獲得完全一樣的頁面),他們不緩存出於某種原因我不熟悉。問題是因爲它是我們正在討論的頁面本身,並且你想阻止它被下載。作爲純粹的客戶端意味着這必須在JS中完成,JS在頁面下載之後開始運行(即使在加載之前) - 這是你想要阻止的。所以實現這個配方可能是:

  1. 頁面本身(說索引)實際上是一個空白頁面(也許加載消息),只能運行JS。
  2. 檢查是否存在使用'大'JSON存儲的cookie。
  3. a。如果你找到它 - 用document.write覆蓋頁面。
  4. b。否則重定向到真正的頁面滿載。
  5. 當頁面加載時,它當然應該設置cookie。

的實現是很簡單的:

  1. 使用Djangourls文件重定向大型JSON請求說,只有含JS指數模板。要傳遞調用的原始頁面的名稱,可以直接在模板的腳本標記中設置變量(使用Django {{ }}模板變量)。請注意,您需要一種方法來跳過此操作並強制加載,例如POST變量。
  2. 用於創建,編寫和閱讀cookie的JS遍佈互聯網。基本上純JS設置一個cookie,並解析decodeURIComponent(document.cookie)讀取它。結帳W3Schools的一些功能,使這個很容易做,或谷歌與jquery如果這是你的口味等
  3. a。一旦你解析了cookie document.write(JSON.parse(json))將立即加載文件,如果cookie存在。
  4. b。否則,只需使用某個POST標誌進行標準重定向即可強制加載 - window.location.replace('path/to/page?force=1')

再次確保您需要這樣做。如果有人有一個想法,爲什麼該網頁沒有被瀏覽器緩存請評論,我會在這裏添加它。

如果這是個問題,最後一條警告 - Cookie存儲限於4k