【问题标题】:Refresh the page or do a ridiculous amount of JQuery?刷新页面还是执行大量的 JQuery?
【发布时间】:2011-07-14 07:26:59
【问题描述】:

向页面添加评论时,我可以选择使用location.reload(true); 或执行大量 JQuery 来动态地将 DIV 添加到页面。我已经有代码用于在页面加载时解释页面本身的 cmets,因此必须在 JQuery 中复制它不仅会增加代码重复和混淆,而且还意味着当我想更改 cmets 的解析方式时,我必须更改它事物的 PHP 方面和 JQuery 方面。值得还是我应该刷新页面?

【问题讨论】:

  • 我不认为这是一个 可笑 数量的 jQuery 代码。
  • 啊,是的,我很抱歉;荒谬是用词不当。我对 JQuery 还是很陌生,我很可能需要一段时间来实现它,并且在我的其余代码的上下文中,到目前为止,这将是项目的很大一部分。

标签: jquery refresh


【解决方案1】:

这是一个“讨论”问题,所以虽然我会和你一起大声思考,但我并没有宣布解决这个问题的“更好”方法。

  1. 客户端/服务器耦合。 您提到您担心客户端/服务器之间的耦合;这是针对 jQuery 解决方案的,如果您想更改有关 cmets 的某些内容,则必须同时更改客户端和服务器逻辑。这在可维护性方面很重要。如果您预见到对 cme​​ts 的处理方式进行重大重新设计,您希望将这些问题分开,然后重新加载页面。

  2. UI 流注意事项。 重新加载页面是否会破坏您的 UI 流程?如果您正在托管一个有状态的 Web 应用程序,那么这是一个重要的考虑因素。如果您托管的是标准博客/CMS 类型的应用程序,重新加载页面可能没什么大不了的。

  3. 所涉及的工作量。 编写这个 jQuery 例程需要多少时间?一小时?一天?看起来简单地重新加载页面对于 1.0 版本来说是一种快速、简单的解决方案;您以后可以随时进行改进。还要考虑决策的后果,以及任何未来的变化需要付出多少努力。

但是,此讨论的有效性仅与您的设计一样有效。退后一步看看你的设计通常是有益的。为什么还会存在这个问题?您是否可以在此问题发生之前进行设计更改来解决此问题?嗯……

-tjw

【讨论】:

  • 我很欣赏您提出的想法,我已将它们考虑在内。但是,我对您的最后几句话感到有些困惑。对于这类事情,是否总是需要两个单独的代码源?一种用于动态附加注释,另一种用于在页面加载时加载所有 cmets。
  • 您似乎试图避免使用最佳解决方案 (jQuery),只是因为您还不是它的专家。俗话说,当你唯一的工具是锤子时,一切看起来都像钉子。换句话说,确保您使用的是最适合这项工作的工具,而不仅仅是您最熟悉的工具。碰巧我强烈不同意@marcos 接受的解决方案;是的,它会起作用,但许多其他事情也会起作用。他的解决方案完全违反了良好的 MVC 风格设计,而且通常是不好的建议。
【解决方案2】:

我的方法是将评论提交到服务器,并获得包含用于显示 cmets 的 HTML 的 XML 响应。通过 XML 响应,您可以使用 jQuery 将新注释附加到线程。

这部分 HTML 可以用 PHP 生成,就像重新加载页面时一样。

这样,你只需要修改 PHP 代码。

【讨论】:

  • 这是我一直在寻找的答案。谢谢。
【解决方案3】:

我会说这取决于,要么你用 jquery/javascript 做所有事情,要么你重新加载更改。选择一条路径,并构建所有与它一起工作的东西。 我个人更喜欢使用 jquery,所以我不仅会使用 jquery 添加帖子,还会使用 jquery 加载所有帖子。

【讨论】:

    【解决方案4】:

    这完全取决于差异是否足够明显,以致于您的用户的成本,如果不是在 js 中这样做,将高于 收益你会得到它。

    也就是说,如果您像关心自己的方便一样关心用户体验;)

    最后,只有你能回答这个问题,因为需要值得的人就是你。

    您的用户是否更喜欢您使用 javascript 并在没有页面加载的情况下更新页面:很可能是的。

    【讨论】:

      【解决方案5】:

      这里有几个不同的选项,具体取决于您的具体需求。一种选择是做一个完整的帖子,有时它是正确的。在几乎所有情况下,它都应该是 javascript 不可用的情况下的默认设置(例如屏幕阅读器)。为此,您可以添加(渐进式增强)执行 AJAX 请求返回 html 的能力,即回发到生成部分页面的方法并简单地替换它。如果您将页面设计为在最初生成时包含此部分视图,您甚至不必复制代码——您只需在通过 AJAX 调用时以不同的方式使用它。或者,您可以执行 AJAX 请求返回数据或完全在客户端上操作客户端上的数据以更新视图并将任何更新的数据推送回服务器。您选择哪个完全取决于应用程序和您的偏好。根据您的帖子,我建议您查看允许您生成部分视图的 MVC 框架,因为它似乎解决了您最关心的问题。它使页面上的 javascript 数量减少,并专注于简单地发出请求和更新页面的位,同时将格式化和数据解析留在服务器上——所有这些都在必要时通过 AJAX 访问。

      【讨论】:

        【解决方案6】:

        好像有两个问题:

        1. 您真的应该为此使用 Ajax 吗?
        2. 如果您使用 Ajax,是否有避免重复代码的方法?

        问题 1:我认为这不是一个专门的编程问题:Ajax 是否必要取决于您的应用和用户(或客户、经理或产品经理——可能不是)的要求你)。刷新重要吗?好吧,没有它可能会更平滑一些 - 你甚至可以很好地为它制作动画。好消息:你有一个“工作版本”,现在你知道做 Ajax 需要做多少工作——你可以对那些支付 $ 的人得到更明智的估计。

        问题 2:我的规则是不要写两次相同的代码——即使你用 PHP 写一次,用 Javascript 写一次。这就是你感到沮丧的地方。当我经历这个时,这是我的推理:

        您有自己的评论,需要将其转换为 HTML。您可以在以下两个位置之一执行此操作:服务器或客户端 (Javascript)——而不是两者。所以……

        • 如果您在服务器上实现渲染 cmets,您应该使用 Ajax 架构来实现这一点。因此,Ajax 响应不应返回 XML 或 JSON,而应返回可简单插入 DOM 的 HTML 段。您可以在初始页面显示和 Ajax 响应之间在后端共享相同的呈现代码。

        • 如果您想在 Javascript 中实现呈现,请在页面首次呈现时使用与响应 Ajax 请求时相同的呈现代码。这对某些人来说有点违反直觉——但确实是避免重复的秘诀。为 cmets 选择一种标准的“结构化格式”——XML 或 JSON。编写一个知道如何将其呈现到页面的函数。然后就可以用同样的代码来处理Ajax业务了。

        您选择哪条路径取决于很多因素。如果您有一个公共网站,并且关心搜索引擎所收录的 cmets,则技术 1 会更容易一些。如果您对此不太关心,并且预计会有很多动态 Javascript 行为,那么后一种选择会更好地为您服务。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-10
          相关资源
          最近更新 更多