Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generating dynamic CSS

What is the best way to handle style that that is user-customized? Just as an example of the result I'm looking for, this would suffice:

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

However, serving CSS as a view seems like it would cause a significant amount of overhead in a file that is constantly requested, so this is probably not a good solution.

The user does not have access to the CSS files and we must assume that they have no web development knowledge.

like image 247
pancakes Avatar asked Aug 28 '10 05:08

pancakes


2 Answers

However, serving CSS as a view seems like it would cause a significant amount of overhead in a file that is constantly requested, so this is probably not a good solution.

And what if you would generate that CSS once?

  1. Default CSS is: /common/css.css
  2. Member customize CSS, now <link /> elements points to /user-specific/123.css?ts=123123123. 123 is of course an identifier of the member, and ts parameter contains a timestamp - a date of last CSS modification
  3. Make sure that your CSS generator sets proper HTTP headers responsible for client-side caching
  4. User browser request a CSS file - server replies with simple 304 Not Modified header - there is no need for any script execution or contents download
  5. When member modifies his CSS then you just update ts - once again just a single request is needed
like image 87
Crozin Avatar answered Sep 17 '22 17:09

Crozin


Do the CSS dynamically via a view as normal, but use aggressive caching so that it loads quickly.

like image 34
Ignacio Vazquez-Abrams Avatar answered Sep 21 '22 17:09

Ignacio Vazquez-Abrams