【问题标题】:When adding CSS to a CMS dynamically should I write it to the DB or to file动态地将 CSS 添加到 CMS 时,我应该将其写入数据库还是文件
【发布时间】:2009-03-16 11:17:58
【问题描述】:
我在 CMS 上工作,我希望能够通过管理控制面板添加 CSS。
当我添加 css 时,我应该将它附加到我拥有的样式表的底部,还是最好将数据添加到数据库,然后使用处理程序获取它。
在我看来,他们似乎都有优势。
写入文件:
它很简单,只需要很少的代码
该文件是可移植的,可以像任何其他 css 文件一样复制
写入数据库:
我有更多的控制权
我只能为每个文档加载我需要的类
【问题讨论】:
标签:
css
language-agnostic
content-management-system
【解决方案1】:
我认为答案取决于谁在维护 CSS。
如果它是供非技术用户管理一些简单样式的简单界面,我会将其存储在数据库中,但作为结构化数据,而不是原始 CSS,并在运行时自行生成 CSS。但是,正如 Sohnee 所提到的,您需要确保不是为每个请求都生成它,因为这将是不必要的开销 - 您应该生成到平面文件,或者有效地缓存。
如果它是 Web 开发人员类型的人的界面,他们了解文件的概念,并且您想授予他们完全访问权限以编写他们喜欢的任何 CSS(并且您信任他们!),那么我会将其存储为一个文件(如果我是开发人员,我希望它使用我的原始 CSS)。但是,我不会将其附加到现有样式表(假设这是网站的默认基本样式集)
对于用户定义的样式,我会有一个单独的样式表,在页面中使用单独的链接标记调用。这将使站点“代码”与其“内容”分开。另请注意 Zhaph - Ben Duguid 在这里所说的通过向 URL 添加某种版本参数来确保浏览器不会缓存旧版本。
写入数据库:我有更多控制权
只能加载我需要的类
每个文件
我想说只加载每个文档的类通常是个坏主意。浏览器已针对 CSS 缓存进行了调整,因此使用适当的缓存标头从外部文件调用所有 CSS 几乎总是会更好。
【解决方案2】:
我会修改 CSS 文件本身。在整个站点中使用动态 CSS 会导致您出现问题,因为样式表将被缓存,因此最好将所有样式放入文件中并允许本地缓存以加快页面速度,而不是尝试制作大量小的 CSS 文件。
将每条规则存储在数据库中并使用该信息创建 .css 文件并没有什么害处——这比解析 CSS 文件中的字符串并找到插入点要容易,但请确保您只是编写发生更改时的 CSS 文件。如果您按需进行,您将不必要地不断访问您的数据库。
【解决方案3】:
将样式附加到现有 CSS 的最大危险是,如果浏览器缓存了文件的某个版本,则在浏览器刷新缓存之前,他们将看不到更新的样式。
解决这个问题的一种方法是在调用样式表的某处包含一个版本字符串(例如(来自 SO)):
<link rel="stylesheet" href="/Content/all.min.css?v=2644">
但是,这意味着您还必须在每次进行更改时更新对文件的调用,这可能是不可能的。
也就是说,如果我要添加的样式通常不能上传新版本的样式表,这可能是我会采取的方法。