客户端或服务器端处理?

时间:2010-06-17 17:29:22

标签: php javascript jquery codeigniter dynamic

所以,我是动态网页设计的新手(我的网站大部分是静态的,有些PHP),我正在尝试学习网页开发的最新技术(这似乎是AJAX),我当时想知道如果您要传输大量数据,最好是在服务器上构建页面并将其“推送”给用户,还是更好地“拉”所需的数据并在客户端创建围绕它的HTML使用JavaScript?

更具体地说,我使用CodeIgniter作为我的PHP框架,使用jQuery for JavaScript,如果我想向用户显示数据表(动态),那么使用CodeIgniter格式化HTML会更好吗(创建表,将CSS类添加到元素等。),或者更好的方法是使用JSON提供原始数据,然后使用jQuery将其构建到表中?我的直觉说是客户端,因为它可以节省带宽,并且页面可能会加载所有这些浏览器现在所有的新JavaScript优化,然而,对于不使用JavaScript的人来说,网站会中断......

感谢您的帮助

6 个答案:

答案 0 :(得分:9)

祝贺您搬到动态网站!我会说你必须满足以下条件才能进行客户端布局(不用说你应该总是做过滤数据库查询和控制访问权限服务器端):

  • 客户端浏览器和连接功能适用于绝大多数用例
  • 搜索引擎优化和移动/遗留浏览器降级不是一个大问题(合成HTML服务器端时要容易得多)

即使这样,做客户端布局也会使测试变得更加困难。它还会产生相当麻烦的同步问题。使用加载部分内容的AJAX站点,如果页面的一部分搞砸了,您可能永远不会知道,但是通过常规的服务器端组合,每次请求都会重新加载整个页面。它还为错误/超时处理,会话/ cookie处理,缓存和导航(浏览器后退/前进)添加了额外的挑战。

最后,如果有人想要与朋友分享链接或为自己添加链接,那么制作perma-URL有点困难。我在我的博文here中查看了一个解决方法,或者您可以使用一个突出的“固定链接”按钮来显示动态呈现的永久链接。

总的来说,特别是在开始时,我会说更合适的kosher,更好的支持,更多的tutorialed,传统的方法来组合HTML服务器端。然后在这里和那里浸入一些AJAX(可能从表单验证或自动完成开始),然后继续。

祝你好运!

答案 1 :(得分:4)

在服务器端进行繁重的工作更好

在CodeIgniter中,您可以创建一个视图,循环遍历表中的所有行,添加类或您需要的任何其他内容。在Javascript中有没有原因可以做到这一点。

Javascript是一种病态滥用的语言,带有不幸的语法。为什么你想要加载一个页面,然后发出一个AJAX调用来加载一些JSON对象以推入一个表格超出我的范围。没有理由这样做。

Javascript(和jQuery)用于最终用户增强。使事物滑动,闪烁,消失!即使是最轻微的负载,它也可以进行数据处理。最终用户体验将是垃圾,因为当您的服务器具有无限的功能并且甚至专为此而设计时,您依靠其计算机来处理所有数据。

答案 2 :(得分:3)

最好尽可能在服务器端执行,因为1)您不知道客户端是否会启用JavaScript,2)您不知道客户端处理的速度有多快。如果他们的计算机速度很慢,并且让他们处理整个网站,那么他们就会被淘汰。 JavaScript / jQuery仅用于增强您的网站,而不是用于处理它。

答案 3 :(得分:2)

你得到了正确的权衡。但是,请记住,您可以在服务器端激活压缩,这可能会增加重复标记,从而以较小的带宽成本格式化表格。

请记住,编写适用于所有浏览器(包括手持设备)的Javascript比在PHP中使用相同的服务器端更复杂。并且不要忘记“新的JavaScript优化”不适用于手持设备的浏览器。

答案 4 :(得分:2)

这取决于您的目标市场和您网站的目标。

强烈相信使用客户端可以从服务器卸载工作。显然,重要的是你正确地做到这一点,因此它对最终用户来说仍然很快。

在no-js支持很重要的网站(公共网站等)上,您可以回退到服务器。你最终会在这些情况下加倍代码,但收益非常有益。

对于高级Web应用程序,您可以决定将JS作为一项要求是否值得失去(非常)少数用户的交易。对我来说,如果我对目标市场有一定的控制权,我就把它作为一项要求并继续前进。花费大量时间来支持一小部分潜在受众,几乎永远是有意义的。 (除非花费在辅助功能上的时间不同,并且非常重要,无论您的网站上有多少人适合此群组。)

要记住的重要一点是,将DOM尽可能少地来完成工作。这通常意味着构建一个HTML字符串并使用单个append操作将其添加到页面中,然后循环遍历一个大表并一次添加一行。

答案 5 :(得分:2)

我做了大量的AJAX应用程序开发,我可以根据自己的经验告诉你。两者之间的良好平衡是关键。

执行原始数据服务器端,但使用javascript进行您需要的任何修改。例如分页,列排序,行条带化等

我非常喜欢在AJAX中做所有事情......但是使用AJAX做这件事有一些短暂的下降,那就是搜索引擎优化。搜索引擎不会阅读javascript,所以为了您网站的页面排名,我会说所有数据都在服务器端提供,然后格式化并使客户端看起来很酷。

我非常喜欢AJAX的原因是因为它大大加快了用户的APP使用速度,因为它只会加载您需要加载的所需数据,而不是每次执行某些操作时加载整个页面。 ..你可以做一大堆的东西,比如隐藏/显示行/列(我们在这里谈论表操作,因为你提到了一个表),甚至用这些显示/隐藏操作添加删除操作,当你点击删除行或按钮不仅可以直观地删除该行,而且还可以通过对服务器端代码的AJAX调用在数据库中删除该行。

简而言之。

原始数据:服务器端向客户端发送html布局中的原始数据(表结构化数据的表,但是我在div和其他灵活的html标签中执行其他所有操作,只为列/行样式数据执行表)< / p>

数据格式化:客户端,它还包括与数据交互的任何方式。添加到它,从中删除,以不同的方式排序等。这实现了两件事。 SEO和用户体验(UX)。