Database 优化:将本地文件或数据库用于HTML

Database 优化:将本地文件或数据库用于HTML,database,optimization,filesystems,performance,Database,Optimization,Filesystems,Performance,接下来,假设我使用文件存储HTML模板,我会得到一些答案 在最近之前,我总是将“已编译”的模板作为html文件保存在一个目录中(根目录上方)。我的模板通常有两种类型的变量—“静态”变量,不是每次使用都会被替换,而是在整个站点中使用—基本上是为了便于维护,例如,如果我决定更改站点名称;以及在每次页面加载时都会更改的动态变量 我总是将这些文件保存在服务器上,但我的朋友指出了我忽略的一点:当您可以进行一次数据库调用时,为什么要进行5-10次文件系统调用 我想知道的是哪一个更有效?从系统调用多个HTML

接下来,假设我使用文件存储HTML模板,我会得到一些答案

在最近之前,我总是将“已编译”的模板作为html文件保存在一个目录中(根目录上方)。我的模板通常有两种类型的变量—“静态”变量,不是每次使用都会被替换,而是在整个站点中使用—基本上是为了便于维护,例如,如果我决定更改站点名称;以及在每次页面加载时都会更改的动态变量

我总是将这些文件保存在服务器上,但我的朋友指出了我忽略的一点:当您可以进行一次数据库调用时,为什么要进行5-10次文件系统调用


我想知道的是哪一个更有效?从系统调用多个HTML文件或从数据库调用多行模板(在一次查询/调用中)。

不在数据库中存储可编辑的HTML

说真的,因为一旦你意识到你不能再仅仅打开一个文本编辑器,仅仅是修改的维护开销就变得非常大

我曾在许多数据库中包含HTML内容的项目中工作过,这是一场持续不断的噩梦,“找到内容所在的行”,我真的很想拍下制作它的人

另外,不要过早地进行优化。如果你发现这是一个拖慢项目进度的问题,那么就改变它。因为这会使代码的可维护性大大降低,从而节省一毫秒的时间。但是,如果您以后需要更改内容的来源,那么代码的设计应该足够好,这样做应该很容易


这当然可以通过 适合编辑的web界面 模板

呃,真的不是,除非你只是想和记事本竞争。语法突出显示和所有其他在标准编辑器中可以获得的全部功能只会让你的开发人员在编辑网页时感到自杀,因为他们会在一个小得可怕的黑底白字的文本区域进行黑客攻击(更不用说担心实体编码等带来的额外乐趣了,例如,尝试在html内容包含文本区域元素的文本区域中使用编辑html!)

在FileIO上,虽然文件IO可能是一个瓶颈,但请记住,如果您有一个合适的linux安装,并且有足够的内存,一个称为“磁盘缓存”的方便的东西就会生效,它实际上会将文件保存在内存中,因此文件IO只会变成memcpy

相反,在对我使用过的任何代码进行的实际压力测试中,最大的减速都发生在数据库中!主要是缓慢的连接字符串、查询解析时间、额外的phpmysql交互。您并不是真的希望获得任何东西。文件系统查找接近于数据库索引查找,并且您没有任何其他未知数比“你需要从磁盘上传输它”更不用担心表锁定的问题了


您可能应该尝试缓存库之类的东西,强烈推荐使用X-Cache,这更有可能给您带来明显的性能提升。

我非常同意Kent Fredric回答的要点。但是,如果您真的想知道哪个更高效/更快,您无法合理地期望在这里得到答案。如果您对于这个问题,只有一种方法可以解决:对应用程序进行双向分析。

这当然可以通过使用合适的web界面来编辑模板来解决吗?我理解你的观点-从.html副本更新数据库中的模板已经够乏味的了。可以使用合适的web界面来编辑模板来解决在模板中,重点是合适的基于web的HTML(或通用代码)编辑器是一个基于自身优点而非琐碎的项目。一般来说,我不喜欢别人告诉我用什么编辑器来编辑代码,而人们通常不喜欢,他们对此有争论。因此,被捆绑在使用任意web界面来编辑代码上会让我非常不高兴,不管它有多“好”它声称是。这还意味着每个开发人员都必须有一个web服务器的副本才能执行编辑,您需要可爱的数据库复制功能,因为您不应该在生产站点上编辑代码。虽然这通常是一个好主意,但这是一个令人厌恶的障碍,“还有一件事可能出错”当您只需要一个终端和一个文本编辑器时。