`
小鸡啄米
  • 浏览: 38615 次
  • 性别: 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;
        }
    }
 
分享到:
评论

相关推荐

    Loadrunner负载测试 浏览器缓存设置

    在这个特定的场景下,我们关注的是“Loadrunner负载测试中的浏览器缓存设置”。了解如何在LoadRunner中正确设置浏览器缓存对于获取真实用户行为的数据至关重要,因为这直接影响到测试结果的准确性。 浏览器缓存是...

    浏览器缓存目录设置

    ### 浏览器缓存目录设置 在日常的网络浏览过程中,浏览器缓存的作用非常重要,它不仅能够提高网页加载速度,还能有效减少硬盘碎片的产生,进而提升整体系统的运行效率。本文将详细介绍如何针对不同浏览器(如Fire...

    浏览器缓存例子浏览器缓存例子浏览器缓存例子浏览器缓存例子

    浏览器缓存是前端开发中的重要概念,它对提高网页加载速度和减少服务器压力起到关键作用。浏览器缓存通过存储重复请求的资源,如HTML、CSS、JavaScript文件和图片,使得这些资源可以在用户再次访问时无需从服务器...

    jsp去除浏览器缓存

    本文将详细介绍如何在JSP(JavaServer Pages)应用中实现去除浏览器缓存的功能。 #### 二、理解浏览器缓存 浏览器缓存是指浏览器存储已访问过的页面资源(如HTML文档、图片、CSS样式表等),以便当用户再次访问...

    Chrome浏览器缓存查看导出工具(支持最新版)

    Chrome浏览器缓存查看导出工具是一款专为用户设计的实用软件,它允许用户方便地查看、管理和导出Chrome浏览器中的缓存数据。这款工具对于开发者、网站管理员以及那些需要全面了解浏览器缓存工作原理的人来说非常有用...

    清除浏览器缓存

    然而,在某些情况下(如开发测试阶段或网站更新后),我们需要清除浏览器缓存来确保用户能够看到最新的网页内容。本文将详细介绍如何通过在HTML页面的`&lt;head&gt;`标签中添加特定的元数据来实现清除浏览器缓存的功能。 ...

    web项目页面缓存清除,不用每次刷新浏览器

    例如,设置Cache-Control为`no-cache`或`no-store`可以防止浏览器缓存页面,`must-revalidate`则要求每次请求都验证资源是否更新。 2. **HTML5的Service Worker**:Service Worker是一种在浏览器后台运行的脚本,它...

    html5前端浏览器离线缓存

    最后,离线缓存的大小受到浏览器限制,不同浏览器的限制值可能不同,超出部分将无法缓存。 为了解决离线缓存的这些问题,HTML5提供了Service Worker API,这是一个更加灵活和强大的离线解决方案。Service Worker...

    web浏览器-缓存详解

    本文将深入解析浏览器缓存的工作原理、类型、以及如何控制和利用缓存来优化网站性能。 一、浏览器缓存的原理 浏览器缓存(Browser Cache)是一种本地存储机制,它会保存用户访问过的网页资源(如HTML、CSS、...

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

    本文将深入探讨浏览器缓存的实现原理。 首先,浏览器缓存的获取路径包括服务器、本地缓存以及缓存服务器。当用户发起一个HTTP请求时,浏览器会根据服务器返回的HTTP响应头信息来决定是从哪个来源获取内容。页面文件...

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

    1. 虽然上述方式通常能有效禁用浏览器缓存,但并非所有浏览器都完全遵循这些标准,因此在特定情况下可能仍需要其他措施,如动态生成URL(例如添加时间戳)来防止缓存。 2. 禁用缓存可能导致性能下降,因为每次请求...

    基于android的浏览器设计与实现论文.docx

    Android浏览器的关键技术包括网页渲染引擎、JavaScript引擎、网络请求处理、缓存管理、插件管理等。这些技术的掌握是设计和实现一个基于Android的浏览器的基础。 知识点四:Android浏览器的插件开发 Android浏览器...

    浏览器缓存相关知识.zip

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

    浏览器缓存视频文件

    浏览器缓存是互联网浏览过程中一个重要的机制,它允许用户在不重复下载相同数据的情况下快速访问网页,特别是视频内容。当你在线观看视频时,浏览器会自动将视频文件的一部分或全部存储在本地硬盘上,以便下次访问时...

    js清除浏览器缓存的几种方法

    在Web开发过程中,浏览器缓存是提升页面加载速度和用户体验的一个重要机制,但有时候它也会导致网页显示不及时更新的问题。为此,了解如何使用JavaScript来清除或避免浏览器缓存变得至关重要。本文介绍了几种使用...

    chrome浏览器缓存查看工具

    Chrome浏览器缓存查看工具是一款专为用户设计的实用软件,旨在帮助用户轻松访问和管理Google Chrome浏览器中的缓存数据。这个工具允许用户查看并分析在浏览网页时存储的各种资源,如图片、音频、视频和文档等。对于...

    一款chrome浏览器插件能够让所有请求无缓存

    标题中的“一款chrome浏览器插件能够让所有请求无缓存”是指的是一款专为开发者设计的Chrome浏览器扩展程序,它的主要功能是确保所有的网络请求都不会被浏览器缓存。在Web开发和调试过程中,缓存可能会导致旧的数据...

    彻底理解浏览器的缓存机制.docx

    浏览器缓存机制是基于HTTP协议实现的,它通过缓存标识来判断请求的数据是否可以被重用,从而避免了不必要的网络传输。 #### 二、HTTP报文结构简述 在深入了解浏览器缓存机制之前,我们需要对HTTP报文的基本结构...

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

    浏览器缓存之前获取的资源时,会记录下资源的ETag(实体标签)和Last-Modified(最后修改时间)值。当浏览器再次请求该资源时,会在请求头中添加If-None-Match和If-Modified-Since头信息,服务器通过比较这些头信息...

Global site tag (gtag.js) - Google Analytics