Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CHRONOMÈTRE MESURANT LA DURÉE D'UNE FONCTION


Information sur la source

Catégorie :Divers Classé sous : compteur, stopwatch, analyse, temps, timer Niveau : Initié Date de création : 23/10/2006 Date de mise à jour : 23/10/2006 14:02:09 Vu / téléchargé: 6 407 / 134

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note


Description

Cette classe est un chronomètre qui vous permet de mesurer le temps que prend votre code. J'ai fait cette classe en me basant sur le framework Atlas.

Il y a une classe StopWatch qui est la base du chronomètre, vous n'avez pas à utiliser directement cette classe ! La seconde classe est un singleton, vous n'avez pas besoin de l'instancier pour l'utiliser.

Le fonctionnement est simple, avant de rentrer dans le code, vous démarrer un nouveau StopWatch, executer votre code et stopper le StopWatch.

Cyril.Debug.Analyzers.start('Test1');
// Le code a executé
Cyril.Debug.Analyzers.stop('Test1');

Une popup vous affichera le temps passer pour chacun des compteurs courant. Vous avez aussi les méthodes pause et resume qui font ce que le nom indique :-)
 

Source

  • Type.registerNamespace('Cyril.Debug');
  • Cyril.Debug.StopWatch = function(name, description){
  • /// <summary>This class can mesure the time take by some line of code. You dont't have to manipulate this object directly, use the Cyril.Debug.Analyzers type.</summary>
  • /// <param name="name" type="String" mayBeNull="false">Name of this StopWatch.</param>
  • /// <param name="description" type="String" optional="true" mayBeNull="true">Description of this StopWatch.</param>
  • /// <returns type="StopWatch"></returns>
  • var e = Function._validateParams(arguments, [
  • {name: 'name', type: String},
  • {name: 'description', type: String, mayBeNull: true, optional:true}
  • ]);
  • if (e) throw e;
  • /* Private fields */
  • this._name = name;
  • this._description = description || '';
  • }
  • Cyril.Debug.StopWatch.prototype = {
  • /* Private fields" */
  • _startDate : null,
  • _endDate : null,
  • /* Public accesssors */
  • get_name : function(){
  • return this._name;
  • },
  • get_description : function(){
  • return this._description;
  • },
  • set_description : function(description){
  • this._description = description;
  • },
  • _elapsedTime : 0,
  • get_elapsedTime : function(){
  • return this._elapsedTime;
  • },
  • _isStarted : false,
  • get_isStarted : function(){
  • return this._isStarted;
  • },
  • _isRunning : false,
  • get_isRunning : function(){
  • return this._isRunning;
  • },
  • _isStopped : false,
  • get_isStopped : function() {
  • return this._isStopped;
  • },
  • /* Public Methods */
  • start : function(){
  • this._isStarted = true;
  • this._isRunning = true;
  • this._elapsedTime = 0;
  • this._startDate = new Date();
  • },
  • pause : function(){
  • this._elapsedTime += new Date() - this._startDate;
  • this._isRunning = false;
  • },
  • resume : function(){
  • this._isStarted = true;
  • this._startDate = new Date();
  • },
  • stop : function(){
  • if(this._isRunning)
  • this._elapsedTime += new Date() - this._startDate;
  • this._isRunning = false;
  • this._isStopped = true;
  • }
  • }
  • Cyril.Debug.StopWatch.registerClass('Cyril.Debug.StopWatch', null);
  • Cyril.Debug._Analyzers = function(){
  • /// <summary></summary>
  • }
  • Cyril.Debug._Analyzers.prototype = {
  • /* Private fields */
  • _popup : null,
  • _stopWatches : {},
  • /* Public properties */
  • get_StopWatch : function(name){
  • /// <summary>Get a StopWatch objet by name.</summary>
  • /// <param name="name" type="String" mayBeNull="false" optional="false">Name of the StopWatch.</param>
  • /// <returns type="StopWatch"></returns>
  • var e = Function._validateParams(arguments, [
  • {name: 'name', type: String, mayBeNull: false, optional: false},
  • {name: 'description', type: String, mayBeNull: true, optional:true}
  • ]);
  • if (e) throw e;
  • return this._stopWatches[name];
  • },
  • /* Public methods */
  • start : function(name, description){
  • /// <summary>Start a new StopWatch, if the name already existe it will be deleted.</summary>
  • /// <param name="name" type="String" mayBeNull="false" optional="false">Name of the StopWatch.</param>
  • /// <param name="description" type="String" optional="true" mayBeNull="true">Description of this StopWatch.</param>
  • var e = Function._validateParams(arguments, [
  • {name: 'message', type: String, mayBeNull: false, optional: false}
  • ]);
  • if (e) throw e;
  • this._stopWatches[name] = new Cyril.Debug.StopWatch(name, description);
  • this._stopWatches[name].start();
  • },
  • pause : function(name){
  • /// <summary>Pause the associated StopWatch, use the Resume method to restart it.</summary>
  • /// <param name="name" type="String" mayBeNull="false" optional="false">Name of the StopWatch.</param>
  • var e = Function._validateParams(arguments, [
  • {name: 'message', type: String, mayBeNull: false, optional: false}
  • ]);
  • if (e) throw e;
  • this._stopWatches[name].pause();
  • },
  • resume : function(name){
  • /// <summary>Resume the associated StopWatch.</summary>
  • /// <param name="name" type="String" mayBeNull="false" optional="false">Name of the StopWatch.</param>
  • var e = Function._validateParams(arguments, [
  • {name: 'message', type: String, mayBeNull: false, optional: false}
  • ]);
  • if (e) throw e;
  • this._stopWatches[name].resume();
  • },
  • stop : function(name){
  • /// <summary>Stop the associated StopWatch and display the results.</summary>
  • /// <param name="name" type="String" mayBeNull="false" optional="false">Name of the StopWatch.</param>
  • var e = Function._validateParams(arguments, [
  • {name: 'message', type: String, mayBeNull: false, optional: false}
  • ]);
  • if (e) throw e;
  • this._stopWatches[name].stop();
  • this.display();
  • },
  • display : function(){
  • /// <summary>Display all StopWatch in a popup.</summary>
  • if (this._popup){
  • try {
  • this._popup.close();
  • } catch (ex) {
  • }
  • }
  • this._popup = window.open('about:blank', '_blank', 'resizable=yes,scrollbars=yes,width=300, height=200');
  • if (!this._popup){
  • alert('un anti popup a bloqué la fenêtre des résultats des tests');
  • return;
  • }
  • var sb = new Sys.StringBuilder();
  • sb.append('<html><head><title>Cyril.Debug.Analyzers</title></head><body><ul>');
  • for (name in this._stopWatches){
  • sb.append(String.format('<li><strong>{0}</strong> : {1} ms', this._stopWatches[name].get_name(), this._stopWatches[name].get_elapsedTime()));
  • var description = this._stopWatches[name].get_description();
  • if (description){
  • sb.append(String.format('<br /><p>{0}</p>', description));
  • }
  • sb.append('</li>');
  • }
  • sb.append('</ul></body></html>');
  • this._popup.document.write(sb.toString());
  • }
  • }
  • Cyril.Debug._Analyzers.registerClass('Cyril.Debug._Analyzers', null);
  • Cyril.Debug.Analyzers = new Cyril.Debug._Analyzers();
