移动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),是指一种创建交互式网页应用的网页开发技术,尤其是在一种 ...
随机推荐
- 在iOS7中修改键盘Return键的类型
今天将之前运行在iOS7之前的一段代码拿出来,在iOS7的机器上运行,发现键盘上的ReturnKeyType不能被修改了. 经过几番查找资料,了解到iOS7中UISearchBar的结构发生了变化,将 ...
- Win10通电自动开机的解决办法
前几天Win10强推系统升级,更新后无意中发现每次通电电脑就自动开机了. 解决办法: 打开控制面板>电源选项>选择电源按钮的功能,把关机设置里的“启用快速启动(推荐)”选项去掉就可以了. ...
- Windows/Ubuntu下,将所有文件名字列举出来并保存到txt文件中
Windows下 使用如下的DOS命令来实现: dir /s /b > lists.txt 可以将当前路径下的所有文件的"文件路径+文件名"存储在lists.txt中. 其中 ...
- 封装log4j支持记录到testng
一.初始方案 自动化中需要把日志通过testng的Reporter.log来记录日志在报告中展示.开始是新增了一个日志类: ReporterLog.class import org.slf4j.Log ...
- shell map使用
# 定义初始化map declare -A map=([") # 输出所有key echo ${map[@]} # 输出key对应的值 "]} # 遍历map for key in ...
- git特殊用法
git stash的使用 1.当前分支写了一半的代码,需要切到其他分支修复bug或者完成优先级较高的任务时 git stash 暂存分支进度 git stash list 查看草稿区 git stas ...
- 本科生毕业论文->计算机类(1)
写在前面:作为一个计算机类学生,本文只是面向计算机类本科论文进行了一些小经验总结,每个学校的论文要求不一致,具体的参考规范可以看学校的通知,毕业论文作为毕业的一个重要审核标准,写好毕业论文是非常重要的 ...
- 性能调优之vmstat命令(转)
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.IO读写.CPU活动等进行监视.它是对系统的整体情况进行统计,不足之处是无法对某 ...
- Fiddler使用三(Fiddler内置命令)
参考:http://blog.csdn.net/ohmygirl/article/details/17855031 一. Fiddler内置命令. 上一节使用Fiddler进行抓包分析中,介绍到,在w ...
- 【javascript】javascript学习之js脚本的解析步骤
将javascript代码加入到HTML代码中,即使用<script>标签的方式有两种:直接嵌入页面中和使用外部js文件. 使用<script>标签嵌入html代码中时,需要指 ...