• 方法性能分析器装饰者模式应用


    <!DOCTYPE html>
    <html>
    <head>
        <title>方法性能分析器</title>
        <meta charset="utf-8">
    </head>
    <body>
    <div id="list-container"></div>
     
    <script>
        function $(id){
            return document.getElementById(id);
        }
    </script>
    <script>
        // ListBuilder class.
        var ListBuilder = function (parent, listLength) {
            this.parent = $(parent);
            this.listLength = listLength;
        };
        ListBuilder.prototype = {
            buildList: function (container) {
                var list = document.createElement('ul');
                list.setAttribute('id', container);
                this.parent.appendChild(list);
                var len = this.listLength;
     
                while (len) {
                    var item = document.createElement('li');
                    list.appendChild(item);
                    --len;
                }
            },
            removeLists: function(id){
                var ele = $(id);
                ele.parentNode.removeChild(ele);
            }
        };
     
        // SimpleProfiler class.
        var SimpleProfiler = function (component) {
            this.component = component;
        };
        SimpleProfiler.prototype = {
            buildList: function () {
                var startTime = (new Date()).getTime();
                this.component.buildList();
                var elapsedTime = (new Date()).getTime() - startTime;
                console.log('buildList:' + elapsedTime + ' ms');
            }
        };
    /*
        var list = new ListBuilder('list-container', 5000);
        list = new SimpleProfiler(list);
        list.buildList();
    */
        // 通用化改造
        // MethodProfiler class.
        var MethodProfiler = function (component) {
            this.component = component;
            this.timers = {};
     
            for (var key in this.component) {
                // Ensure that the property is a function
                if (typeof this.component[key] !== 'function') {
                    continue;
                }
     
                // Add the method
                var that = this;
                (function (methodName) {
                    that[methodName] = function () {
                        that.startTimer(methodName);
                        var returnValue = that.component[methodName].apply(that.component, arguments);
                        that.displayTime(methodName, that.getElapsedTime(methodName));
                        return returnValue;
                    };
                })(key);
            }
        };
        MethodProfiler.prototype = {
            startTimer: function (methodName) {
                this.timers[methodName] = (new Date()).getTime();
            },
            getElapsedTime: function (methodName) {
                return (new Date()).getTime() - this.timers[methodName];
            },
            displayTime: function (methodName, time) {
                console.log(methodName + ': ' + time + ' ms');
            }
        };
     
        var list = new ListBuilder('list-container', 5000);
        list = new MethodProfiler(list);
        list.buildList('ol');
        list.buildList('ul');
        list.removeLists('ul');
        list.removeLists('ol');
    </script>
    </body>
    </html>
     
  • 相关阅读:
    Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
    Atitit  OOCSS vs bem
    Atitit.js模块化 atiImport 的新特性javascript import
    Atitit.css 规范 bem 项目中 CSS 的组织和管理
    Atitit.eclipse git使用
    Atitit jOrgChart的使用  组织架构图css html
    Atitit.java相比c#.net的优点 优缺点  v2 q330
    Atitit.判断元素是否显示隐藏在父元素 overflow
    Atitit.获得向上向下左的右的邻居的方法 软键盘的设计..
    Atitit..css的体系结构
  • 原文地址:https://www.cnblogs.com/webFrontDev/p/2978517.html
Copyright © 2020-2023  润新知