移动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),是指一种创建交互式网页应用的网页开发技术,尤其是在一种 ...
随机推荐
- JAVA将秒的总和转换成时分秒的格式
public static void main(String[] args) { String str = "221"; int seconds = Integer.parseIn ...
- 条目二十三《考虑用排序的vector替代关联容器》
条目二十三<考虑用排序的vector替代关联容器> 在看到这个条目的标题的时候,说实话,我一下子是比较懵逼的.这个结论怎么和数据结构的时间复杂度不一致了? 一般来说,像map,set等关联 ...
- 条目二十一《总是让比较函数在等值情况下返回false》
条目二十一<总是让比较函数在等值情况下返回false> 这条目对序列容器是不适合的,因为序列容器就是通过等值判断来比较的. 对于关联容器来说,比较是等价比较,所以要注意等值的时候,比较子的 ...
- 【Leetcode】Reorder List
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...
- Compile Groovy/Spock with GMavenPlus
在之前的博文里曾使用GMaven插件编译Groovy/Spock,这次使用GMavenplus插件,更加方便. 具体步骤 1. 导入Spock和Groovy依赖 <dependency> ...
- 基础篇:6.1)形位公差-要素 Feature
本章目的:理解形位公差研究的对象-要素,即点.线.面. 1.定义 2.类型 2.1 按存在的状态分 2.2 按结构特征分 2.3 按所处的地位分 2.4 按结构性能分 2.5 按与尺寸关系分
- 剑指offer——面试题20:表示数值的字符串
#include"iostream" using namespace std; bool IsInt(const char **str); bool IsUnsignInt(con ...
- 论文阅读 | FPN:Feature Pyramid Networks for Object Detection
论文地址:https://arxiv.org/pdf/1612.03144v2.pdf 代码地址:https://github.com/unsky/FPN 概述 FPN是FAIR发表在CVPR 201 ...
- 一个迷你的 Node.js 基于 Express 的 MVR 模式的 API工程 的分析
1. 工程说明 该工程是基于 Express 库,编写的一个 API 查询返回的一个微型应用. API Resource 就是把 API 的内容当做网络资源去处理.工程中的路由访问也是返回 API 内 ...
- vue-router学习
JS push goTo(){ , postId: ' }}) } router.js // 动态路径参数 以冒号开头 { path: '/user/:id', component: User } { ...