我經常遇到這樣的情景,我認爲在CSS和JavaScript文件中使用模板標記是有意義的,例如在{{STATIC_URL}}中使用{{STATIC_URL}} CSS來訪問圖像。我明白實現這一目標的唯一方法是讓Django提供CSS和JavaScript文件。我對這種方法感興趣。但在我提交之前,我想聽聽專家的經驗。這種方法有哪些優缺點?謝謝。使用Django模板系統服務CSS和JavaScript有哪些優缺點
3
A
回答
2
優點:
- 你可以做一個事情的外觀和行爲很多每個請求的決定。
- 您可以將不同的CSS/JS文件的數量降到最低。
缺點:
- 瀏覽器往往緩存CSS和JS積極,所以你需要使用一些激進的反緩存技術。當然,這意味着禁用某些/所有靜態文件的緩存。
- 每個CSS和JS請求都會消耗WSGI服務器的另一個線程。在正常的請求/響應週期中,每個請求通常佔用一個線程;至少,現在你的應用程序可以同時處理200個併發請求,現在只能處理66個。
- 當你的網站變得很大時,CDN可能無法幫到你。
替代方案:
- 通過javascript扭捏的CSS,並設置你的頁面模板中JavaScript變量來控制調整。
- 使用多個CSS文件並動態控制它們的包含。
- 根據需要生成靜態文件,然後將其緩存到磁盤並通過mod_xsendfile提供。這隻適用於從django進程可以寫入的地方提供靜態文件,例如在同一臺機器上或網絡安裝上。
+0
感謝您的明確和有用的分析。 – tamakisquare
0
就個人而言,我一直堅持使用Django團隊的建議來製作CSS和JavaScript靜態文件,由服務器而不是通過Django直接提供。這不是一個問題,簡化了很多東西。一般來說,任何時候我想我需要一個dynamioc CSS或JS文件,有一種重構的方式,所以我不這樣做。
例如:
在CSS中使用{{STATIC_URL}}的訪問圖像
我不知道你怎麼{{ STATIC_URL }}
是可變的,但我發現,使用我的頁面中的<base>
標記修復了很多事情。我認爲這是用於背景圖像?你能否更新你的問題來舉個例子?
我做的另一件事是,如果我的JavaScript需要動態數據,我會將大部分代碼放在一個JavaScript庫中作爲靜態文件,然後將最小動態內容放入<script>
標記處頁面結尾。通常我會把它全部放在一個對象中(看起來很像JSON),然後將該對象傳遞給一個函數。想想看,你可以把所有的動態東西,在你的視圖函數中做一個字典,編碼成JSON,並通過上下文傳遞它。那麼你的頁面模板只是看起來是這樣的:
<html><head>
...
<script src="{{ STATIC_URL }}/js/foo.js"></script>
...
</head><body>
...
<script>
foo_main({{ foo_params_json|safe }});
</script>
</body></html>
這使得它成爲很多更易於重複使用此代碼。
相關問題
- 1. 用於Node.js模板的Jade和EJS有哪些優缺點?
- 2. 使用SQLDataReader有哪些優點/缺點?
- 3. 使用GAC有哪些優缺點?
- 4. 使用boost :: iterator_facade有哪些優缺點?
- 5. 屬性模式有哪些優缺點?
- 6. 使用主要.NET開發機器的服務器操作系統有哪些優點/缺點?
- 7. Solr和ElasticSearch有哪些優缺點?
- 8. 用戶模式和內核模式的優點和缺點有哪些
- 9. 企業庫的Msmqdistributor服務有哪些優缺點?
- 10. DevExpress Reports有哪些優點/缺點?
- 11. 用於Django/Python的CSS模板系統?
- 12. 使用Phonegap和Titanium有哪些優缺點?
- 13. 使用MSI和MSP有哪些優缺點?
- 14. RDB2RDF工具有哪些優缺點?
- 15. 使用數據服務層有什麼優點和缺點?
- 16. 在純Java環境中,Web服務和RMI有哪些優缺點?
- 17. 使用這個極簡主義系統的優點和缺點?
- 18. 在頁面對象上使用劇本模式有哪些優點/缺點?
- 19. 認知服務OCR優點和缺點
- 20. C#中的類型推斷有哪些優點和缺點?
- 21. 優勢和智者模板的缺點
- 22. JavaScript模板系統
- 23. 在硒中使用「xpath」有哪些優缺點?
- 24. 使用.Net開發Facebook Apps有哪些優缺點?
- 25. 使用dbml進行linq2sql查詢有哪些優缺點?
- 26. 記錄到系統日誌和文件系統:優點和缺點
- 27. 在SQL服務器查詢中關閉NOCOUNT有哪些優缺點?
- 28. NServiceBus:使用NServiceBus分發服務器的優點和缺點
- 29. 經紀和非經紀消息系統的優點和缺點
- 30. IF在Django模板系統
那麼你將有觀點的邏輯和模板編譯等的開銷,但我猜想,應該不會有太大的小數量的文件,並使用Django的緩存系統的問題。但我寧願使用某種JavaScript編譯器([關閉](http://code.google.com/closure/)爲例),也許[SASS]的(http://sass-lang.com/)或CSS的一些東西,並用一些輕量級的Web服務器來提供它們您也可以使用CSS圖像的相對路徑,因此您並不需要{{STATIC_URL}}。 –
我對這個問題的答案也很感興趣。我以前用過的動態生成的JS/CSS Django的,感覺很髒,哈克,但與此同時,它使開發和部署更容易。對CSS的圖像相對路徑和django.contrib.staticfiles應用 – sesh
之間,你不應該需要使用Django的模板引擎只是爲了解決路徑問題。如果你有每個請求的動態CSS生成,你正在設置自己的緩存地獄。 – GDorn