我今天在jQuery.com上遇到过"代理模式"的概念,但是无法做出任何改变.显然它很有用,但我根本不理解这个想法,这对我来说听起来很陌生.有人可以用简单的语言向我解释,"好像我是一个3岁的孩子"?
Iva*_*van 41
想象一下,你的网站有很多ajax请求.设计有所改变.现在每个请求之前你想要显示一些自定义加载gif.您需要更改存在ajax请求的所有代码,或者您可以使用代理模式.
var proxied = jQuery.ajax; // Preserving original function
jQuery.ajax = function() {
jQuery("#loading").dialog({modal: true});
return proxied.apply(this, arguments);
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*edo 24
在Javascript Patterns一书中,Stoyan Stefanov将这种模式描述为:
在代理模式中,一个对象充当另一个对象的接口.代理位于对象的客户端和对象本身之间,并保护对该对象的访问.
这种模式可能看起来像一个开销,但它对于性能目的很有用.代理服务器扮演对象的监护角色(也称为"真实主题"),并尝试使此对象尽可能少地工作.
一个现实世界的例子
当真实主体做了昂贵的事情时,代理模式很有用.在Web应用程序中,您可以执行的最昂贵的操作之一是网络请求,因此尽可能多地组合HTTP请求是有意义的.
您可以在此处查看示例:http://www.jspatterns.com/book/7/proxy.html.(看看源代码).
您有一个页面上的视频列表.当用户点击视频标题时,标题下方的区域会展开以显示有关视频的更多信息,并且还可以播放视频.详细的视频信息和视频的URL不是页面的一部分; 需要通过进行Web服务调用来检索它们.Web服务可以接受多个视频ID,因此我们可以通过尽可能减少HTTP请求来加速应用程序,并一次检索多个视频的数据.
该视频对象不调用HTTP直接服务,但呼叫代理来代替.然后代理在转发请求之前等待.如果来自视频的其他来电在50毫秒的等待期内进入,则它们将合并为一个.用户几乎察觉不到50毫秒的延迟,但是当点击"切换"并一次扩展多个视频时,可以帮助组合请求并加快体验.它还显着减少了服务器负载,因为Web服务器必须处理较少数量的请求.
没有代理
代理
代理作为缓存