Type.registerNamespace('Cyril.Debug');

Cyril.Debug.StopWatch = function(name, description){
    /// <summary>This class can mesure the time take by some line of code. You dont't have to manipulate this object directly, use the Cyril.Debug.Analyzers type.</summary>
    /// <param name="name" type="String" mayBeNull="false">Name of this StopWatch.</param>
    /// <param name="description" type="String" optional="true" mayBeNull="true">Description of this StopWatch.</param>
    /// <returns type="StopWatch"></returns>
    var e = Function._validateParams(arguments, [
        {name: 'name', type: String},
        {name: 'description', type: String, mayBeNull: true, optional:true}
    ]);
    if (e) throw e;
    
    /* Private fields */
    this._name          = name; 
    this._description   = description || '';
}
Cyril.Debug.StopWatch.prototype = {
    
    /* Private fields" */
    _startDate : null, 
    _endDate : null,
    
    /* Public accesssors */
    get_name : function(){
      return this._name;  
    },
    
    get_description : function(){
        return this._description; 
    },
    set_description : function(description){
        this._description = description; 
    },
    
    _elapsedTime : 0, 
    get_elapsedTime : function(){
        return this._elapsedTime;
    },
    
    _isStarted : false, 
    get_isStarted : function(){
        return this._isStarted; 
    },
    _isRunning : false, 
    get_isRunning : function(){
        return this._isRunning; 
    },
    _isStopped : false, 
    get_isStopped : function() {
        return this._isStopped;
    },


    /* Public Methods */
    
    start : function(){
        this._isStarted = true; 
        this._isRunning = true;
        this._elapsedTime = 0;
        this._startDate = new Date(); 
    },
    pause : function(){
        this._elapsedTime += new Date() - this._startDate;
        this._isRunning = false;
    },
    resume : function(){
        this._isStarted = true; 
        this._startDate = new Date(); 
    },
    stop : function(){
        if(this._isRunning)
            this._elapsedTime += new Date() - this._startDate;
        this._isRunning = false;
        this._isStopped = true;
    }
}
Cyril.Debug.StopWatch.registerClass('Cyril.Debug.StopWatch', null);

