Angular 本地存储即服务

Angular 本地存储即服务,angular,local-storage,Angular,Local Storage,使用角度2。我正在实现一个本地存储服务(带有加密)。目前,这只是我使用它的一个模块,但我想确保它是可重用的 这是我的页面。ts: 我提供了一个存储前缀。我假设它应该有一个与它关联的应用的指示,因此它的前缀是myApp-,后面是这个模块特有的前缀(Frequentclients) 我的加密存储服务: import * as CryptoJS from "crypto-js"; @Injectable() export class EncryptionService { construc

使用角度2。我正在实现一个本地存储服务(带有加密)。目前,这只是我使用它的一个模块,但我想确保它是可重用的

这是我的页面。ts:

我提供了一个存储前缀。我假设它应该有一个与它关联的应用的指示,因此它的前缀是myApp-,后面是这个模块特有的前缀(Frequentclients

我的加密存储服务:

import * as CryptoJS from "crypto-js";

@Injectable()
export class EncryptionService {

    constructor() {
    }

    secretKey: string = "fnord";

    setLocalStorage(storagePrefix: string, jsonObj) {
        localStorage.setItem(storagePrefix, this.encrypt(jsonObj));
    }

getLocalStorage(storagePrefix: string) {
    var recentClients = [],
        data: string = localStorage.getItem(storagePrefix);

    if (data !== null && data.length > 0) {
        data = this.decrypt(data);
        if (data !== null && data.length > 0) {
            recentClients = JSON.parse(data) || [];
        }
    }
    return recentClients;
}

encrypt(jsonObj) {
    return CryptoJS.AES.encrypt(JSON.stringify(jsonObj), this.secretKey);
}

decrypt(data) {
    if (data !== null && data.length > 0) {
        var bytes = CryptoJS.AES.decrypt(data.toString(), this.secretKey);
        return bytes.toString(CryptoJS.enc.Utf8);
    } else {
        return "";
    }
}
如果每个使用本地存储的模块都使用相同的前缀,它们会互相攻击,对吗

因此,每次使用都有自己的用途,因此:

myApp-DavesModuleData : [{data:'foo'}]
myApp-OtherModuleData : [{data:'bar'}]
或者,我应该避免将大量本地存储文件乱扔到用户的存储中,而只使用一个吗

myApp : [{DavesModule:{data:'foo'}},{OtherModule:{data:'bar'}}]
然后,每次读取本地存储时,我都必须读取整个内容,然后对其进行解析以找到我要查找的部分,然后将其全部写回

(这意味着,如果任何模块将其数据弄乱,它可能会导致本地存储的所有其他使用都急剧停止,包括存储数据的丢失)


顺便说一句,我使用的是angular 2本地存储。现在,我遇到了这些挑战,我开始怀疑是否有人已经编写了一个插件来进行复杂的本地存储管理。

这里没有一个明确的问题,但我将尝试猜测您想要的答案:)

是的,通过在LS中使用不同的条目使用不同的“模块”,减少需要从localStorage读取的数据量要好得多。有三个主要原因:

  • 读取本地存储是一个同步操作,因此它将阻止代码执行,直到未完成为止

  • 读取/写入本地存储是javascript中速度较慢的操作之一

  • 从localstorage保存/检索数据需要对这些数据进行字符串化/解析,这是javascript中另一个较慢的操作

  • 我会告诉您先阅读,然后再了解最新的本地存储性能

    还要注意的是,浏览器中没有“localStorage文件”,只有一个对象,因此您可以创建任意多个条目,而不会损失性能,实际上情况恰恰相反


    正如您所说的是,如果您将所有内容存储到一个条目中,一个格式错误的数据可能会使所有其他对象无法检查。

    这个答案完全忽略了加密中的安全错误。我真的找不到有关安全错误的问题,请您为我指出它好吗?我对答案不感兴趣,请注意,OP的示例代码中也存在安全错误。加密在单独的线程中处理:-或者还有其他问题吗?“…最好减少数据量…”所以我的方法是正确的?每个模块都提供自己的前缀吗?
    myApp : [{DavesModule:{data:'foo'}},{OtherModule:{data:'bar'}}]