2010-08-28 20 views
15

उपयोगकर्ता-अनुकूलित शैली को संभालने का सबसे अच्छा तरीका क्या है? बस परिणाम मैं तलाश कर रहा हूँ का एक उदाहरण के रूप में, यह पर्याप्त होगा:गतिशील सीएसएस उत्पन्न करना

body { 
    color: {{ user.profile.text_color }}; 
} 

हालांकि, इस विचार के रूप में सीएसएस की सेवा लगता है जैसे कि यह है कि लगातार अनुरोध किया एक फ़ाइल में भूमि के ऊपर का एक महत्वपूर्ण राशि का कारण होता है, इसलिए यह शायद एक अच्छा समाधान नहीं है।

उपयोगकर्ता को सीएसएस फाइलों तक पहुंच नहीं है और हमें यह मानना ​​चाहिए कि उनके पास कोई वेब विकास ज्ञान नहीं है।

उत्तर

15

हालांकि, एक दृश्य के रूप में सीएसएस की सेवा करना ऐसा लगता है कि यह लगातार एक फ़ाइल में ओवरहेड की एक बड़ी मात्रा का कारण बनता है, इसलिए यह शायद एक अच्छा समाधान नहीं है।

और यदि आप एक बार उस सीएसएस को उत्पन्न करेंगे तो क्या होगा?

  1. डिफ़ॉल्ट सीएसएस है: /common/css.css
  2. सदस्य /user-specific/123.css?ts=123123123 लिए सीएसएस अनुकूलित, अब <link /> तत्वों अंक। 123 पाठ्यक्रम के सदस्य के एक पहचानकर्ता है, और ts पैरामीटर एक टाइमस्टैम्प शामिल - पिछले सीएसएस संशोधन की तारीख
  3. सुनिश्चित करें कि आपका सीएसएस जनरेटर सेट क्लाइंट-साइड संचय
  4. उपयोगकर्ता ब्राउज़र अनुरोध एक सीएसएस के लिए जिम्मेदार उचित HTTP हेडर फ़ाइल - सर्वर सरल 304 Not Modified हेडर के साथ उत्तर - किसी भी स्क्रिप्ट निष्पादन के लिए कोई ज़रूरत नहीं है या सामग्री
  5. डाउनलोड सदस्य फिर अपने सीएसएस संशोधित करता है जब आप सिर्फ अद्यतन ts - एक बार फिर से सिर्फ एक ही अनुरोध की जरूरत है
+0

+1 मुझे समझ में आता है। –

5

सामान्य रूप से दृश्य के माध्यम से सीएसएस को गतिशील रूप से करें, लेकिन आक्रामक caching का उपयोग करें ताकि यह तेज़ी से लोड हो सके।

+0

+1 केआईएसएस के लिए +1 .... –

+1

यह समाधान थोड़ा सा सरल है। सीएसएस एक * प्रति उपयोगकर्ता * आधार पर है और ठीक से कैश करने के लिए है जिसका मतलब है कि प्रत्येक संभावित सेटिंग के लिए एक अलग कैश आइटम। पृष्ठ का 98% कैश करना एक विकल्प है, लेकिन गतिशील बाहरी-रैपर '

... whatever ...
' का उपयोग करें जो प्रति-उपयोगकर्ता सेटिंग का उपयोग करता है। वैकल्पिक रूप से, आप बाहरी वर्ग को ट्विक करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं, लेकिन यह इस स्थिति में स्वीकार्य नहीं हो सकता है। –

0

आप कर सकते हैं प्रयत्न django mediagenerato, असल में मैंने इस क्यू को पढ़ा और मैं आपके जैसे समाधान की खोज कर रहा था, फिर मुझे पता चला कि Django-mediagenerator

मैंने अभी तक यह कोशिश नहीं की है, लेकिन यह एक समाधान होने के लिए तैयार है।

संबंधित मुद्दे