forked from um/web
Merge branch 'pull/17'
# Conflicts: # src/App.vue
This commit is contained in:
commit
50fbb69394
9
package-lock.json
generated
9
package-lock.json
generated
@ -11215,6 +11215,15 @@
|
|||||||
"errno": "~0.1.7"
|
"errno": "~0.1.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"workerize-loader": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npm.taobao.org/workerize-loader/download/workerize-loader-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-06Y0OQ3LaFzB7iks0f/+7wpkYEQ=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"loader-utils": "^1.2.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"wrap-ansi": {
|
"wrap-ansi": {
|
||||||
"version": "6.2.0",
|
"version": "6.2.0",
|
||||||
"resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz",
|
"resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz",
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
"@vue/cli-service": "^4.1.2",
|
"@vue/cli-service": "^4.1.2",
|
||||||
"babel-plugin-component": "^1.1.1",
|
"babel-plugin-component": "^1.1.1",
|
||||||
"vue-cli-plugin-element": "^1.0.1",
|
"vue-cli-plugin-element": "^1.0.1",
|
||||||
"vue-template-compiler": "^2.6.11"
|
"vue-template-compiler": "^2.6.11",
|
||||||
|
"workerize-loader": "^1.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
62
src/App.vue
62
src/App.vue
@ -92,8 +92,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
// 严格模式 用于尾调用优化
|
||||||
|
"use strict";
|
||||||
|
|
||||||
const dec = require("./decrypt/common");
|
const worker = require("workerize-loader!./decrypt/common");
|
||||||
|
const dec = require('./decrypt/common');
|
||||||
export default {
|
export default {
|
||||||
name: 'app',
|
name: 'app',
|
||||||
components: {},
|
components: {},
|
||||||
@ -104,12 +107,38 @@
|
|||||||
playing_url: "",
|
playing_url: "",
|
||||||
playing_auto: false,
|
playing_auto: false,
|
||||||
format: '2',
|
format: '2',
|
||||||
|
workCount: 0,
|
||||||
|
cacheQueue: [],
|
||||||
|
cacheQueueOption: {
|
||||||
|
push: (element) => {
|
||||||
|
this.cacheQueue.push(element);
|
||||||
|
},
|
||||||
|
pop: () => {
|
||||||
|
return this.cacheQueue.shift();
|
||||||
|
},
|
||||||
|
size: () => {
|
||||||
|
return this.cacheQueue.length;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
workers: [],
|
||||||
|
idle_workers: [],
|
||||||
|
thread_num: 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.$nextTick(function () {
|
this.$nextTick(function () {
|
||||||
this.finishLoad();
|
this.finishLoad();
|
||||||
});
|
});
|
||||||
|
if (document.location.host !== "") {
|
||||||
|
this.thread_num = Math.max(navigator.hardwareConcurrency, 1);
|
||||||
|
for (let i = 0; i < this.thread_num; i++) {
|
||||||
|
this.workers.push(worker().CommonDecrypt);
|
||||||
|
this.idle_workers.push(i);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.workers.push(dec.CommonDecrypt);
|
||||||
|
this.idle_workers.push(0)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
finishLoad() {
|
finishLoad() {
|
||||||
@ -125,9 +154,25 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
handleFile(file) {
|
handleFile(file) {
|
||||||
|
// 有空闲worker 立刻处理文件
|
||||||
(async () => {
|
if (this.idle_workers.length > 0) {
|
||||||
let data = await dec.CommonDecrypt(file);
|
this.handleDoFile(file, this.idle_workers.shift());
|
||||||
|
}
|
||||||
|
// 无空闲worker 则放入缓存队列
|
||||||
|
else {
|
||||||
|
this.cacheQueueOption.push(file);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleCacheQueue(worker_id) {
|
||||||
|
// 调用方法消费缓存队列中的数据
|
||||||
|
if (this.cacheQueue.length === 0) {
|
||||||
|
this.idle_workers.push(worker_id);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.handleDoFile(this.cacheQueueOption.pop(), worker_id);
|
||||||
|
},
|
||||||
|
handleDoFile(file, worker_id) {
|
||||||
|
this.workers[worker_id](file).then(data => {
|
||||||
if (data.status) {
|
if (data.status) {
|
||||||
this.tableData.push(data);
|
this.tableData.push(data);
|
||||||
this.$notify.success({
|
this.$notify.success({
|
||||||
@ -147,7 +192,13 @@
|
|||||||
});
|
});
|
||||||
window._paq.push(["trackEvent", "Error", data.message, file.name]);
|
window._paq.push(["trackEvent", "Error", data.message, file.name]);
|
||||||
}
|
}
|
||||||
})();
|
// 完成之后 执行新任务 todo: 可能导致call stack过长
|
||||||
|
this.handleCacheQueue(worker_id);
|
||||||
|
}).catch(err => {
|
||||||
|
console.error(err, file);
|
||||||
|
window._paq.push(["trackEvent", "Error", err, file.name]);
|
||||||
|
this.handleCacheQueue(worker_id);
|
||||||
|
})
|
||||||
},
|
},
|
||||||
handlePlay(index, row) {
|
handlePlay(index, row) {
|
||||||
this.playing_url = row.file;
|
this.playing_url = row.file;
|
||||||
@ -224,6 +275,7 @@
|
|||||||
font-size: small;
|
font-size: small;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*noinspection CssUnusedSymbol*/
|
||||||
.el-upload-dragger {
|
.el-upload-dragger {
|
||||||
width: 80vw !important;
|
width: 80vw !important;
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,8 @@ const RawDecrypt = require("./raw");
|
|||||||
const MFlacDecrypt = require("./mflac");
|
const MFlacDecrypt = require("./mflac");
|
||||||
const TmDecrypt = require("./tm");
|
const TmDecrypt = require("./tm");
|
||||||
|
|
||||||
export {CommonDecrypt}
|
|
||||||
|
|
||||||
async function CommonDecrypt(file) {
|
export async function CommonDecrypt(file) {
|
||||||
let raw_ext = file.name.substring(file.name.lastIndexOf(".") + 1, file.name.length).toLowerCase();
|
let raw_ext = file.name.substring(file.name.lastIndexOf(".") + 1, file.name.length).toLowerCase();
|
||||||
let raw_filename = file.name.substring(0, file.name.lastIndexOf("."));
|
let raw_filename = file.name.substring(0, file.name.lastIndexOf("."));
|
||||||
let rt_data;
|
let rt_data;
|
||||||
|
Loading…
Reference in New Issue
Block a user