Fast GM Cache System

Lightweight cache with TTL using GM_setValue

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

You will need to install an extension such as Tampermonkey to install this script.

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         Fast GM Cache System
// @namespace    fast.cache.system
// @version      1.0
// @description  Lightweight cache with TTL using GM_setValue
// @match        *://*/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    const CACHE_PREFIX = "fastcache_";

    const Cache = {

        // 📦 Сохранить значение с временем жизни (в секундах)
        set(key, value, ttlSeconds = 300) {
            const data = {
                value: value,
                expiry: Date.now() + ttlSeconds * 1000
            };
            GM_setValue(CACHE_PREFIX + key, JSON.stringify(data));
        },

        // 📥 Получить значение (null если просрочено)
        get(key) {
            const raw = GM_getValue(CACHE_PREFIX + key, null);
            if (!raw) return null;

            try {
                const data = JSON.parse(raw);

                if (Date.now() > data.expiry) {
                    GM_deleteValue(CACHE_PREFIX + key);
                    return null;
                }

                return data.value;

            } catch {
                GM_deleteValue(CACHE_PREFIX + key);
                return null;
            }
        },

        // 🗑 Удалить вручную
        delete(key) {
            GM_deleteValue(CACHE_PREFIX + key);
        },

        // 🧹 Очистить всё
        clearAll() {
            const keys = Object.keys(localStorage);
            keys.forEach(k => {
                if (k.startsWith(CACHE_PREFIX)) {
                    GM_deleteValue(k);
                }
            });
        }
    };

    // ====== ПРИМЕР ИСПОЛЬЗОВАНИЯ ======

    const cached = Cache.get("userData");

    if (cached) {
        console.log("Из кеша:", cached);
    } else {
        console.log("Создаём новые данные");

        const newData = {
            id: 123,
            name: "FastUser"
        };

        Cache.set("userData", newData, 600); // 10 минут
    }

})();