实话实说,其中大部分是常识性问题。真正的问题都很轻易让人忽视的。
AJAX七宗致命罪
AJAX所使用的JavaScript是内存治理的语言。这意味着JavaScript具有内置的信息包收集功能,因此能够抽取不再有引用路径使用的变量并重新分配这些变量所使用的内存。
作为基本工作原理这很好,但是在模型对象和察看元素之间互相引用时,由于这些循环引用,你就不能依靠这个功能来实现你的内存使用最优化。从原则上讲,对象为零,则元素为零,但是假如这时从元素到对象的向后引用,那么信息包搜集器不会动这些对象。
现在,问题出来了:在文件对象模型中,任何文件树中的DOM节点都可能被树中的其它元素引用,不论其是否被其他对象所引用!因此任何在信息包收集器中经过标注的被DOM节点向后引用的对象,在这一方向必须为空,否则其内存就会一直处于已分配状态。
的网页应用程序属于桌面应用程序,那么他们肯定不会感到不安。这是一个至关重要的设计点。大部分网页应用功能与桌面副本非常类似。但是在网页应用中,用户期望这种虚幻的特征导致他们截然不同。
用户在与网页浏览器打交道时会带有非常不同的偏见和期望,而对于桌面应用中他们并没有这样的行为。因此,尽管页面与服务器之间频繁的响应会非常好,非常高效,页面能够同时对自身进行修订,但是这将会使用户头晕眼花。因此,您需要遵守两条守则,要考虑到进入用户视觉范围内的每个变化:假如对于用户来说不是很迫切的更新,那么要使升级更为暖和,不会转移;假如更新对于用户与应用的交互非常重要,那么更新要清楚而明显。
端的应用了解全部情况并且能够看到全部状况:每个例外,每次重新加载,每个事件多能被看到并记录下来,当然服务器也知道客户端是什么状况,因为服务器会记录下屏幕上显示的一切。
在AJAX应用程序中,问题不是这样。当有事件发生时,这些事件是与服务器相互独立的,也就是说,当客户端出现问题时,服务器端并不会马上知道。在某个位置发现和记录客户端发生的事件以及例外,使服务器能够尽快追踪需要干涉的问题。
即使你认为这样做没有危害。GET操作改变状态,改变状态的链接会令用户感到困惑;大部分都认为链接的作用是导航,而不是功能。
但这呈现给我们一个我们可能会碰到的问题:确定JavaScript能够理解其运行平台上的数据类型,反之,对于.NET或其他都是如此。可能会有多种转换器,你需要把它们找出来。例如,Ajax.NET Pro资料库,提供能够转换.NET 和 JavaScript对象符号的转换器。
评论加载中…
![]() |