perf: 优化对话列表加载速度

This commit is contained in:
kuaifan 2023-01-29 11:17:09 +08:00
parent 78f197e7f9
commit dcf5d3e910
3 changed files with 32 additions and 19 deletions

View File

@ -38,7 +38,7 @@ class DialogController extends AbstractController
*
* @apiParam {String} [at_after] 只读取在这个时间之后更新的对话
* @apiParam {Number} [page] 当前页,默认:1
* @apiParam {Number} [pagesize] 每页显示数量,默认:100,最大:200
* @apiParam {Number} [pagesize] 每页显示数量,默认:50,最大:100
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
@ -57,7 +57,7 @@ class DialogController extends AbstractController
$list = $builder
->orderByDesc('u.top_at')
->orderByDesc('web_socket_dialogs.last_at')
->paginate(Base::getPaginate(200, 100));
->paginate(Base::getPaginate(100, 50));
$list->transform(function (WebSocketDialog $item) use ($user) {
return $item->formatData($user->userid);
});

View File

@ -755,7 +755,7 @@ export default {
if (timeout > -1) {
this.__updateDialogs = setTimeout(_ => {
if (this.tabActive === 'dialog') {
this.$store.dispatch("getDialogs", true).catch(() => {});
this.$store.dispatch("getDialogs", {hideLoad: true}).catch(() => {});
}
}, timeout)
}

View File

@ -1278,7 +1278,7 @@ export default {
//
dispatch("call", {
url: 'project/task/lists',
data: data
data
}).then(result => {
if (data.project_id) {
state.projectLoad--;
@ -2071,40 +2071,53 @@ export default {
* 获取会话列表
* @param state
* @param dispatch
* @param hideLoad
* @param data
* @returns {Promise<unknown>}
*/
getDialogs({state, dispatch}, hideLoad) {
getDialogs({state, dispatch}, data) {
return new Promise(function (resolve, reject) {
if (state.userId === 0) {
state.cacheDialogs = [];
reject({msg: 'Parameter error'});
return;
}
let data = {};
if (hideLoad !== true) {
data = $A.isJson(data) ? data : {}
if (data.hideLoad !== true) {
state.loadDialogs++;
}
if (state.cacheDialogs.length > 0) {
const tmpList = state.cacheDialogs.sort((a, b) => {
if (a.top_at || b.top_at) {
return $A.Date(b.top_at) - $A.Date(a.top_at);
}
return $A.Date(b.last_at) - $A.Date(a.last_at);
})
data.at_after = tmpList[0].last_at;
if (typeof data.pagesize === "undefined") {
data.pagesize = 20
}
if (typeof data.page === "undefined") {
data.page = 1
if (state.cacheDialogs.length > 0) {
const tmpList = state.cacheDialogs.sort((a, b) => {
if (a.top_at || b.top_at) {
return $A.Date(b.top_at) - $A.Date(a.top_at);
}
return $A.Date(b.last_at) - $A.Date(a.last_at);
})
data.at_after = tmpList[0].last_at;
}
}
dispatch("call", {
url: 'dialog/lists',
data,
}).then(result => {
dispatch("saveDialog", result.data.data);
resolve(result)
const resData = result.data;
dispatch("saveDialog", resData.data);
//
if (resData.next_page_url && resData.current_page < 5) {
data.page++
dispatch("getDialogs", data).then(resolve).catch(reject)
} else {
resolve()
}
}).catch(e => {
console.warn(e);
reject(e)
}).finally(_ => {
if (hideLoad !== true) {
if (data.hideLoad !== true) {
state.loadDialogs--;
}
});