`
小鸡啄米
  • 浏览: 38226 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

不同浏览器下的缓存实现

阅读更多

    在浏览器的缓存数据的方式除了cookie之外,还可以有其他方法,但各个浏览器的支持的方法不一样,比如ie就不支持localstorage,写了一个util来屏蔽浏览器中实现缓存的差异,但是有些差异是不可避免的,比如存储的大小。

    /**
     * 根据浏览器的类型,判断出存储数据的方式
     * @enum {number}
     *<pre>
     *[saveType = 1] 利用localStorage 的方式存储数据
     *[saveType = 0] 利用userdata 方式存储数据 ie 浏览器
     *</pre>
     */        
    var saveType = 2, uniqueinstance, object,_OTos = Object.prototype.toString, _oArray = "[object Array]", _oObject = "[object Object]";
    /**
     * ie 中保存数据
     * @param args {object}
     * <pre>
     * {
     *     file : '', IE6浏览器的域对象 一个对象中只能使用一次第二次使用将覆盖原始值,其他浏览器中该值无效
     *     key : '', 键的名称
     *     content : object 值的内容  类型可以是number object array string
     * }
     *</pre>
     */
    function _saveIEData(args){
        var content = args.content, key = args.key, vtype;
        vtype = _OTos.apply(content);
        if (vtype == _oArray || vtype == _oObject){
            content = JSON.encode(content);
        }
        object.setAttribute(key, content);        
        object.save(args.file);
    }
    function _loadIEData(args){
        /**
         * 读取数据的类型
         * {string|object|array}
         */
        var type = args.type, file = args.file, content;
        object.load(file);
        content = object.getAttribute(args.key);
        if (type == "array" || type == "object"){
            content = JSON.decode(content);
        }
        return content;
    }
    function _deleteIEData(args){
        var file = args.file;
        object.load(file);
        object.expires = new Date(315532799000).toUTCString();
        object.save(file);
    }
    /**
     * 利用localstorage 存储 读取 数据
     */
    function _saveCommonData(args){
        var content = args.content, k = args.key, vtype ;
        vtype = _OTos.apply(content);
        if (vtype == _oObject || vtype == _oArray){
            content = JSON.encode(content);
        }
        localStorage[k] = content;        
    }
    function _deleteCommonData(args){
        localStorage.removeItem(args.key);
    }
    function _loadCommonData(args){
        var type = args.type , key = args.key, avalues = localStorage.getItem(key);
        if (type == "array" || type == "object"){
            avalues = JSON.decode(avalues);
        }
        return avalues;
    }
    /**
     * 真实的localstorage对象
     * 初始化时判断使用localstorage的方式根据浏览器的版本选择
     * 当没有浏览器支持该对象时返回一个null 对象
     */
    function constructor(){
        if (typeof localStorage != "undefined"){
            saveType = 1;
        }
        else if(typeof MT.DOC.documentElement.style.behavior != undefined){ 
            saveType = 0;
            if(typeof object == "undefined"){
                object = MT.DOC.documentElement;
                object.style.behavior = "url('#default#userdata')";
            }       
        }
        else{
            return null;
        }
        this.constructor = LocalStorage;
        this.saveData = function(args){
            this.saveData = saveType ? _saveCommonData : _saveIEData;
            this.saveData(args);
        };                 
        this.loadData = function(args){
            this.loadData = saveType ? _loadCommonData : _loadIEData;
            return this.loadData(args);
        }
        this.deleteData = function(args){
            this.deleteData = saveType ? _deleteCommonData : _deleteIEData; 
            this.deleteData(args);
        }
    }
    var LocalStorage = {
        /*
         * @memberof LocalStorage
         * 惰性实例化 单例
         */
        getInstance: function(){
            if(!uniqueinstance){
                uniqueinstance = new constructor();
            }
            return uniqueinstance;
        }
    }
 
分享到:
评论

相关推荐

    初探浏览器缓存实现原理-提高性能

    浏览器缓存将文件保存在客户端,好的缓存策略可以减少对网络带宽的占用,可以提高访问速度,提高用户的体验,还可以减轻服务器的负担。因此我们有必要了解它的实现原理,用来提高网站的性能。 当一个客户端请求web...

    浏览器缓存相关知识.zip

    浏览器缓存 浏览器缓存主要可以分为两大类:客户端缓存和服务端缓存。客户端缓存,即浏览器缓存,是本文主要讨论的内容。而服务端缓存则主要包括代理服务器缓存和反向代理服务器缓存,以及广泛使用的CDN等。这些...

    JavaWeb如何实现禁用浏览器缓存

    主要介绍了JavaWeb如何实现禁用浏览器缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    JSP页面缓存cache技术–浏览器缓存介绍及实现方法

    一、概述 缓存的思想可以应用在软件分层的各个层面。它是一种内部机制,对外界而言,是不可感知的。 数据库本身有缓存,持久层也可以缓存...二、缓存实现(浏览器缓存当前访问的JSP动态页面) (一)、服务端方法: 代

    html5前端浏览器离线缓存

    可以实现浏览器或者HTML5+APP在无网络下离线存储数据。可以实现浏览器或者HTML5+APP在无网络下离线存储数据。

    Web应用与开发作业

    (1)禁止浏览器缓存所有动态页面; (2)有3个http响应头字段可以禁止浏览器缓存当前页面,它们在Servlet中的示例代码如下。 response.setDateHeader("Expires",-1); response.setHeader("Cache-Control","no-cache...

    微信浏览器取消缓存的方法

    主要介绍了微信浏览器取消缓存的方法,本文使用meta头信息实现取消了微信浏览器的缓存,特别是在开发时会经常用到,需要的朋友可以参考下

    基于nginx设置浏览器协商缓存过程详解

    主要介绍了基于nginx设置浏览器协商缓存过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    JSP实现屏蔽浏览器缓存的方法

    主要介绍了JSP实现屏蔽浏览器缓存的方法,实例分析了两种屏蔽浏览器缓存的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    让html页面不缓存js的实现方法

    当浏览不同Url时,浏览器会自动将当前访问的地址进行一次缓存;而第二次访问时着调用缓存下来的页面,从而达到页面快速加载(页面加载优化)的目的; 因此,我们可以给页面后面设定个不同的值,让页面保持没错访问的...

    php禁止浏览器使用缓存页面的方法

    页面缓存在有的时候是不需要的,我们可以禁止浏览器缓存页面。 在PHP中可以轻松的使用下面的语句实现禁止页面缓存,但比较难记特整理下,方便大家使用。 php代码如下: 复制代码 代码如下:&lt;?php // 设置此页面的...

    VMLogin防关联指纹浏览器,账号多开工具下载

    VMLogin可在同一个电脑上生成多个物理隔离并且防关联的反指纹...再结合代理给每个浏览器单独配置一条IP,就可以模拟任何国家地区的电脑和手机端的浏览器,真正实现一台电脑即可同时多开不同指纹信息的防关联浏览器。

    node.js实现http服务器与浏览器之间的内容缓存操作示例

    主要介绍了node.js实现http服务器与浏览器之间的内容缓存操作,结合实例形式分析了node.js http服务器与浏览器之间的内容缓存原理与具体实现技巧,需要的朋友可以参考下

    《基于Python中PyQt5实现简易浏览器的设计与实现.docx》万字、已降重、毕业论文、本科

    《基于Python中PyQt5实现简易浏览器的设计与实现.docx》万字、已降重、毕业论文、本科,目录如下,希望对你有所帮助: 第一章 前言 1.1 研究背景 1.2 研究目的与意义 1.3 研究内容与方法 1.4 论文结构 第二章 PyQt5...

    webgl_webGL帧缓存_webgl缓存_源码

    代码说明如何实现webgl帧缓存。里面包含了HTML,JS, GLSL的代码。

    Chrome 进阶技巧:将缓存路径放到非系统分区并设置大小

    统分区,连浏览器的缓存以及用户数据文件都会在系统分区里,对于一些不喜欢将程序安装在 系统分区或者系统分区较小的用户来说非常不人性化。尤其是对于使用固态硬盘做系统盘以及 想要实现关机即删除缓存的用户来说更...

    浏览器实现

    浏览器实现收藏夹过滤器主页设置清空缓存功能

    落叶wap浏览器

    目前实现的功能主要是浏览wap网页,玩wap游戏,偷菜等,下载wap资源等功能。电脑版wap浏览器是一个人独立开发完成的,完全利用个人业余时间与精力进行电脑版wap浏览器的开发工作。面对目前中文市场上电脑版wap浏览器...

Global site tag (gtag.js) - Google Analytics