Cyril.Debug._Analyzers = function(){
    /// <summary></summary>
}
Cyril.Debug._Analyzers.prototype = {
    
    /* Private fields */
    _popup : null,
    _stopWatches : {},
    
    /* Public properties */
    get_StopWatch : function(name){
        /// <summary>Get a StopWatch objet by name.</summary>
        /// <param name="name" type="String" mayBeNull="false" optional="false">Name of the StopWatch.</param>
        /// <returns type="StopWatch"></returns>
        var e = Function._validateParams(arguments, [
            {name: 'name', type: String, mayBeNull: false, optional: false},
            {name: 'description', type: String, mayBeNull: true, optional:true}
        ]);
        if (e) throw e;

        return this._stopWatches[name]; 
    },
    
    /* Public methods */
    
    start : function(name, description){
        /// <summary>Start a new StopWatch, if the name already existe it will be deleted.</summary>
        /// <param name="name" type="String" mayBeNull="false" optional="false">Name of the StopWatch.</param>
        /// <param name="description" type="String" optional="true" mayBeNull="true">Description of this StopWatch.</param>        
        var e = Function._validateParams(arguments, [
            {name: 'message', type: String, mayBeNull: false, optional: false}
        ]);
        if (e) throw e;

        this._stopWatches[name] = new Cyril.Debug.StopWatch(name, description);
        this._stopWatches[name].start();
    },
    pause : function(name){
        /// <summary>Pause the associated StopWatch, use the Resume method to restart it.</summary>
        /// <param name="name" type="String" mayBeNull="false" optional="false">Name of the StopWatch.</param>
        var e = Function._validateParams(arguments, [
            {name: 'message', type: String, mayBeNull: false, optional: false}
        ]);
        if (e) throw e;
    
        this._stopWatches[name].pause();
    },
    resume : function(name){
        /// <summary>Resume the associated StopWatch.</summary>
        /// <param name="name" type="String" mayBeNull="false" optional="false">Name of the StopWatch.</param>
        var e = Function._validateParams(arguments, [
            {name: 'message', type: String, mayBeNull: false, optional: false}
        ]);
        if (e) throw e;

        this._stopWatches[name].resume();
    },
    stop : function(name){
        /// <summary>Stop the associated StopWatch and display the results.</summary>
        /// <param name="name" type="String" mayBeNull="false" optional="false">Name of the StopWatch.</param>
        var e = Function._validateParams(arguments, [
            {name: 'message', type: String, mayBeNull: false, optional: false}
        ]);
        if (e) throw e;

        this._stopWatches[name].stop();
        this.display();
    }, 
    display : function(){
        /// <summary>Display all StopWatch in a popup.</summary>
        if (this._popup){
            try {
                this._popup.close(); 
            } catch (ex) {
            }
        }
        
        this._popup = window.open('about:blank', '_blank', 'resizable=yes,scrollbars=yes,width=300, height=200');
        if (!this._popup){
            alert('un anti popup a bloqué la fenêtre des résultats des tests');
            return;
        }
        var sb = new Sys.StringBuilder(); 
        sb.append('<html><head><title>Cyril.Debug.Analyzers</title></head><body><ul>');
        for (name in this._stopWatches){
            sb.append(String.format('<li><strong>{0}</strong> : {1} ms', this._stopWatches[name].get_name(), this._stopWatches[name].get_elapsedTime()));
            var description = this._stopWatches[name].get_description();
            if (description){
                sb.append(String.format('<br /><p>{0}</p>', description));
            }
            sb.append('</li>');
        }
        sb.append('</ul></body></html>');
        this._popup.document.write(sb.toString()); 
    }    
}
Cyril.Debug._Analyzers.registerClass('Cyril.Debug._Analyzers', null);

