npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@webxrd/cache

v1.0.0

Published

适用于浏览器的数据缓存器

Downloads

2

Readme

Cache(适用于浏览器的数据缓存器)


Cache构造函数


cache实例

cache实例方法

  • setOpt 更新options值
  • backups 将实例对应的实体的数据,备份到本地Store
  • removeBackups 清除实例的在本地缓存中的备份
  • recover 尝试从本地Store中恢复数据到实例对应的实体

对象


其它


前言

Cache 可以保护重要数据,使其不会因浏览器的刷新而消失。比如用户的登录信息..... 使用环境: 必须在浏览器环境(h5+也可以,因为有浏览器环境)。 注意: Cache只用与保护非 Function 类型的数据。


构造函数

说明

Cache构造函数,用来生成一个cache实例,每个cache用来管理一个缓存对象。

参数
  • data 必填,需要保护的数据实体,(只保护data中可枚举属性)
  • options 构造cache时的配置项

返回值

cache

示例

var user = {
    isLogin: true,
    username: '张三',
    book: [{name: '语文'}, {name: '数学'}]    
}
var cache = new Cache(user, options);

// 提示:构造cache时,内部会自动在user上添加只读属性,保存着对cache的引用。方便使用
console.log(user.__cache === cache);// --->> true

cache

说明

类型Object,由Cache()创建的缓存示例,用来管理一个数据实体的缓存事物。

方法

  • setOpt 更新options值
  • backups 将实例对应的实体的数据,备份到本地Store
  • clearStore 清除实例的在本地缓存中的备份
  • recover 尝试从本地Store中恢复数据到实例对应的实体

属性

_options 只读,创建时传入的配置信息,会随setOpt的更新而更新 _data 只读,创建时传入的data


setOpt

说明

类型Function,用来更新options值。(尽量不要更新key,否则可能会造成无法找到原有备份),无返回值

示例
cache.setOpt({
    clear: true    
})

backups

说明

类型Function,将实例对应的实体的数据,备份到本地Store,无参,无返回值

示例
cache.backups()

removeBackups

说明

类型Function,清除实例的在本地缓存中的备份,无参,无返回值

示例
cache.removeBackups()

recover

说明

类型Function,尝试从本地Store中恢复数据到实例对应的实体,无参,无返回值

示例
cache.recover()

options

说明

构建cache示例时的可用配置项

| 字段 | 类型 | 说明 | | :--- | :--- | :--- | | key | String | 必填。在缓存中的唯一标识,不可重复,cache会在内部通过该key来找到备份 | | storeType | 'localStorage'或'sessionStorage' | 可选,默认'sessionStorage',缓存类型。 | | clear | Boolean | 可选,默认false,当数据恢复完成时,是否清除缓存中的备份 | | autoBackups | Boolean | 可选,默认true,是否在页面隐藏/关闭/刷新前自动执行备份 | | autoRecover | Boolean | 可选,默认true,是否在页面显示时自动从备份中恢复数据到实体 |


安装

npm install @webxrd/cache --save或script引入 <script src="https://static.webxrd.com/npm/cache/cache.min.js"></script>

使用示例

在webpack中使用

import { Cache } from '@webxrd/cache';
const user = {
    name: 'abc',
    age: 1,
    arr: [2, {t: 'bcd'}],
    obj: {
        num: 56
    },
    isHidden: false,
    empty: null,
    noDefined: undefined
};
const cache = new Cache(user, {
    key: 'CUSTOM_TEMP_STORE'
});

示例————在Vue中使用

例如,保护Vuex的数据。 store/index.js——————


import { Cache } from '@webxrd/cache';
const DEFAULT_USER = {
    // 用户名
    username: '',
    token: 'abcde'
};
const store = {
    // 加上专属命名空间路径
    namespaced: true,
    state: {
        user: JSON.parse(JSON.stringify(DEFAULT_USER))
    },
    getters: {
        user: state => state.user
    },
    mutations: {
        // 设置全部的user信息
        SET_USER: (state, data) => {
            state.user = data;
            state.__cache.backups();
        },
        // 更新user信息
        SET_UPDATE_USER: (state, data) => {
            state.user = Object.assign(state.user, data);
        },
        // 重置user信息
        SET_REST: (state) => {
            state.user = JSON.parse(JSON.stringify(DEFAULT_USER));
            state.__cache.removeBackups();
        }
    }
};
const cache = new Cache(store.state, {
    key: 'CUSTOM_TEMP_STORE',
    storeType: 'localStorage'
});
console.log(store.state.__cache === cache);// --->> true
export default store;

示例————通过script引入

<script src="https://static.webxrd.com/npm/cache/cache.min.js"></script>
如果script地址失效。请自行 npm 下载,并到lib目录下提取。

var user = {
    name: 'abc',
    nn: 1,
    obj: {age: '123'}
};
// 使用
const cache = new Cache(user, {
    key: 'CUSTOM_TEMP_STORE'
})

两类方案

1.1 永久保护数据,当浏览器关闭或H5应用程序关闭后 从新打开,数据将恢复,回到上次状态

// default,永久保护数据
new Cache(test, {
    key: 'CUSTOM_TEMP_STORE'
});

1.2 永久保护数据,和1.1一样。区别在于当数据恢复完成时,自动清除缓存中的备份。 这么做不会影响Cache的自动备份与自动恢复,只是 当你需要手动执行recover()时,无法完成,因为无备份可用

// custom,永久保护数据
new Cache(test, {
    key: 'CUSTOM_TEMP_STORE',
    clear: true
});

2.1 临时保护数据,当浏览器关闭或H5应用程序关闭后 从新打开,数据将消失,回到原始状态

// custom,临时保护数据
new Cache(test, {
    key: 'CUSTOM_TEMP_STORE',
    storeType: 'sessionStorage'
});

2.2 永久保护数据,和2.1一样。区别在于当数据恢复完成时,自动清除缓存中的备份。 这么做不会影响Cache的自动备份与自动恢复,只是 当你需要手动执行recover()时,无法完成,因为无备份可用

// custom,临时保护数据
new Cache(test, {
    key: 'CUSTOM_TEMP_STORE',
    storeType: 'sessionStorage',
    clear: true
});

params

| 字段 | 类型 | 说明 | | :--- | :--- | :--- | | data | Object或Array | 必填,需要保护的数据实体,(只保护data中可枚举属性) | | options | Object | options |

options

| 字段 | 类型 | 说明 | | :--- | :--- | :--- | | key | String | 必填。在缓存中的唯一标识,不可重复,cache会在内部通过该key来找到备份 | | storeType | 'localStorage'或'sessionStorage' | (H5+App不支持),可选,默认'localStorage',缓存类型。 | | clear | Boolean | (H5+App不支持),可选,默认false,当数据恢复完成时,是否清除缓存中的备份 | | autoBackups | Boolean | 可选,默认true,是否在页面隐藏/关闭/刷新前自动执行备份 | | autoRecover | Boolean | 可选,默认true,是否在页面显示时自动从备份中恢复数据到实体 |

原理流程

原理流程: 1. 初始化时,执行 recover 尝试恢复数据 2. 刷新或关闭前,执行:backups 将数据的备份到 本地Store 3. 刷新后,执行: recover 尝试恢复数据

所以大多数时候,你都不应该关注本地Store, 因为他们只是《用来规避刷新的暂存中转站》而非数据源, 如果你在某一时刻想要恢复你的data数据,那么你应该直接对data进行操作 总的来说:Cache不会给你增加任何附带的操作,它仅仅保护数据 例如:恢复默认数据

// 默认数据的对象
const origin = {name: 'empty', isLogin: false};

// 投入使用的数据
let data = JSON.parse(JSON.stringify(origin))

const cache = new Cache(data, {
    key: 'CUSTOM_TEMP_STORE'
})
// ...... 假设现在进行了多次更改
data.isLogin = true
// ...... 假设现在进行了多次更改
data.name = 'xiaoxie'

// 现在想要恢复data数据为初始状态,那么直接对data进行操作即可
data = JSON.parse(JSON.stringify(origin));