我想在网站上拥有用户可自定义的外观和感觉选项。我设想了一个界面,用于选择背景和文本颜色,图像,字体等。我只是不确定存储和使用信息的最佳方式是什么。我计划将所有选项存储在与用户绑定的数据库表中。
有没有一种为每个用户动态生成css的好方法?是否更好地生成css,因为它们进行更改并只是存储它,或者为每个页面视图重新生成它?是否有确定的模式来做这种事情?
答案 0 :(得分:2)
将可自定义的CSS部分与静态部分分开。这样你就可以像往常一样提供大部分CSS。
动态生成可自定义的CSS。除非您发现存在性能问题,否则不要尝试进行任何优化或花哨的缓存。
唯一潜在的性能问题是浏览器无法缓存可自定义的CSS。但是,您可能不希望浏览器缓存它,因为这可能意味着用户的配色方案在编辑时不会立即更新。
如果您遇到性能问题,我不会担心ETags。 ETag旨在使浏览器不再重新下载已有的组件,但CSS的可自定义部分可能非常小。
如果出现性能问题,请考虑将可自定义的CSS直接内嵌到HTML页面中。这将节省额外的HTTP请求。但是,除非您确定需要,否则不要这样做。
答案 1 :(得分:1)
首先,为生成的CSS使用适当的缓存头,并在客户端请求时使用ETag头重新验证CSS源。您必须实现一些快速ETag计算算法,例如每次用户更改某些设置时的增量版本字段,并将其值返回为ETag。在这种情况下,您可以选择不“生成css,因为他们进行更改并只存储它”,但“为每个页面视图重新生成”,因为实际上CSS将存储在用户代理缓存中,即使用户按下F5 ETag也将用于确保客户端的CSS仍然有效。
当然,CSS必须由一些http处理程序(usercss.ashx或类似的东西)返回。将此CSS链接包含在HTML页面中时,请务必添加一些参数来解决缓存内容问题,例如`
根据我自己的经验,我建议您使用处理程序将用户CSS作为单独的资源提供,并且每次生成时都不要将其嵌入到HTML页面中,因为在最后一种情况下,每次生成页面时都必须重新计算CSS或以某种方式将其缓存在服务器上,两种情况都是相当糟糕的想法。此外,这个CSS可能相当大,没有理由在每次请求时下载它。