所有分类
  • 所有分类
  • 后端开发
客户端存储:离线可用与性能改善的独特方式

客户端存储:离线可用与性能改善的独特方式

基于客户端的存储API,它将数据存在本地设备中的一块区域,该区域同样也是它存储其他用户特定信息如个人偏好、缓存的地方。但就现在来说,把浏览器当作一个二维矩阵,其维度分别是“源”(origin)和“存储”(storage)。和定位逻辑,聚焦于

随着互联网上的技术进步,API(应用程序编程接口)现在成为了我们做软件开发时必不可少的东西。它能给我们带来很多实用的功能,同时还是我们进行数据交流和处理的关键。作为一个开发者,我深知如何巧妙运用API在数据存储、查找和搜索上的强大功能,可以有效提高我们软件的效率和用户使用的舒适度。

同步模式与异步模式:两种不同的存储操作方式

在JavaScript编程里,同步和异步就是两个处理数据的方法。同步就像排队买票,得等前面的人做完才能轮到你,这样做虽然简单,但是如果有很多人或者要做复杂的事情,那就慢吞吞的了。而异步,就像是插队,你可以先去干别的,等存储操作完了再回来继续,这样就能节省不少时间。比如用IndexedDB存东西的时候,用异步接口就能让应用速度快好多。

本地储存和WebSQL数据库,两个不同的东西

地方储存这个功能挺好用的,就是把东西放在电脑上那个地方!主要用来存小数据,特别方便。不过也得注意了,虽然方便,但是性能有限。所以说,要是有很多大数据的话就别用这个,看看WebSQLDatabase。跟localStorage差不多,也是存键值对的,但是速度快多了,而且还有索引,找数据更容易。

IndexedDB:下一代Web存储技术

IndexedDB这东西,就是现在浏览器里边的一个强大的数据库技术。它不只能运行在后台,还能让你创建各种索引,快速搜到想要的数据。用了IndexedDB,你就能更好地管理那些大堆的结构化数据,做些复杂的操作,比如搜索、排序或者批量处理什么的。而且,IndexedDB的API设计得很人性化,用起来特别顺手,效率也高。

if  (!localStorage.checkins) localStorage.checkins = JSON.stringify([]);

JSON在数据存储中的应用

this.db = openDatabase('geomood', '1.0', 'Geo-Mood Checkins', 8192);this.db.transaction(function(tx) {
    tx.executeSql(        "create table if not exists "
            + "checkins(id integer primary key asc, time integer, latitude float,"
            + "longitude float, mood string)",
         [], function() {
            console.log("siucc"); 
        }
    );
});

在网上搞开发时,JSON(JavaScriptObjectNotation)是个好用的工具,可以把一大堆复杂的JavaScript对象变成字符串形态,方便存来传去。特别是要用到IndexedDB或者WebSQLDatabase这些东西的时候,更得把数据转成JSON格式。这样做,数据才容易看得懂,而且后面的处理也方便些。

var db;var version = 1;
window.indexedStore = {};
window.indexedStore.setup = function(handler) { // attempt to open the database
    var request = indexedDB.open("geomood", version);  // upgrade/create the database if needed
    request.onupgradeneeded =  function(event)  {
        var db = request.result;        
        if  (event.oldVersion <  1)  { // Version 1 is the first version of the database.
            var checkinsStore = db.createObjectStore("checkins",  { keyPath:  "time"  });
            checkinsStore.createIndex("moodIndex",  "mood",  { unique:  false  });
        }        
        if  (event.oldVersion <  2)  {
                // In future versions we'd upgrade our database here. 
            // This will never run here, because we're version 1.
        }
        db = request.result;
    };
    request.onsuccess =  
    function(ev)  {  // assign the database for access outside
        db = request.result; handler();
        db.onerror =  
        function(ev)  {
            console.log("db error", arguments);
        };
    };
};

数据的创建、存储与检索:实战操作解析

setup:  function(handler)  {
    requestFileSystem(
        window.PERSISTENT,      
        1024*1024,        
        function(fs)  {
            fs.root.getDirectory("checkins",
                {},  // no "create" option, so this is a read op
                function(dir)  {
                    checkinsDir = dir;
                    handler();
                }, 
                function()  {
                    fs.root.getDirectory( "checkins",  
                    {create:  true
                    },  
                    function(dir)  { 
                    checkinsDir = dir;
                        handler();
                    }, onError );
                }
            );
        },        function(e)  {
            console.log("error "+e.code+"initialising - see http:php.cn");
        }  
    );
}

客户端存储:离线可用与性能改善的独特方式

咱们平时做项目,常常得弄点数据存储,操作什么的是不是?比如用那个WebSQLDatabase,咱们就用SQL指令搞定新数据记录的事儿。这个方法简单好用,而且也保证了数据的完整安全!那么问题来了,存好数据后怎么办?那就是拿出来看看咯。咱们可以建个合适的索引,这样数据查起来既快又准!

var checkins = JSON.parse(localStorage["checkins"]);
checkins.push(checkin);
localStorage["checkins"] = JSON.stringify(checkins);

异步操作的优势与挑战

尽管异步操作让应用更快速,但也有不少麻烦。比如,代码会变复杂,你得操心并发和同步的事儿;还有就是,出错后处理起来就更费劲儿了。所以,学会怎么用好异步编程才是提升应用性能的关键。

store.db.transaction(function(tx) {
    tx.executeSql("insert into checkins " + "(time, latitude, longitude, mood) values (?,?,?,?);", 
        [checkin.time, checkin.latitude, checkin.longitude, checkin.mood],
        handler, 
        store.onError
    ); 
});

性能监控与优化

要让程序运行不卡,性能监测很重要。不管你是用哪类API,都得时不时看看应用的表现如何,保证数据处理快如闪电。要是发现哪里慢了,赶紧换个更快的API或者优化下数据存储方式就行!

var transaction = db.transaction("checkins",  'readwrite'); 
transaction.objectStore("checkins").put(checkin); 
transaction.oncomplete = handler;

总结与展望

fs.root.getFile(    "checkins/" + checkin.time,
    { create: true, exclusive: true }, 
    function(file) {
        file.createWriter(function(writer) {
            writer.onerror = fileStore.onError;            
            var bb = new WebKitBlobBuilder;
            bb.append(JSON.stringify(checkin));
            writer.write(bb.getBlob("text/plain"));
            handler(); }, fileStore.onError);
    },
    fileStore.onError
);

咱深度研究和巧妙使用API的存储、找东西和搜寻功能,能让应用速度棒极了,用着舒服。以后,科技发达了,我猜会有更牛逼的数据处理技术出现。作为开发者,咱得时刻学习新知识,适应新形势,才能不输给其他人。

最后,咱们聊聊,你们用API搞数据处理时有啥头疼事儿吗?来评论区说说呗。别忘了给文章点个赞,让更多人看到!

var allCheckins = JSON.parse(localStorage["checkins"]);var matchingCheckins = [];
allCheckins.forEach(function(checkin) {
    if (checkin.mood == moodQuery) {
        matchingCheckins.push(clone(checkin));
    } 
});
handler(matchingCheckins);

原文链接:https://www.icz.com/technicalinformation/web/2024/06/17552.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?