@Furamy

Интервал (setInterval) очень сильно тормозит работу. Что можно сделать, чтобы оптимизировать?

делаю игру по типу 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 прекращать интервал, но не работает
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
darakanoit
@darakanoit
Веб-разработчик
Батенька, да вам вебсокеты нужны, нельзя так аяксом долбиться на бэк.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
wapster92
@wapster92
Зачем ты используешь setInterval, если во вью есть watch или computed
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы