diff --git a/package-lock.json b/package-lock.json index e0241ad2..c9307d83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "lx-music-desktop", - "version": "0.5.5", + "version": "0.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1491,8 +1491,7 @@ "asap": { "version": "2.0.6", "resolved": "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "asn1": { "version": "0.2.4", @@ -4572,6 +4571,15 @@ "buffer-indexof": "^1.0.0" } }, + "dnscache": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/dnscache/download/dnscache-1.0.2.tgz", + "integrity": "sha1-/Twk1mwUFiX1lMd756ja/uKmbIo=", + "requires": { + "asap": "^2.0.6", + "lodash.clone": "^4.5.0" + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz", @@ -8622,6 +8630,11 @@ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", "dev": true }, + "lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/lodash.clone/download/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" + }, "lodash.clonedeep": { "version": "3.0.2", "resolved": "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-3.0.2.tgz", diff --git a/package.json b/package.json index d21e1097..ffb79231 100644 --- a/package.json +++ b/package.json @@ -196,6 +196,7 @@ "dependencies": { "axios": "^0.19.0", "crypto-js": "^3.1.9-1", + "dnscache": "^1.0.2", "electron-log": "^3.0.8", "electron-store": "^5.0.0", "electron-updater": "^4.1.2", diff --git a/publish/changeLog.md b/publish/changeLog.md index abdf419c..0457abd1 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -2,3 +2,6 @@ - 新增试听列表**滚动条位置恢复**设置(可自动恢复到上次离开时的列表滚动位置),本功能默认开启,若不需要可到设置-列表设置将其关闭 +# 优化 + +- 新增DNS解析缓存,加快请求速度 diff --git a/src/renderer/utils/music/bd/api-test.js b/src/renderer/utils/music/bd/api-test.js index c5f34935..36e9bfcb 100644 --- a/src/renderer/utils/music/bd/api-test.js +++ b/src/renderer/utils/music/bd/api-test.js @@ -8,6 +8,7 @@ const api_test = { method: 'get', timeout, headers, + family: 4, }) requestObj.promise = requestObj.promise.then(({ body }) => { return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail)) diff --git a/src/renderer/utils/music/kg/api-test.js b/src/renderer/utils/music/kg/api-test.js index 5dfc278c..0d96fd95 100644 --- a/src/renderer/utils/music/kg/api-test.js +++ b/src/renderer/utils/music/kg/api-test.js @@ -8,6 +8,7 @@ const api_test = { method: 'get', timeout, headers, + family: 4, }) requestObj.promise = requestObj.promise.then(({ body }) => { return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail)) @@ -19,6 +20,7 @@ const api_test = { method: 'get', timeout, headers, + family: 4, }) requestObj.promise = requestObj.promise.then(({ body }) => { return body.code === 0 ? Promise.resolve(body.data) : Promise.reject(new Error(requestMsg.fail)) @@ -30,6 +32,7 @@ const api_test = { method: 'get', timeout, headers, + family: 4, }) requestObj.promise = requestObj.promise.then(({ body }) => { return body.code === 0 ? Promise.resolve(body.data) : Promise.reject(new Error(requestMsg.fail)) diff --git a/src/renderer/utils/music/kw/api-temp.js b/src/renderer/utils/music/kw/api-temp.js index 545b5d72..7f673926 100644 --- a/src/renderer/utils/music/kw/api-temp.js +++ b/src/renderer/utils/music/kw/api-temp.js @@ -7,6 +7,7 @@ const api_temp = { method: 'get', headers, timeout, + family: 4, }) requestObj.promise = requestObj.promise.then(({ body }) => { return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(body.msg)) diff --git a/src/renderer/utils/music/kw/api-test.js b/src/renderer/utils/music/kw/api-test.js index 18bb093d..1308775d 100644 --- a/src/renderer/utils/music/kw/api-test.js +++ b/src/renderer/utils/music/kw/api-test.js @@ -19,6 +19,7 @@ const api_test = { method: 'get', timeout, headers, + family: 4, }) requestObj.promise = requestObj.promise.then(({ body }) => { return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail)) diff --git a/src/renderer/utils/music/tx/api-test.js b/src/renderer/utils/music/tx/api-test.js index 4ed76eb5..de8fac74 100644 --- a/src/renderer/utils/music/tx/api-test.js +++ b/src/renderer/utils/music/tx/api-test.js @@ -8,6 +8,7 @@ const api_messoer = { method: 'get', timeout, headers, + family: 4, }) requestObj.promise = requestObj.promise.then(({ body }) => { return body.code === 200 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail)) diff --git a/src/renderer/utils/music/wy/api-test.js b/src/renderer/utils/music/wy/api-test.js index c0a2e187..efaa0a72 100644 --- a/src/renderer/utils/music/wy/api-test.js +++ b/src/renderer/utils/music/wy/api-test.js @@ -8,6 +8,7 @@ const api_test = { method: 'get', timeout, headers, + family: 4, }) requestObj.promise = requestObj.promise.then(({ body }) => { return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail)) @@ -19,6 +20,7 @@ const api_test = { method: 'get', timeout, headers, + family: 4, }) requestObj.promise = requestObj.promise.then(({ body }) => { return body.code === 0 ? Promise.resolve(body.data) : Promise.reject(new Error(requestMsg.fail)) @@ -30,6 +32,7 @@ const api_test = { method: 'get', timeout, headers, + family: 4, }) requestObj.promise = requestObj.promise.then(({ body }) => { return body.code === 0 ? Promise.resolve(body.data) : Promise.reject(new Error(requestMsg.fail)) diff --git a/src/renderer/utils/request.js b/src/renderer/utils/request.js index ce02ec44..439750e8 100644 --- a/src/renderer/utils/request.js +++ b/src/renderer/utils/request.js @@ -5,7 +5,14 @@ import { requestMsg } from './message' import { bHh } from './music/options' // import fs from 'fs' -const headers = { +import dnscache from 'dnscache' +dnscache({ + enable: true, + ttl: 21600, + cachesize: 1000, +}) + +const defaultHeaders = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36', } // var proxyUrl = "http://" + user + ":" + password + "@" + host + ":" + port; @@ -221,26 +228,28 @@ const getProxyInfo = () => window.globalObj.proxy.enable ? `http://${window.globalObj.proxy.username}:${window.globalObj.proxy.password}@${window.globalObj.proxy.host}:${window.globalObj.proxy.port};` : undefined -const fetchData = (url, method, options, callback) => { +const fetchData = (url, method, { + headers = {}, + format = 'json', + timeout = 1000, + ...options +}, callback) => { // console.log(url, options) console.log('---start---', url) - if (options.headers && options.headers[bHh]) { + if (headers[bHh]) { let s = Buffer.from(bHh, 'hex').toString() s = s.replace(s.substr(-1), '') s = Buffer.from(s, 'base64').toString() - options.headers[s] = !!s - delete options.headers[bHh] + headers[s] = !!s + delete headers[bHh] } return request(url, { + ...options, method, - headers: Object.assign({}, headers, options.headers || {}), - Origin: options.origin, - body: options.body, - form: options.form, - formData: options.formData, - timeout: options.timeout || 10000, + headers: Object.assign({}, defaultHeaders, headers), + timeout, proxy: getProxyInfo(), - json: options.format === undefined || options.format === 'json', + json: format === 'json', }, (err, resp, body) => { if (err) return callback(err, null) callback(null, resp, body)