移动web开发ajax缓存操作
移动web开发过程中网速是必须考虑的一个因素,所以一般是尽可能的在本地存储数据,避免弱网环境下请求数据失败导致页面没有内容的情况。
前后端分离是web开发的必然趋势,在PC端我们有时甚至为了避免ajax缓存去做一些处理,但是移动端我们却需要把ajax请求给缓存下来,尤其是json数据。
function ajaxCache(opt){
function getStoreKey(opt){
var url = opt.url;
//缓存最后面的json文件名
var storeKey = url.match(/([^\/]*)\/*$/)[1];
var hashStr = url;
if (opt.data){
hashStr += JSON.stringify(opt.data);
}
var hash = hashStr;
storeKey += hash;
return storeKey;
}
//加载缓存的数据
function loadCachedData(opt, storage){
var storeKey = getStoreKey(opt);
var data = storage.getItem(storeKey);
try{
data = JSON.parse(data);
} catch(e){
Logger.log(storeKey+":缓存数据解析出错");
data = null;
}
return data;
}
function attachSuccessProxy(opt, storage){
var oldSuccess = opt.success;
opt.success = function(){
var data = arguments[0];
if (data){
var storeKey = getStoreKey(opt);
storage.setItem(storeKey, JSON.stringify(data));
}
oldSuccess.apply(this, arguments);
};
}
var cachedAjax = function(opt){
if (!opt.url){
opt.url = location.toString();
}
if (opt.sessionCache && opt.success){
var sessionData = loadCachedData(opt, session);
if (sessionData){
opt.success(sessionData, 'session');
return; // no further request from remote server
}
attachSuccessProxy(opt, session);
}
if (opt.localCache && opt.success){
var localData = loadCachedData(opt, local);
if (localData){
opt.success(localData, 'local');
}
attachSuccessProxy(opt, local);
}
$.ajax(opt);
};
return cachedAjax;
}
移动web开发ajax缓存操作的更多相关文章
- web开发之缓存
以数据为驱动的web站点,当访问量增大后,由于频繁的从DB中读取数据,使得DB服务器的压力大增,从而影响系统的性能.为了缓解这种来自于大访问量的频繁读取DB的压力,我们可以把一些数据缓存起来,当请求过 ...
- Web 开发后端缓存思路
数据写入缓存: 在数据库与服务端之间利用 redis 这是一个很常见的场景.比如文章的浏览数,每次文章被浏览时,浏览数都 +1.如果每次都回写数据库,不免数据量太大.加上数据库看似简单,其实做了不少关 ...
- spring boot web 开发及数据库操作
推荐网站http://springboot.fun/ 1.json 接口开发 2.自定义 filter 3.自定义 property 4.log 配置 5.数据库操作 6.测试
- asp.net web 开发登录相关操作的控件LoginName、LoginStatus和LoginView控件使用详解
http://book.51cto.com/art/200909/154039.htm http://book.51cto.com/art/200909/154041.htm ASP.NET提供了一套 ...
- web开发:javascript操作
一.函数闭包 二.面向对象 三.js选择器 四.事件初始 五.js处理页面内容 六.js事件控制标题栏 七.js控制类名 一.函数闭包 ```js// 函数的嵌套定义, 定义在内部的函数就称之为 闭包 ...
- Python学习-前台开发-ajax操作
概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...
- Web开发基本准则-55实录-缓存策略
续上篇<Web开发基本准则-55实录-Web访问安全>. Web开发基本准则-55实录-缓存策略 郑昀 创建于2013年2月 郑昀 最后更新于2013年10月26日 提纲: Web访问安全 ...
- Web的Ajax应用开发模式(二)——Ajax开发模式分析
寄语: 前天在查看一些公司的招聘要求时,看到有公司要求测试人员了解Ajax,故写此博文旨在帮助测试人员提高自身技术知识水平,愿与广大测试同胞共同进步.(欢迎纠错!!!) Web应用的传统开发模式总结: ...
- Ajax与传统Web开发的区别
基本概念 1.1,Ajax AJAX:即“Asynchronous Javascript And XML”(异步的JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,尤其是在一种 ...
随机推荐
- screen新建窗口,环境变量跟原来不一致。
昨天为了方便npm安装全局包,我把环境变量重新配置了. 然后,在项目中引用全局包没有出问题.但是后来我在screen里面引用全局包,报错说找不到. 使用#npm list -g命令 发现昨天的全局包都 ...
- 2016级算法第五次上机-F.ModricWang的水系法术
1066 ModricWang的水系法术 思路 比较典型的最大流问题,需要注意的是,题目已经暗示(明示)了这里的边是双向的,在建图的时候需要加上反向边的容量值. 解决最大流问题的基本思路就是不断在残量 ...
- Eclipse MarketPlace 打不开,对话框闪退
原文地址: https://blog.csdn.net/wonder_boy869/article/details/81031222 Eclipse的版本更新到了4.8.0(photon版),点击he ...
- ORACLE的WITH语句的一个疑惑
使用WITH语句,更新表数据,不行: WITH VN AS ( SELECT T.ID, T.NODE_ID, N.NODE_TYPE, N.NODE_NAME, T.NODE_LEVEL, T.RN ...
- python之类与对象(2)
3. 类函数的进阶 3.1 类函数调用类属性 关于类函数调用类属性,我们尝试修改前一节的内容,以我们在之前学习的内容,调用属性直接用%+属性就可以了,那我们来试一下: 看到了程序有报错,这其实是因为在 ...
- 最近总想着写一个模拟alert和confirm插件,代替原生的
msgbox-confirm github: https://github.com/tong-mikasa/msgbox-confirm 主要js代码,scss代码 (function($) { $ ...
- zero-copy总结
基本概念 零拷贝,通常在java NIO编程中会使用,比如netty网络工具包. 其真实意思是: 网卡或者其他外设进行io操作时不经过CPU, 而是直接和主memory交互,不经过CPU寄存器,这样可 ...
- WinForm的Chart图形控件
/// <summary>画条形图的方法 /// </summary> /// <param name="arr">条形值数组参数</pa ...
- ubuntu 16.04 屏幕截图
shift+prtsc 快捷键截取指定区域的图片 类似qq截图
- openerp学习笔记 对象间关系【多对一(一对一)、一对多(主细结构)、多对多关系、自关联关系(树状结构)】
1.多对一(一对一)关系:采购单与供应商之间的关系 'partner_id':fields.many2one('res.partner', 'Supplier', required=True, sta ...