2016-05-05 11 views
9

Uygulamam Cordova Uygulamasıdır. Bu hafta konsolumda bir çok uyarı gördüm:Almaya çalıştığım bu konsol uyarısı - Kaydırma pürüzsüzlüğünü iyileştirmek için ertelenmiş uzun süre çalışan görev (ler) i mi?

Deferred long-running timer task(s) to improve scrolling smoothness. See crbug.com/574343. 

Bu haftadan önce hiç görmedim. Bazı süreçler oldukça büyük olduğundan ve bu nedenle kullanıcıya işleyişini işleme koymadığından, bir çok yerleşim programını kullanıyorum.

// GETS MEDICINES VIA MYCLOUD 
function getMedicinesFromServer() { 
    // Start Process 
    myProcess("Syncing Medicines", true); 
    setTimeout(function() { 
      var data = getAllModifiedMedicines(viewModel.MedicineCupboard()); 
      sendAllMedicines(data); 
    }, 300); 
} 

Bu yanlış pozitif mi yoksa daha iyi bir yol var mı?

Bu aptal zaman aşımları için Tam Sebep, kullanıcının, verileri bir düğmeye tıklattıklarında farkında olduklarından haberdar olmalarını sağlamaktır.

Eski yol:

myProcess("Syncing Medicines", true); 
var data = getAllModifiedMedicines(viewModel.MedicineCupboard()); 
sendAllMedicines(data); 

kullanıcıya gerçekleme işlemini garanti vermedi.

cevap

12

Uyarı, uzun süre çalışan bir geri arama olduğundan (> 50 ms) ve kullanıcının kaydırmak üzere olduğu için zamanlayıcınızın zamanında kovulmadığını bildiriyor. Geri aranmanız çalışıyorken Chrome sayfayı kaydırmaya başlayamaz, bu nedenle "jank" ile sonuçlanır, kullanıcı girişi zamanında ele alınmaz. Kullanıcı için deneyimi daha iyi hale getirmek amacıyla Chrome, yayınlanmasının, kullanıcının çalışmasını olumsuz yönde etkilemeyeceği bir süreye kadar geri göndermeyi ertelemeye karar verdi.

Yapmaya çalıştığınız şeyin ayrıntılarını bilmiyorum, ancak yapılacak şeylerin doğru yolu, büyük bir geri dönüşünüzü daha küçük gruplar halinde parçalamak ve bunları yaymak olacak, böylece herhangi bir çağrı yapılmayacaktır. kullanıcı eylemlerini önemli ölçüde geciktirir. Ayrıca, işlevinizi yalnızca Chrome boşta olduğunda ve zaman gerektirmeyen kritik görevler için ideal olduğunda arayabileceğiniz requestIdleCallback'u kullanarak bakabilirsiniz. (Ancak, requestIdleCallback yalnızca şu an için Chrome'da desteklenmektedir).

İlgili konular