在内网使用 DWR 时,会不会出现性能或安全问题等劣势?Direct Web Remoting 是一种使用 Ajax 请求从 js 文件联系服务器的工具。
6 回答
我要注意的一件事是,与(正常)全页 HTTP 交付相比,您的服务器很可能会受到更多 HTTP 请求的攻击。
让我解释。当您的网页启用 AJAX 时,您的客户端最终会创建更多 HTTP 请求以用于(例如)表单填充、页面片段重新生成等。我见过开发人员疯狂 AJAX 并让网页成为主要是动态文档。这会带来出色的用户体验(如果做得好),但每个请求都会导致服务器命中,从而导致可伸缩性和延迟问题。
注意 - 这不是 DWR 特有的,而是 AJAX 问题。我用过 DWR,效果很好。不幸的是,我发现它运行得非常好,而且非常容易,以至于所有东西都成为远程处理的候选对象,你最终可能会收到大量的小请求。
我使用 DWR 进行了一个项目 - 一个非常好的工具。
不过,我不相信发展的速度。他们确实在开发日志上发布了他们正在努力推出 3.0,但最后一个稳定版本 - 2.0 - 于 2006 年夏天发布。从支持的角度来看,这有点令人担忧 - 特别是错误修复。
我遇到的主要问题是尝试在系统上编写负载测试脚本,其中主要工作是通过 DWR 调用完成的。与仅回复一堆带有更改参数的 url 相比,调用的格式很难复制。
尽管如此,DWR 仍然是一个出色的框架,它使实现 Javascript -> Java RPC 非常容易。
当前 DWR 3.x 缺少一个任何用户都应该注意的特性是,当 bean 的实例具有 NULL 值的属性时,这些属性仍将被注入 JSON,并且这些冗余数据确实会影响性能。
当属性值为 NULL 时,通常不应将其发送到前端。
问题详情: http: //dwr.2114559.n2.nabble.com/Creating-Custom-bean-converter-td6178318.html
DWR is a great tool when your site has a lot of ajax calls.
Each page that makes dwr rpc calls needs to include :
a) an interface file corresponding to the calls being made.
and
b) a js file bundled with dwr that contains the dwr engine code that makes these calls possible. for e.g. <script src="/dwr/engine.js" ></script>
one technique that is frequently used while optimizing web applications is to use the browser cache as much as possible when a resource(like a js file) has not changed on a server.
engine.js is something that will never change unless you upgrade your dwr to a newer version. But, by default, engine.js is not a static file served by your webserver. its bundled as part of the dwr tool itsef and is served by the dwr controller/servlet.this doesnt aid client side caching.
So, it is beneficial to save engine.js under the document root of your webserver and let the webserver serve it as a static file.
传输对象(编组)的其他解决方案之间的最大区别是对象引用。
例如,如果您使用它来传输树:
一个
|-B
|-C
在列表 {A,B,C} 中:
B.parent = A C.parent = A
那么 A 就是 Javascrit 中的同一个对象!
不利的一面是,如果您有具有循环依赖关系和大量对象的复杂结构:A<-B、B<-C、C<-B、C<.A,... 它可能会崩溃。
无论如何,我在一个由数百家公司在生产中使用的实际项目中使用它来将数千个对象传输到单个 html 页面以绘制复杂的图形,并且它工作得很好,性能也很好。