@Adamantite アプローチ2:データ圧縮アルゴリズムを導入する(ロマン)
「いや、それでも生のURLが長いのは美しくない!」というエンジニア魂にお応えするハックです。
現在は 配列 -> JSON -> Base64 という非常に冗長(無駄が多い)な変換をしているため、文字数が膨れ上がっています。ここに、Web界隈で有名な「LZ77(LZ-String)圧縮アルゴリズム」を導入して、URLの文字列を限界までギュッと圧縮してみましょう。
index.html を少しだけ書き換えます。
1. 圧縮ライブラリを読み込む
<head> タグの中(<style> の上あたり)に、以下の1行を追加します。これで世界中から圧縮プログラムをインポートできます(C++の
#include のようなものです)。
HTML
<script src="
https://cdnjs.cloudflare.com/ajax/libs/lz-string/1.5.0/lz-string.min.js"></script>
2. 生成と復元のロジックを書き換える
<script> の中にあるURLの生成(エンコード)と復元(デコード)の部分を、LZ-Stringを使ったスマートな方式に書き換えます。
▼ init() 内の復元部分を書き換え
JavaScript
// 【修正前】
// const decodedStr = decodeURIComponent(escape(atob(decodeURIComponent(dataParam))));
// ownedIds = JSON.parse(decodedStr);
// 【修正後】LZ-Stringで解凍
if (dataParam) {
try {
const decodedStr = LZString.decompressFromEncodedURIComponent(dataParam);
if (decodedStr) ownedIds = JSON.parse(decodedStr);
} catch (e) {
console.error("データの復元に失敗しました:", e);
}
}
▼ generateLink() 内の生成部分を書き換え
JavaScript
// 【修正前】
// const jsonStr = JSON.stringify(ownedIds);
// const base64Data = btoa(unescape(encodeURIComponent(jsonStr)));
// const safeData = encodeURIComponent(base64Data);
// 【修正後】LZ-Stringで限界まで圧縮
const jsonStr = JSON.stringify(ownedIds);
const safeData = LZString.compressToEncodedURIComponent(jsonStr);
これを上書き保存して、もう一度Cloudflareにデプロイしてみてください。
ブルアカのキャラIDは「10001」「10002」のように似た数字の連続なので、LZ圧縮がめちゃくちゃ綺麗に刺さり、URLの長さが元の半分〜3分の1以下に激減するはずです!
って言われてる