IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

setInterval ou timer perso


Sujet :

JavaScript

  1. #1
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut setInterval ou timer perso
    Salut, je me posais la question :
    vaut-il mieux se faire un timer perso avec performance.now() et requestAnimationFrame() plutôt que setInterval ?
    Je pencherais pour le timer perso avec la fonctionnalité de requestAnimationFrame() mais je ne sais pas comment setInterval est construit...

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
    <script>
            class Timer {
                constructor(callback, interval) {
                    let ti = performance.now();
                    let tf = 0,
                        dt = 0,
                        tick;
                    let _enabled = true;
     
                    function functimer() {
                        tf = performance.now();
                        dt = tf - ti;
                        if (dt >=interval) {
                            callback(dt);
                            ti=tf;
                        }
                        _enabled ? tick = window.requestAnimationFrame(functimer) : window.cancelAnimationFrame(tick);
                    }
     
                    Object.defineProperty(this, "enabled", {
                        get: function () {
                            return _enabled;
                        },
                        set: function (value) {
                            _enabled = value;
                        }
                    });
                    functimer();
                }
            }
     
           /*let  start=performance.now(),
                dt=0,
                end=0;*/
     
            const Ecoute = function (dt) {
                //end=performance.now();
                //dt=end-start;
                console.log(dt);
                //start=end;
            }
            //setInterval(Ecoute, 10);
            const timer = new Timer(Ecoute, 10);
        </script>
    </body>
    </html>

  2. #2
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 487
    Par défaut
    attention : un requestAnimationFrame ne sera pas execute au meme moment qu'un code JS lambda (comme le setTimeout par exemple)

    un setTimeout va "ajouter une nouvelle tache" a la queue de "l'event loop" avant le "render" (les styles calculations(css), layout (arbre du rendu), paint (pixel data) )

    un requestAnimationFrame sera execute au debut du "render" (style calculation, layout & paint) (plusieures taches peuvent etre execute avant le declanchement du "render")

    ce qu'il faut comprendre c'est que ni un setTimeout, ni un requestAnimationFrame ne seront "exactes" :
    dans les 2 cas, il faudra attendre que le thread soit libere, donc il faut plutot voire ces methodes comme "execute ce quand a partir de xxx ms, des que t'as un moment de libre"
    de plus, le requestAnimationFrame, sera calle sur les FPS de la machine (pour faire simple)

    faire un timer perso oubien un setTimeout... je dirai que c'est beaucoup de code (et beaucoup de bugs potentiels) juste pour etre a la nanoseconde pres
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Merci pour ta réponse !

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    je me posais la question :...
    je rajouterais que cela va dépendre de ce que tu veux en faire au final, on a rarement besoin de la nanoseconde !

  5. #5
    Membre très actif
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 733
    Par défaut
    jour

    pour un timer precis un setTimeout associé a l'objet date que l'on recupere a chaque itération et c'est bon

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/02/2022, 10h42
  2. tir d'un missile ou atre , setinterval() ou timer()
    Par davs34 dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 14/10/2010, 19h34
  3. Réponses: 4
    Dernier message: 07/12/2002, 15h24
  4. D6 Perso et Gen d'état
    Par diam's dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 02/12/2002, 17h58
  5. Timer en µsecondes
    Par Dagobert dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 25/11/2002, 00h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo