javascript - Existe-t-il un moyen de détecter le temps d'exécution d'une méthode synchrone en JS?
迷茫
迷茫 2017-06-15 09:23:26
0
5
871

La particularité est la suivante : y a-t-il quelqu'un qui peut détecter le temps d'exécution de la méthode de synchronisation ? Si le temps d'exécution est trop long, je prendrai l'initiative de tuer cette méthode

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(5)
typecho

Cela dépend de votre méthode de synchronisation ?

  • S'il s'agit d'une méthode fournie par une bibliothèque tierce, cela dépend si elle fournit elle-même une méthode d'arrêt. Sinon, vous ne pouvez rien faire ;

  • S'il s'agit d'un fichier i/o/delete/create, vous ne pourrez peut-être pas l'arrêter, mais vous pouvez écrire une fonction inverse pour restaurer l'état d'origine après avoir signalé une erreur

  •  ;
  • Si cette méthode est écrite par vous-même et comporte plusieurs sous-fonctions, vous pouvez alors définir une minuterie à l'intérieur de la fonction et vérifier si le temps dépasse la valeur autorisée avant d'exécuter chaque sous-fonction

  • .
  • Si cette méthode est écrite par vous et ne comporte qu'une seule étape, comme c'est une méthode qui prend du temps, alors il y a probablement une boucle, vous pouvez donc vérifier l'heure à chaque fois qu'elle boucle. . .

世界只因有你

Du point de vue JS, lors de l'exécution d'une méthode synchrone, toute l'application y sera bloquée. À ce moment, même le rappel déclenché de manière asynchrone par setTimeout ne peut être exécuté dans la boucle d'événements qu'une fois l'exécution de la méthode synchrone terminée, il ne peut donc pas être exécuté dans la méthode synchrone. Vérifiez son propre temps d'exécution et tuez-vous.

Du point de vue de l'informatique, la question posée est en fait le problème d'arrêt classique :

Le problème d'arrêt (anglais : halting problem) est un problème de théorie de la calculabilité en logique et en mathématiques. En termes simples, le problème de l'arrêt consiste à déterminer si un programme peut mettre fin à son fonctionnement dans un délai limité. Ce problème est équivalent au problème de décision suivant : existe-t-il un programme P. Pour tout programme d'entrée w, on peut juger que w se terminera dans un temps limité ou bouclera sans fin.

Ce problème est NP-difficile, ce qui signifie qu'il n'existe pas d'algorithme avec une complexité temporelle acceptable pour le résoudre directement.

Mais au-delà de l'algorithme académique, il existe de nombreuses solutions de contournement en ingénierie, comme l'utilisation de Web Worker ou du mécanisme de gestion des processus de PM2, etc., qui ne seront pas abordées ici.

刘奇

Ensuite, vous ne pouvez faire que du multi-threading...
http://www.w3school.com.cn/ht...
Cependant, comment tuer js est aussi un mystère...
En fin de compte... vous pouvez directement Ne serait-il pas préférable d'utiliser asynchrone||||

黄舟
console.time("time1")
$("*").each(function(){})

console.timeEnd("time1") 

On m'a rappelé que ce n'est effectivement pas la solution. Une autre solution bas de gamme n'est peut-être que celle-ci :

    var func = function(t1) {
        var sum = 0,
            t2;
        for (var i = 0; i <= 10000; i++) {
            sum += i;
            t2 = new Date().getTime() - t1;
            if (t2 > 1) {
                throw '超时';
            }
        }
        console.log(sum);
    };

    try {
        func(new Date().getTime());
    } catch (e) {
        console.log(e);
    }

Ne convient pas nécessairement à toutes les entreprises, et les points eux-mêmes ralentiront le processus.

女神的闺蜜爱上我

Webworker peut exécuter votre logique de calcul dans un autre thread, la méthode onmessage peut accepter les résultats de l'exécution et la méthode terminate
peut mettre fin à l'exécution de webworker

var job001DoneIndictor=false;
var myWorker = new Worker('job001.js');
//接收worker传递过来的数据
myWorker.onmessage = function(event){
    
  job001DoneIndictor=true;
};
setTimeout(function(){
    if(!job001DoneIndictor){
       myWorker.terminate();
       myWorker =null;
    }
},5000);//设置超时检测时间
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!