2009-01-10 46 views
2

对于下面的非常简单的任务:查询从DB的产品列表并将其显示在网页上, 考虑2个设置:性能基准:PHP生成内容VS. JavaScript和DOM在AJAX

设置1:PHP脚本查询。所有内容都在服务器上构建,整个页面都会返回给客户端。

设置2:静态HTML“页面骨架”使用AJAX请求内容。接收到的内容在客户端使用Javascript进行解析,并使用innerHTML或类似方法渲染。

当然,第二种设置只有在客户端用户可以选择页面,类别和标签时才有意义。

我需要比较这两个,至少通过以下方式:

  • 时候就会走内涵送达
  • 用户体验(设置1输送为一体,设置2在交付“两个部分”)
  • 可扩展性 - 如何在设置时,我有10万次,每天的查询

对这个问题有什么想法将是多大的比较ppreciated。

+0

我注意到你用“肥皂”标记了这个问题。我同意海报AJAX通常是最好的解决方案,但如果你不需要使用它,就应该避免使用SOAP。解析SOAP并不简单,您可以通过使用JSON避免额外的工作和两端的处理开销。 – Prestaul 2009-01-11 00:00:02

回答

9

您可能会发现以下问题有所帮助:Smarty Vs. Javascript/AJAX

我带了几个点,在我回答这个问题:

  • 你应该使用服务器端脚本来显示任何在加载页面时已知的数据。在这种情况下,您知道应该显示产品列表。在页面加载时,应该显示问题答案的事实是已知的。

  • 您应该只使用AJAX调用加载动态数据是在页面加载时刻闻名。例如,当您点击Stack Overflow上的问题或答案下的“comments”链接时。在页面加载时,您不希望查看特定问题的评论。

  • 的Javascript应该需要访问您的站点的核心功能。

  • 当Javascript被禁用时,您应该优雅地降低功能。例如,Stack Overflow在JavaScript禁用的情况下工作得很好。您无法使用实时Markdown预览或动态徽章通知,但核心功能仍然完好无损。

  • 一个HTTP请求到服务器生成的页面将加载比请求显著更快地下载一个页面,使得五个或六个附加AJAX调用,尤其是在高延迟的连接(如蜂窝网络)。请参阅雅虎的Best Practices for Speeding Up Your Website

您应该将Javascript视为可能未启用的附加功能,而不应将其用于构建网站关键部分。这条规则有例外。如果你想做某种分页,点击“下一页”按钮,只有产品列表发生变化,AJAX可能是正确的选择。但是,您应该确保没有使用Javascript的用户不会排除查看整个列表。

没有什么比当网页开发人员不遵守KISS principle时无法访问页面更令人沮丧。作为一个例子,拿Friendly's Restaurants。当我在商场时,我想查看their menu,所以我在他们的iPhone上加载了他们的网站,只是为了发现你在没有Flash的情况下无法获得关于餐厅的任何有意义的信息。很高兴有各种各样的甜点飞往世界各地,但最终,我只想看看他们的菜单上的项目。我无法这样做,因为他们需要Flash。在这种情况下,服务的优雅退化会有帮助。

没有Javascript就无法有效地完成网络上的一些事情。显示产品清单是而不是其中之一。如果您仍然不确定,请查看其他受欢迎的网站如何执行操作。我想你会发现大多数成功的,设计良好的网站都遵循上面列出的准则。

1

当只有一小部分页面发生变化时,AJAX可能是更好的选择。

我建议先从服务器端版本开始,然后在其上构建AJAX。这样你就可以得到一个没有javascript的网站版本,如果你关心的是在搜索引擎中被索引的话,那么你可能还需要它。

但是,首先集中精力创建一个刚刚起作用的页面 - 您可以随时对其进行优化。

1

客户端的性能有很多因素。当时运行的是什么,浏览器,内容是什么,页面的CSS是什么,浏览器的缓存有多满,安装了什么插件,网络上发生了什么等等。请记住,当你在玩数字。

0

除非实现太糟糕,否则AJAX应该胜任。其中的好处是:

  • 并行由于在客户端侧并行请求(即您可以使用多个服务器的CPU内核,以服务于一个服务网页的部分,即不能使用PHP轻松完成)

  • 仅刷新页面的小零件更快(较少的数据传输,产生...)

  • 它扩展好得多,因为服务器具有较少的工作要做(ESP。如果你可以卸载一些处理的需要生成HTML给客户端,而不是只提供它)

http://www.startpagina.nl/动态网页最近AJAX代言之前一直在做这种成功,因为方法(1静态文件的形式提供,所有定制都在客户端完成 - 无论如何我最后一次检查)。

当然,你可以用任何一种方法搞定它,使它变得比其他方法慢。