Javascript 服务器端处理与客户端处理&x2B;AJAX

Javascript 服务器端处理与客户端处理&x2B;AJAX,javascript,ajax,performance,scalability,Javascript,Ajax,Performance,Scalability,正在寻找一些一般性建议和/或想法 我正在创建一个我认为更像是一个web应用程序而不是网页的应用程序,因为我希望它像一个gmail应用程序,你可以整天打开页面,同时让更新“推”到页面上(对于感兴趣的人,我正在使用comet编程技术)。我以前从未创建过一个ajax和javascript如此丰富的网页(我现在是jquery的超级粉丝)。正因为如此,当我一次又一次地实施一项新功能,要求服务器需要了解的UI中的动态更改时,我面临着同样的问题: 1) 我是否应该用javascript在客户端上完成所有处理,

正在寻找一些一般性建议和/或想法

我正在创建一个我认为更像是一个web应用程序而不是网页的应用程序,因为我希望它像一个gmail应用程序,你可以整天打开页面,同时让更新“推”到页面上(对于感兴趣的人,我正在使用comet编程技术)。我以前从未创建过一个ajax和javascript如此丰富的网页(我现在是jquery的超级粉丝)。正因为如此,当我一次又一次地实施一项新功能,要求服务器需要了解的UI中的动态更改时,我面临着同样的问题:

1) 我是否应该用javascript在客户端上完成所有处理,并通过ajax尽可能少地发回 或 2) 我是否应该通过ajax向服务器发送请求,让服务器完成所有处理,然后发回新的html。然后在ajax响应中,我用新的HTML做了一个简单的赋值

我一直倾向于追随。我想这个web应用程序可能会在所有ajax请求中变得非常健谈。我的想法是尽可能减少请求和响应的大小,并依靠不断改进的javascript引擎尽可能多地进行处理和UI更新。我发现,使用jquery,我可以在客户端完成很多以前无法轻松完成的事情。我的javascript代码实际上比我的服务器端代码更大、更复杂。我还需要执行一些简单的计算,我也在客户端推动了这一点

我想我的主要问题是,我们是否应该尽可能争取客户端处理而不是服务器端处理?我一直觉得服务器处理的越少,可伸缩性/性能就越好。让客户端处理器的能力完成所有的艰苦工作(如果可能的话)


想法

当然,这取决于数据,但大多数情况下,如果您可以将其推送到客户端,请这样做。使客户端执行更多的处理,并使用更少的带宽。(这同样取决于数据,您可能会遇到需要发送更多数据才能在客户端完成的情况)。

我同意您的看法。尽可能多地向用户推送,但不要推得太多。如果你的应用程序速度变慢或者更糟的是浏览器崩溃,你就会失去控制

我的建议是实际测试应用程序在全天打开时的行为。检查是否没有内存泄漏。检查在使用应用程序一段时间后,是否没有每隔半秒创建一个ajax请求(JS中的计时器有时会很麻烦)

除此之外,永远不要使用javascript执行用户输入验证。始终在服务器上复制它

编辑

使用jquery。它将在重新绑定生成的内容时为您节省大量时间,并使您的体系结构更加清晰。遗憾的是,当我使用jQuery开发时,它还不可用;我们使用了其他具有相同效果的工具

在过去,当使用ajax生成一个页面部件依赖于生成其他部件时,我也遇到了一个问题。生成第一部分第一和第二部分第二将使您的页面如预期的那样变慢。提前计划好这件事。开发一个页面,使其在打开时已包含所有内容


另外(关于简单页面),保持一台服务器上引用文件的数量较低。将javascript和css库连接到服务器端的一个文件中。将映像保留在单独的主机上,更好地分离主机(只创建第三级域也可以)。虽然只有在生产上才值得;这将使开发过程变得更加困难。

应该始终在服务器上执行安全检查之类的工作。如果您的计算需要大量数据,但生成的数据较少,也可以将其放在服务器上


顺便问一下,您是否知道可以在服务器端运行Javascript,呈现模板并访问数据库?查看生态系统。

也可能存在跨浏览器支持问题。如果您使用的是跨浏览器、客户端库(例如JQuery),并且它可以处理您需要的所有处理,那么您可以让库来处理它。根据标记的复杂性,在服务器端生成跨浏览器HTML可能会更困难(往往更为手动)。

在决定是在服务器端还是客户端构建由ajax请求创建的新HTML片段时,需要考虑几个因素。需要考虑的一些事项:

  • 表演。服务器必须做的工作是您应该关心的。通过在客户端进行更多的处理,可以减少服务器的工作量,并加快速度。例如,如果服务器可以发送少量的JSON而不是巨大的HTML片段,那么让客户机来做会更有效率。在以任何一种方式发送少量数据的情况下,差异可能可以忽略不计

  • 可读性。在JavaScript中生成标记的缺点是读取和维护代码要困难得多。在语法着色设置为JavaScript的文本编辑器中,将HTML嵌入带引号的字符串是一件令人讨厌的事情,这使得编辑更加困难

  • 数据、表示和行为的分离。在可读性方面,JavaScript中包含HTML片段对代码组织没有多大意义。HTML模板应该处理标记,JavaScript应该单独处理应用程序的行为。插入到页面中的HTML片段的内容与JavaScript代码无关,只是插入的位置和时间

在处理ajax响应时,我倾向于从服务器返回HTML片段,这是出于我上面提到的可读性和代码组织的原因。当然,这完全取决于您的应用程序的工作方式、处理方式