【问题标题】:is creating a unique html file for each article a good practice?为每篇文章创建一个唯一的 html 文件是一种好习惯吗?
【发布时间】:2011-06-22 09:59:02
【问题描述】:

抱歉,主题名称不好,我想不出更好的东西;)

我正在做一个新闻广播网站项目,利益相关者要求我为每篇文章创建一个唯一的 html 文件并将其保存在磁盘上,而不是使用 mysql 之类的 dbms,以便用户可以直接访问该文件并且不需要计算,因此在这种情况下不会有任何瓶颈。 我这样做了。 我的问题是,这(他问我的)是编程中一种好的和流行的做法吗? 有什么好处和坏处?

谢谢大家,对我糟糕的英语写作感到抱歉:P

【问题讨论】:

    标签: java mysql jakarta-ee


    【解决方案1】:

    我开始问自己,为什么利益相关者可能会要求您以这种方式实施系统。只要您的系统符合要求,他/她为什么会关心?对此有两种可能的答案:

    • 利益相关者有点控制狂;例如喜欢干预开发人员工作的前技术人员。
    • 利益相关者过去有过不好的经历;例如使用以前的系统,其中内容被“锁定”到一个数据库中,该数据库具有笨拙的前端,让用户的生活陷入困境。

    从这个角度来看,您将如何解决这个问题?我的看法是,您需要深入了解利益相关者要求这样做的原因。他有什么真正的担忧吗?你能在系统设计中解决这个问题吗?

    底线是“这是最佳实践”不是这里的首要标准。可以说,“客户想要什么”或“客户需要什么”更重要。

    我认为你需要做的是:

    • 找出利益相关者真正关心的是什么。
    • 与他/她(和其他利益相关者)讨论解决这些问题的设计方案。向他们展示备选方案并诚实评估其影响,并让他们参与决策。

    【讨论】:

    • 好问题,他被告知大型新闻机构使用这种技术来吸引大量访问者,因此他要求我们将其作为网站的“主要功能”之一.
    • @dave - 哦,天哪……这是个问题。我想我会对技术替代品进行研究,详细列出并写出您对利弊的最佳评估。如果他仍然坚持以客观上对其他项目目标和/或约束存在风险的方式实施系统,我会让他签字确认他承认“按照他的方式”这样做的风险。
    【解决方案2】:

    这绝对不是一种常见的做法,我也不会这样做。特别是因为有瓶颈 - 你不会有任何瓶颈。也没有任何性能问题。您的网站可能获得多少独立访问者?几十万?

    事实上,从磁盘读取更有可能是一个问题。数据库操作可以优化、缓存在内存中等等——数据库服务器执行各种优化。另一方面,您每次都读取文件(或自己处理缓存)。

    通常和首选的方法是:

    • 从数据库存储和加载内容
    • 有一个页面模板(页眉+页脚),并且只插入内容
    • 拥有一个带有编辑器的管理面板(尽可能丰富),您可以在其中修改文章的内容

    【讨论】:

    • 谢谢回复,如果文章或新闻的热度很高,那么它可能会被请求数千次,我认为这可能会导致高负载,(你说得对瓶颈,我想念这个词;))
    • @dave - 如果从磁盘多次读取,您可能会遇到更大的问题。
    • 我想我失去了你 :-?你的意思是dbms使用某种缓存?如果不是,那么它与这种情况有什么区别(从磁盘多次读取)?
    • 它可能会用到。但无论如何 - db 解决方案是所有 CMS 系统都使用的解决方案。
    【解决方案3】:

    如果您有一个模板并且可以自动生成这些页面,那将是一个很好的做法。就像您说的那样,它可以防止您的服务器不得不生成页面。它只需要通过普通页面。

    如果您需要更改布局,或者需要编辑文章,您只需重新生成页面即可。

    这很常见,尽管许多页面总是包含一些动态内容,例如日期、用户信息或其他会话或时间特定数据。在这种情况下,您无法缓存整个页面。当然,您可以将两者结合起来。拥有动态索引页和首页,只缓存实际文章本身。但我在你的问题中读到,这就是你现在所做的。

    优点:

    • 更快地检索页面
    • 减少网络服务器的负载
    • 减少数据库服务器上的负载

    缺点:

    • 当文章被修改时需要做一些额外的工作来更新缓存
    • 页面中不能有任何动态内容
    • 可能根本没有问题。大多数网络服务器都能够处理大量动态页面(过早的优化是万恶之源)。
    • 还有其他方法可以加快速度,但没有上述缺点。您可以在 Memcache 中缓存查询结果和/或使用 APC 缓存来加速您的 PHP 代码并减少磁盘 I/O。

    但有些网络托管公司完全致力于提供静态内容。静态内容也可以来自内存中的服务器,使其比 APC 缓存的动态内容更快,所以如果你真的真的需要性能,是的,这就是要走的路。但我严重怀疑你这样做。

    【讨论】:

    • 谢谢你的回复,你说的是我想做的,我听说像英国广播公司和美国之音这样的大新闻机构也做同样的事情,但我不确定
    【解决方案4】:

    如果您认为它可以替代您的数据库:不,这不是好的做法。您丢失了很多信息,以后编辑页面以及设置索引搜索功能会更加困难,...

    如果您认为它是一种缓存解决方案:那么是的,这是一种很好的做法,也是一种常用技术。但是请考虑如何进行缓存,何时将文件替换为新版本,并且仅在您的页面几乎没有写入访问权限和大量读取访问权限时才这样做(这对于文章站点来说很典型^^)

    【讨论】:

      【解决方案5】:

      如果没有半体面的模板系统,您将不得不将整篇文章以及页面布局和样式存储在一个文件中。

      这意味着,更新所有已发布文章的外观和感觉会很困难,如果您想查询文章列表并返回一个列表(例如来自特定作者或特定类别的列表),你也会有点卡住。

      【讨论】:

      • thnx 用于回复,对于查询意味着,我有一个包含文章 ID(也是他们的名字)的序列化地图,我得到了带有该地图的文章列表,但是使用 i/o 有其自身的困难,正如您的意思,查询有点困难
      【解决方案6】:

      静态页面适用于小型网站。如果你有机会,就去吧,但如果你需要复杂的操作,动态页面结构应该是要走的路。

      对于文章网站,我会使用动态页面,因为这个概念是动态的(您需要更新网站,添加新文章,可能会添加评论、用户活动等新功能)。

      直接从管理面板添加/删除/编辑文章更容易,使用静态页面,您必须通过 html 代码找到自己的方式。

      这个列表会一直持续下去......

      【讨论】:

      • thnx 回复,我想我在这里权衡一下,远射性能更好,而不是编程问题的地狱。
      • 顺便说一下,我是动态生成这些静态页面的。
      猜你喜欢
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2019-11-07
      • 2010-12-11
      • 2020-12-14
      • 2016-04-01
      • 2012-08-11
      • 2014-07-21
      相关资源
      最近更新 更多