Chrome 87 intègre l'API isInputPending proposée par Facebook

Par:
fredericmazue

ven, 20/11/2020 - 14:50

Les développeurs Web peuvent être confrontés au problème de devoir effectuer des tâches lourdes dans leur pages tout en assurant la réactivité de celles-ci. Répondre aussi rapidement que possible aux entrées de l'utilisateur nécessite de payer une surcharge de performance, ou d'écrire un code compliqué.

Pour remédier à ce problème, Facebook a proposé en avril 2019, une API : isInputPending. Cette API, accessible par navigator.scheduling.isInputPending, permet aux développeurs de terminer leur travail le plus rapidement possible si l'utilisateur n'interagit pas, mais de répondre le plus rapidement possible à l'entrée de l'utilisateur si une entrée se produit.

Cette API reçoit en argument un dictionnaire IsInputPendingOptions, qui peut inclure une entrée discrète (par exemple, des clics de souris, des pressions sur les touches), ou une entrée discrète et continue (par exemple, mouvement de souris, glissement tactile).

Voici un morceau de code montrant comment cette API peut être mise en oeuvre :

let taskQueue = [task1, task2, ...];

const options = {
  includeContinuous: false,
};

function doWork() {
  while (let task = taskQueue.pop()) {
    task.execute();
    if (navigator.scheduling.isInputPending(options)) {
      setTimeout(doWork, 0);
      break;
    }
  }
}

doWork();

Cette API est accompagnée de la fonction requestIdleCallback qui a la capacité de résoudre des problèmes similaires, mais seulement lorsque le travail effectué est de faible priorité. La fonction attend une période d'inactivité avant d'exécuter le travail associé.

Les spécifications de isInputPending sont disponibles sur GitHub.

Le navigateur Chrome 87, que Google vient de publier, intègre cette API.