делаю игру по типу vkcoin (как практика), использую Vue js, express, mongo DB, с помощью setInterval каждую секунду диспатчу функцию vuex отправки данных на сервер, но если игра активна продолжительное время, начинает лагать, а так же, спустя 7 и больше секунд, начиная обновлять страницу, она будет обновляться вечно, пока не отменить обновление страницы(из-за этого происходит какая-то ошибка с fetch) и в течении опять же 7-ми секунд я могу нормально обновить страницу. В чем может быть проблема?
//Game.vue - interval
this.updateInterval = setInterval(async () => {
await this.$store.dispatch('sendData', {
user: this.userData,
data: this.globData
})
}, 1000)
//vuex model gameLogic - sendData()
async sendData(ctx, {user, data}) {
let boost = 0
for (let GPU of user.data.GPUs) {
for (let dGPU of data.GPUs) {
if (GPU.title === dGPU.title) {
boost += GPU.count * dGPU.speed
break
}
}
}
for (let CPU of user.data.CPUs) {
for (let dCPU of data.CPUs) {
if (CPU.title === dCPU.title) {
boost += CPU.count * dCPU.speed
break
}
}
}
user.data.balance += boost
const res = await request('/update', 'POST', user)
}
//server
app.post('/update', async (req, res) => {
let { email, data } = req.body
User.collection.updateOne({email}, {$set: {"data.balance": data.balance}})
})
//request function
async function request(url, method = 'GET', data = null) {
try {
const headers = {}
let body
if (data) {
headers['Content-Type'] = 'application/json'
body = JSON.stringify(data)
}
const response = await fetch(url, {
method,
headers,
body
})
return await response.json()
} catch (e) {
console.warn('Error: ', e.message)
}
}
пробовал с помощью window.onbeforeunload прекращать интервал, но не работает