压缩URL字符串长度

This commit is contained in:
枫谷剑仙 2020-04-28 19:37:35 +08:00
parent 70416bab44
commit a5afe2ac35
7 changed files with 57 additions and 33 deletions

View File

@ -101,4 +101,5 @@ Please refer to existing files.
* [pad-rikuu](//github.com/kiootic/pad-rikuu) //Parse data
* [html2canvas](//github.com/niklasvh/html2canvas) //Capture Image
* [localforage](//github.com/localForage/localForage) //Easy IndexedDB
* [pako](//github.com/nodeca/pako) //Deflate URL length
* [aaa](//github.com/jy4340132/aaa) //Play voice(ADPCM wav)

1
library/pako.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -19,6 +19,7 @@ const teamsCount = 2;
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="library/localforage.min.js"></script>
<script type="text/javascript" src="library/html2canvas.min.js"></script>
<script type="text/javascript" src="library/pako.min.js"></script>
<!--▼ADPCM播放相关-->
<script type="text/javascript" src="library/jy4340132-aaa/std.js"></script>
<script type="text/javascript" src="library/jy4340132-aaa/pcm_player.js"></script>

View File

@ -88,6 +88,13 @@ function getQueryString(name,url) {
}
}
function Uint8ArrayToString(fileData){
return Array.from(fileData).map(int=>String.fromCharCode(int)).join('');
}
function stringToUint8Array(str){
const codeArr = Array.from(str).map(chr=>chr.charCodeAt(0));
return new Uint8Array(codeArr);
}
//数组去重
/* https://www.cnblogs.com/baiyangyuanzi/p/6726258.html
* 实现思路获取没重复的最右一值放入新数组
@ -111,15 +118,15 @@ Array.prototype.uniq = function()
const pcmMemory = new WebAssembly.Memory({initial: 256, maximum: 256});
const pcmImportObj = {
env: {
abortStackOverflow: () => { throw new Error("overflow"); },
table: new WebAssembly.Table({ initial: 0, maximum: 0, element: "anyfunc" }),
tableBase: 0,
memory: pcmMemory,
memoryBase: 102400,
STACKTOP: 0,
STACK_MAX: pcmMemory.buffer.byteLength,
}
env: {
abortStackOverflow: () => { throw new Error("overflow"); },
table: new WebAssembly.Table({ initial: 0, maximum: 0, element: "anyfunc" }),
tableBase: 0,
memory: pcmMemory,
memoryBase: 102400,
STACKTOP: 0,
STACK_MAX: pcmMemory.buffer.byteLength,
}
};
let pcmPlayer = null;
@ -127,33 +134,33 @@ let adpcm_wasm = null;
function decodeAudio(fileName, decodeCallback)
{
if(pcmPlayer != null)
{
pcmPlayer.close();
}
pcmPlayer = new PCMPlayer(1, 44100);
fetch(fileName).then((response) => response.arrayBuffer())
.then((bytes) => {
let audioData = new Uint8Array(bytes);
let step = 160;
for(let i = 0; i < audioData.byteLength; i += step)
{
let pcm16BitData = decodeCallback(audioData.slice(i, i + step));
let pcmFloat32Data = Std.shortToFloatData(pcm16BitData);
pcmPlayer.feed(pcmFloat32Data);
}
});
if(pcmPlayer != null)
{
pcmPlayer.close();
}
pcmPlayer = new PCMPlayer(1, 44100);
fetch(fileName).then((response) => response.arrayBuffer())
.then((bytes) => {
let audioData = new Uint8Array(bytes);
let step = 160;
for(let i = 0; i < audioData.byteLength; i += step)
{
let pcm16BitData = decodeCallback(audioData.slice(i, i + step));
let pcmFloat32Data = Std.shortToFloatData(pcm16BitData);
pcmPlayer.feed(pcmFloat32Data);
}
});
}
fetch("library/jy4340132-aaa/adpcm.wasm").then((response) => response.arrayBuffer())
.then((bytes) => WebAssembly.instantiate(bytes, pcmImportObj))
.then((wasm) => {
adpcm_wasm = wasm;
/*addButton("adpcm").onclick = function () {
let decoder = new Adpcm(wasm, pcmImportObj);
decoder.resetDecodeState(new Adpcm.State(0, 0));
decodeAudio("demo.adpcm", decoder.decode.bind(decoder));
}*/
/*addButton("adpcm").onclick = function () {
let decoder = new Adpcm(wasm, pcmImportObj);
decoder.resetDecodeState(new Adpcm.State(0, 0));
decodeAudio("demo.adpcm", decoder.decode.bind(decoder));
}*/
});
//▲ADPCM播放相关
function latentUseHole(latentId)
@ -519,7 +526,7 @@ function countTeamHp(memberArr, leader1id, leader2id, solo)
return hp;
});
console.log(mHpArr);
console.log('单个队伍血量:',mHpArr);
function memberHpMul(card,ls,memberArr,solo)
{

View File

@ -597,9 +597,14 @@ function reloadFormationData()
let formationData;
try
{
const parameterDataString = getQueryString("d") || getQueryString("data");
let parameterDataString = getQueryString("d") || getQueryString("data");
if (parameterDataString)
{
if (parameterDataString.charAt(0) != '{')
{
parameterDataString = pako.inflate(parameterDataString,{to:'string'})
console.log('数据字符串解压结果:',parameterDataString);
}
formationData = JSON.parse(parameterDataString);
}
}catch(e)
@ -626,7 +631,14 @@ function creatNewUrl(arg){
const newSearch = new URLSearchParams();
if (language_i18n) newSearch.set("l",language_i18n);
if (datasource && datasource!="ja") newSearch.set("s",datasource);
if (outObj) newSearch.set("d", JSON.stringify(outObj));
const dataJsonStr = JSON.stringify(outObj); //数据部分的字符串
const deflate = pako.deflate(dataJsonStr,{to:'string'});
if (outObj) newSearch.set("d",
deflate.length < dataJsonStr.length ? //压缩后长度小于压缩前长度
deflate : //使用压缩字符串
dataJsonStr); //使用原始字符串
const newUrl = (arg.url || "") + '?' + newSearch.toString();

View File

@ -19,6 +19,7 @@ const teamsCount = 1;
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="library/localforage.min.js"></script>
<script type="text/javascript" src="library/html2canvas.min.js"></script>
<script type="text/javascript" src="library/pako.min.js"></script>
<!--▼ADPCM播放相关-->
<script type="text/javascript" src="library/jy4340132-aaa/std.js"></script>
<script type="text/javascript" src="library/jy4340132-aaa/pcm_player.js"></script>

View File

@ -19,6 +19,7 @@ const teamsCount = 3;
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="library/localforage.min.js"></script>
<script type="text/javascript" src="library/html2canvas.min.js"></script>
<script type="text/javascript" src="library/pako.min.js"></script>
<!--▼ADPCM播放相关-->
<script type="text/javascript" src="library/jy4340132-aaa/std.js"></script>
<script type="text/javascript" src="library/jy4340132-aaa/pcm_player.js"></script>