【问题标题】:javascript or php - what is most efficient for updating?javascript 或 php - 什么是最有效的更新?
【发布时间】:2009-02-09 22:15:50
【问题描述】:

我在一个 javascript 文件中有几个更新方法,用于更新我的 ajax 应用程序,如下所示:

function updateByPk(layer, pk) {
   url = "get_auction.php?cmd=GetAuctionData&pk="+pk+"&sid="+Math.random();
   update(layer, url);
}


function updateByQuery(layer, query) {
   url = "get_records.php?cmd=GetRecordSet&query="+query+"&sid="+Math.random();
   update(layer, url);
}

function updateByPage(layer, query, pg) {
   url = "get_records.php?cmd=GetRecordSet&query="+query+"&pg="+pg+"&sid="+Math.random();
   update(layer, url);
}

我想知道通过 php 简单地重新加载页面而不是使用 ajax 方法来执行诸如分页之类的事情是否会更有效。我不确定哪种方法更有效,或者每种方法是否各有优缺点。

【问题讨论】:

  • 这不是javascript中的分页,您只需加载一个php页面。 update() 有什么作用?

标签: php javascript ajax


【解决方案1】:

具有 AJAX 优势的分页:

  • 传输的数据可能更少,这意味着更快的页面加载和更少的带宽使用。
  • 更流畅的用户体验

没有 AJAX 优势的分页:

  • 后退和前进按钮可在浏览器中使用
  • 您可以拥有特定页面的 URL(尽管您也可以通过 page.php#pagenumber 技巧使用 AJAX 来做到这一点)
  • 也许更容易编写和维护

【讨论】:

  • +1 和更多:(AJAX)API 基本上是在做应用程序时完成的,更容易构建外部工具。 (PHP) 即使没有启用 Javascript 也可以工作(例如 GoogleBot)。
【解决方案2】:

如果我得到这个问题,那么您是在问分页和类似的操作是通过 Javascript + AJAX 完成,还是通过调用服务器来完成?

我个人会说只使用对服务器的请求。在这种情况下,AJAX 是不必要的,除了“bling”因素(是的,这是一个技术术语:P)

如果您在正确编写应用程序时考虑到了可访问性,则无论如何都应该编写“直接调用服务器”位(因为当有人关闭了 Javascript 并点击了您的“下一页”链接之一时) .

拥有 Javascript 意味着 1) 您需要维护额外的代码。 2)你打破了后退按钮。如果只实现 AJAX 方法,则无法访问其他页面上的数据。如果你这样做了,你也没有简单的方法链接到它(通过复制地址栏)。

我个人只会将 AJAX 用于将向页面添加功能的事情,而不会带走任何其他功能,例如,在填写注册表单时检查是否使用了用户名。自动建议等。

【讨论】:

    【解决方案3】:

    Ajax 在客户端和服务器上会更容易。客户端不会重置他们的滚动,不必检查所有新资产,如样式表和图像,并且加载速度会更快。服务器不必生成带有页眉和页脚的整个页面;它只需要生成页面中发生变化的部分。

    缺点是使用良好的 UI 编写代码有点困难(添加加载微调器和相关的装饰物)。如果客户端禁用了 javascript,您的页面会中断。所以真的,如果你做ajax,你需要两者。不过,为 Ajax 编写优雅的降级代码很容易。

    <a href="/search?term=foo&amp;page2" onclick="loadPageViaAjax(2); return false">
      Next
    </a>
    

    这是一个即使没有 javascript 也可以工作的链接示例。如果 javascript 打开,onclick 被触发,ajax 发生并且它停止跟随 return false 的链接。如果没有 javascript,则忽略 onclick,并照常跟随链接。

    【讨论】:

    • 我没有问题使用对服务器的调用来进行分页,因为我更喜欢你描述的优点。我的问题是,我不知道在这种情况下是否可能。
    • 我有一个文件 index.php 有 3 层,默认情况下只有导航。每个导航链接都是一个查询,它通过 ajax 将记录列表加载到第二层,并且该层内的链接将内容加载到最终内容层。
    • 当我尝试在没有 ajax 的情况下使用分页时,我无法找到一种方法来保持网站的外观和风格,以及加载到第三层的内容。是否可以使用对 serer 的调用来对 ajax 应用程序进行分页?
    • 您的搜索结果页面需要返回 2 个不同的内容。它应该返回一个完全呈现的页面,或者只是需要换出的内容。您可以使用附加的 GET 参数来执行此操作。在 Rails 中,您只需为使用不同模板的 js 设置响应器。
    【解决方案4】:

    这取决于您对效率的定义。通过 AJAX 加载新内容将减少通过网络传输的字节数,但如果您无法将动态内容缓存到静态文件中(我假设您在重新加载页面时会这样做),则在您的服务器上可能会更加费力。但是,过度依赖 AJAX 可能会导致浏览器不支持 javascript(它们存在)的用户无法访问您的页面,并且可能会损害您的网站被搜索引擎索引的能力。两全其美的方案是让链接指向重新加载的页面,但使用 javascript 覆盖该行为以通过 AJAX 加载新内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多