Cyril.Debug.Analyzers = new Cyril.Debug._Analyzers();

Conclusion

Vous trouverez dans le zip un exemple d'utilisation de ce chronomètre, pour pouvoir l'executer il vous faut la beta 1 d'Atlas (http://ajax.asp.net) et Visual Web Dev Express (gratuit : http://www.microsoft.com/france/msdn/vstudio/express/vwd/telechargez.mspx)

Si vous ne voulez pas utiliser ASP.net pour tester le script il vous faudra utiliser Microsoft Ajax Library pour faire fonctionner le fichier JavaScript.

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

23 octobre 2006 14:02:09 :
.

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Recherche compteur donnant le temps qui c'est passer depuis une date. [ par vali103 ] Bonjour,Je recherche un compteur permettant de donner le temps à partir d'une date (en année, mois, jours, heures, minutes, et pourquoi pas secondes)e Zoom sur une image en temps réel [ par EnaelHoly ] Salut à tousVoila en fait je me prend la tête sur une broutille certainement. Mon problème c'est que j'aimerai faire un zoom progressif sur une image besoin d'un compteur d'affichage de pub [ par kynhu ] un sponsor veut a tout pris savoir combien de fois ca pub passe sur mon site.les pubs sont appelés par un fichier.jsquel est la solution la plus effi problème avec onclose [ par crampouz ] Bonjour tout le mondej'ai une fonction javascript toute simple dans la partie head de ma page html:function compteur(){w=screen.width;h=screen.height; REDIRECTION AVEC TEMPS [ par Scepo ] Boujour,Voila je voudrai faire une redirection au bout de qq seconde.Quand un utilisateur arrive sur ma page de demarrege, que au bout de 5 sec, il se compteur a partir d'une date [ par jojoneil ] Bonjour, je fais un site et je voudrai mettre un chronomètre qui débute d'une date précise et qui continu a l'infini, je suis plus qu'un nul en java, Temps d'exécution de code [ par 3psilon ] Temps de téléchargement d'un fichier [ par iorekremy ] Salut &#224; tous,Je cherche &#224; faire une page web pour indiquer le temps de t&#233;l&#233;chargement d'un fichier en fonction de sa taille et du Limite d'éxecution d'un script [ par prim ] Bonjour,J'ai une question toute b&#234;te : je voulais savoir s'il existe un temps maximum d'executio d'un script en javascript ; je sais qu'en php il Site web [ par leyn ] Salutest ce que vous pouvez me renseigner sur le temps de cr&#233;ation d'un site. Ou puis-je trouver des infos sur le temps de r&#233;alisation par p


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.