此模式出自《Ajax patterns and best practice》,这个模式非常具备实际意义,为客户端的缓存实现做出了指导,和以往在使用传统B/S结构进行开发时所做缓存的思路有一个改进点,:)。
在传统的B/S结构的应用中,为了提升系统的响应效率,经常会使用页面分块的缓存方式,在具体的实现上象经常采用oscache这样的东西来对页面的块进行缓存,将缓存的内容放入服务器端,当客户端再次请求时则可以直接从缓存中获取生成的页面块,而无需经过后台的一堆的处理,这种缓存方式对于系统效率的提升非常的明显,基本上达到了生成静态页面的效果。
而在《Ajax patterns and best practice》书中,提出了一种不同视角的缓存控制器模式,它是采用客户端做缓存的方式,当然,服务器端也同时做,这样的视角比较独特,以前还真没考虑过客户端来做缓存,先来说说采用了这种模式后的效果再来看看怎么实现吧:
效果
采用了缓存控制器模式后,客户端提交请求,服务器端返回相应的数据或页面片段,当客户端再次提交请求时,如服务器端此部分的数据或页面片段没发生变化,那么客户端将直接从客户端的缓存中获取数据或页面片段。
这样看来和传统的B/S结构缓存所起到的效果有什么不同的地方呢?就在于客户端也做了缓存,这就使得在数据没有修改的情况下可以减少流量的产生,而在传统的B/S结构的缓存策略中只是提升了服务器端的响应,但流量仍然是同样的。
实现
熟悉缓存策略实现方法的同学们在知道这种效果后基本上也就能想到怎么去实现了,:),只是以前可能没有这么考虑过。
实现上首先在客户端建立对应key的缓存方式,也是类似Map的方式,当客户端发起请求时,将key也发送给服务器端,服务器端根据这个key值来判断是否需要重新获取数据或页面片段(和token方式类似),如需要,服务器端则返回数据或页面片段,如不需要,服务器端则直接返回一个不同的状态码,客户端根据服务器端返回的状态码来决定是从缓存中获取,还是获取服务器端返回的数据或页面片段,同时更新key值以及将数据或页面片段放入缓存中。
:),按照这样的实现方式,如果js也有一个和oscache这些类似的缓存框架就好了....
来看看书中关于实现缓存控制器模式模型的一段描述:
"一种更好的方法是使用HTTP验证模型(HTTP Validation model)。该模型在每次发送响应时都会添加一个标签(ticket)来保证数据的唯一性。如果客户端想要再次下载内容,它将最后下载的标签发送给服务器。服务器端比较发送来的这个标签和它当前持有的标签是否一致。如果标签是一致的,服务器端就发送一个HTTP 304代码,指示出请求的内容没有发生变化。在这种情况下,客户端能够从缓存中获取旧的内容,并将它作为最近和最好的内容展现给用户。HTTP验证模型仍然需要一个HTTP请求,但是它不会带来重复生成和发送内容的代价。"
以上文字摘自即将出版的《Ajax模式和最佳实践》。(也就是《Ajax patterns and best practice》的中文版)
以上是我个人看了缓存控制器模式后对于这种模式的想法,和书中表达方法有所不同,书中对于此种模式讲解更为的深入也更为的全面,能够想深入了解这种模式的话,可以去看看英文版,或者等中文版出版。
分享到:
- 2006-11-20 11:23
- 浏览 2755
- 评论(2)
- 论坛回复 / 浏览 (2 / 4010)
- 查看更多
相关推荐
资源管理器模式 此模式提供了一种统一的方式来管理和调度Ajax请求,避免并发请求过多导致服务器压力过大,或者同一资源的重复请求。 ### 7. 没有回话状态的客户端模式 由于Ajax请求通常不包含完整的HTTP头部,这...
6. **装饰器模式**:允许动态地向Ajax请求添加额外的功能,比如数据验证、错误处理或缓存策略,而不会改变其原有接口。 7. **代理模式**:创建一个代理对象,介于客户端和服务器之间,可以处理复杂的请求逻辑,如重...
8. **透明化Ajax模式**:使非Ajax用户也能正常使用应用,例如通过提供一个“刷新”按钮来手动触发Ajax更新,或者在无JavaScript环境下显示完整的页面。 9. **离线工作模式**:利用HTML5的离线存储特性(如AppCache...
6. **分离关注点**:Ajax应用倾向于采用MVC(模型-视图-控制器)或其他设计模式来分离业务逻辑、界面展示和用户交互,促进代码组织和维护。 **Ajax设计模式** 1. **命令模式**:用于封装异步请求,将请求行为包装...
通过缓存服务器响应或者使用HTTP的缓存控制头,开发者可以实现更智能的数据加载策略。 4. **后台更新模式**: 在用户交互过程中,有时需要在后台执行某些任务,例如数据同步或预加载内容。这种模式需要合理安排...
在Ajax应用中,可以创建一个全局的Ajax请求管理器,统一处理所有请求,避免并发请求过多导致服务器压力过大。 2. **工厂模式**:提供一个接口用于创建对象,但允许子类决定实例化哪一个类。在Ajax请求中,可以使用...
9.3 理解AJAX模式 9.3.1 Periodic Refresh和Timeout 9.3.2 Unique URL 9.3.3 利用JavaScript Template实现数据绑定 9.3.4 Predictive Fetch 9.4 小结 第Ⅲ部分 案例研究:在线电子商务商店 第10章 需求和...
5. **装饰器模式**:Web应用中的权限控制和日志记录常常使用装饰器模式,它可以动态地给对象添加新的行为或责任,而不会破坏封装性。 6. **适配器模式**:在集成第三方库或服务时,适配器模式可以帮助将不兼容的...
过滤器是在控制器动作执行前后运行的逻辑,例如授权、异常处理和缓存。它们可以全局应用,也可以针对特定控制器或动作进行配置。 4. **测试友好**: 由于MVC模式的解耦特性,ASP.NET MVC应用更容易编写单元测试和...
它将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分。模型负责处理数据逻辑,视图负责显示数据,控制器处理用户交互,更新模型并通知视图。 2. **Back-Button Pattern** Ajax应用的一个...
- **Controller(控制器)**:接收用户请求,调用模型进行处理,并更新视图。在分页场景下,它接收分页请求,控制数据的加载和视图的更新。 **2. Ajax技术应用** - **异步通信**:使用XMLHttpRequest对象或者现代...
2. **判断是否为AJAX请求**:在控制器中检查当前请求是否为AJAX请求。 ```php if ($this->isAjax()) { exit($this->fetch('list')); } ``` 如果是AJAX请求,则调用`fetch`方法渲染指定的视图模板并返回,...
为支持Ajax请求,可能需要额外的路由规则,确保Ajax请求能正确路由到对应的控制器方法。 6. **验证和错误处理** 在Ajax环境中,验证和错误处理至关重要。可以使用客户端验证库(如jQuery Validation)进行实时输入...
2. **优化性能**:避免无谓的Ajax请求,合理使用缓存,优化数据传输和DOM操作。 3. **兼容性测试**:确保应用在多种浏览器环境下运行正常,考虑到老旧浏览器的兼容性问题。 4. **文档查阅**:充分利用官方文档和...
在讨论AJAX应用中的编码问题之前,有必要先理解MVC(模型-视图-控制器)模式的优点,这将有助于我们更好地构建Web应用程序。MVC模式允许将应用程序分为三个核心组件,分别是模型(Model)、视图(View)和控制器...
例如,可以创建一个独立的Ajax请求管理器,负责处理所有的异步调用。 2. **数据绑定模式**:将数据与界面元素绑定,当数据变化时自动更新UI,如MVVM(Model-View-ViewModel)架构。 3. **分层架构模式**:将应用...
`PostController.php` 是一个控制器类文件,是 MVC(模型-视图-控制器)设计模式的一部分。在 Yii 中,控制器处理用户请求,调用模型进行业务逻辑处理,并决定如何展示结果到视图。在这个 AJAX 示例中,`...