push.js speed test

JavaScript performance comparison

Test case created

Info

testing difference in obfuscated code and naked code

Preparation code

<div id='wrapper'>
        <div id='sidebar'>
            <span class='title'>
                online users
            </span>
            <div class='online_user'>
                    Me:
                <div style='display: inline;' id='me'>
                    {display_name}
                </div>
            </div>
            <div id='active_users'>
                {{each {something} in {users}
                    <div class='online_user'>
                        {something}
                    </div>
                }}
            </div>
        </div>
        <div id='messages'>
            {{each {item} in {messages}
                <div class="message">
                    <div>
                        {item.user}
                    </div>

                    <span>
                        {item.content}
                    </span>
                </div>
            }}
        </div>
    <div id='input'>
        <form id="saveContactForm" method="post">
            <textarea id='txt_message' name='message'></textarea>
            <span class='btn' id='btn' data-update='#messages'>send</span>
        </form>
    </div>
</div>

Preparation code output

{{each {item} in {messages}
{item.user}
{item.content}
}}
send

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
naked version
var preserved_request;
preserved_request = document.body.innerHTML;

console.log('push.js fired');
var start = new Date().getTime();

var app = (function() {

    var self = this;

    // global !!
    self.page_data = {};
    var url_data = {};

    var start = function() {
        var elapsed = new Date().getTime() - start;
        request();
    };

    self.events = (function() {
        this.get_form_data = function (callback) {
            var inputs = document.getElementsByTagName('*'),
            allowed_inputs = ['TEXTAREA', 'INPUT', 'HIDDEN'],
            form_data = {};

            for (var element in inputs)
            if (allowed_inputs.indexOf(inputs[element].tagName) != -1) form_data[inputs[element].name] = inputs[element].value;
            if (callback) callback(form_data);
        }


        this.ui_ready;

        this.attach_event = function(element, type, handler) {
            element['on' + type] = function (e) {
                handle_event(handler, e);
            };
        }

        var handle_event = function (fun, e) {
            // get form data for use in controller
            if (window.event) window.event.cancelBubble = true;

            this.get_form_data(function (form_data, e) {
                if (fun) fun(form_data, e);
                else console.log('*warning* empty event');
            });
        }

       

        return {
            ui_ready: this.ui_ready,
            attach: this.attach_event,
            get_form_data: this.get_form_data
        };
    }());

    var config = {
        root: ''
    };

   
    function loadScript(url, up_to_filename, filename, callback) {
        if (fileExists(url)) { // main
            var elapsed = new Date().getTime() - start;
        } else if (fileExists(url.replace(filename, filename + '.index'))) { // assumed folder
            var elapsed = new Date().getTime() - start;
            url = url.replace(filename, filename + '.index');
        } else { // none
            var path = up_to_filename + filename;
            return;
        }
        // adding the script tag to the head
        var head = document.getElementsByTagName('head')[0];
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = url;

         script.onload = function () {
            callback();
         };
       
        script.defer = true;

        // fire the loading + callback
        head.appendChild(script);

        if (window.opera || document.documentMode<=8) { // opera and IE8 (or older) don't like it when i remove the script
            console.log('poor browser detected, please upgrade to chrome, firefox or IE10.');            
        } else {
            head.removeChild(script);
        }
    }

   

   

    function get_trigger(e) {
        e = e || window.event;
        var target = e.target || e.srcElement;
        return target;
    }

    (window.onpopstate = function() {
        // url_params
        var match,
        pl = /\+/g, // Regex for replacing addition symbol with a space
            search = /([^&=]+)=?([^&]*)/g,
            decode = function(s) {
                return decodeURIComponent(s.replace(pl, " "));
            },
            query = window.location.search.substring(1);

        url_data = {};
        while (match = search.exec(query)) {
            url_data[decode(match[1])] = decode(match[2]);
        }
    })();

   

    function ends_with(str, match) {
        return str.match(match + '$'); // $ = end of line
    }

    var request = function() {

        // the url, www.url.com(/this_bit)
        var url = window.location.pathname,

        // get the string after the last slash
        filename = url.substring(url.lastIndexOf('/') + 1);

        // if a dot is present, remove anything after the last one
        // should be removing the file extention
        filename = filename.indexOf('.') !== -1 ? filename.substring(0, filename.lastIndexOf('.')) : filename;

        // this is everything up to the file name
        var up_to_filename = url.substring(0, url.lastIndexOf('/') + 1);

        // replace any home page names with the one we want to use (index)
        if (filename === '' || filename.toLowerCase() === 'default' || filename.toLowerCase() === 'home') filename = 'index';

        // the finished url, used to find the correct controller, substring is used to remove the starting slash
        var page_loc = up_to_filename.substring(1) + filename;

        // add the page title to the variable array
        self.page_data.title = document.title;

        // get the controller name and add on a JS version of a GUID, which is to simply stop any caching of it, as its call will always change
        //var controller = '/controllers/' + page_loc.replace(/(?:\s|\%20)/i, '_').replace(/\//i, '.') + '.controller.js?v=' + 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            //var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
            //return v.toString(16);
        //});

        // load the controller - executes itself !
        //loadScript(controller, up_to_filename, filename, function() {
            //self.push();
            // this callback will run when the script is loaded and in context
            // (it is removed after this call completes so if you want to use the controller, do things inside the callback)
        //});
        self.push();
    };

    function fileExists(url, callback) {
        if(url){
            var req = new XMLHttpRequest();
            req.open('GET', url, false);
            req.send();
            return req.status==200;
        } else {
            return false;
        }
    }

    var is_array = function(object) {
        return object.constructor === Array;
    };

    // push values to screen
    self.push = function(element_to_update) {
        var elapsed = new Date().getTime() - start;

        // new code
        if (element_to_update !== undefined) {
            var a = document.createElement('div'); // make virtual div to house the content
            a.innerHTML = preserved_request; // hello content
            var els = a.getElementsByTagName('*'); // get all elements
            var target_el; // this will be what we update

            // find the element with the right id
            for(var i = 0; i < els.length; i++)
                if (els[i].id == element_to_update)
                    target_el = els[i];

            // make the HTML in question this
            req = target_el.innerHTML;

        } else {
            req = window.preserved_request;
        }
        // end new code

        //var req = window.preserved_request; // holds un-parsed variables
        for (var current_variable in self.page_data) {
            if (req.indexOf(current_variable) !== -1) {
                var new_content = self.page_data[current_variable];
                if (self.page_data[current_variable].toString().indexOf('[object Object]') != -1) {
                    req = draw_loop(current_variable, new_content, req);
                }
                else {
                    // support old browsers
                    var ready = false;
                    if (Array.isArray) { // does this function exist ?
                        if (Array.isArray(new_content)) {
                            ready = true;
                        }
                    }
                    else {
                        if (is_array(new_content)) {
                            ready = true;
                        }
                    }
                    if (ready === true) { // stuff here is always empty loop, removes syntax
                        if (self.page_data[current_variable].length === 0) {
                            var b = new RegExp('\\{\\{\\s?each\\s+\\{(.+)\\}\\s+in\\s+\\{' + current_variable + '\\}([\\s\\S]*?[^\\}\\}]*)\\}\\}', 'gm');
                            req = req.replace(b, '');
                        }
                        else {
                            req = draw_loop(current_variable, new_content, req);
                        }
                    }
                    else {
                        var current_variable_matches = new RegExp('{' + current_variable + '}', 'g');
                        req = req.replace(current_variable_matches, new_content);
                    }
                }
            }
        }

        if (element_to_update) {
            document.getElementById(element_to_update).innerHTML = req;
        } else {
            // update page
            document.body.innerHTML = req;
        }
        if (document.body.style.display === 'none') document.body.style.display = 'block';
        //app.events.get_form_data(function (form_data) {
            //if (self.events.ui_ready) self.events.ui_ready(form_data);
        //});
    };

   

   

    var draw_loop = function(current_variable, new_content, req) {
        var key, obj, prop, owns = Object.prototype.hasOwnProperty;
        var a = new RegExp('\\{\\{\\s?each\\s+\\{(.+)\\}\\s+in\\s+\\{' + current_variable + '\\}([\\s\\S]*?[^\\}\\}]*)\\}\\}', 'gm');
        var match = a.exec(req);
        var loop_key = match[1];
        var final_loop = '';

        for (key in new_content) {

            if (owns.call(new_content, key)) {
                obj = new_content[key];
                var loop_content = match[2];
                var prop_num = 0;
                for (prop in obj) {
                    if (owns.call(obj, prop)) {
                        prop_num++;
                        loop_content = loop_content.replace('{' + loop_key + '.' + prop + '}', obj[prop]);
                        loop_content = loop_content.replace('{' + loop_key + '}', obj);
                    }
                }
                final_loop += loop_content;
            }
        }
        return req.replace(a, final_loop);
    };

    var get_root = function(url) {
        var steps = '';
        while (get_current_url_level(url) != config.root) {
            url = url.replace(get_current_url_level(url) + '/', '');
            steps += '../';
        }
        if (steps === '') {
            steps = '.';
        }
        return steps;
    };

    var get_current_url_level = function(url) {
        var filename = url.substring(url.lastIndexOf('/') + 1);
        url = url.replace('/' + filename, '');
        return url.substring(url.lastIndexOf('/') + 1);
    };

    // start things rolling !!
    start();

    return {
        events: self.events,
        push: self.push,
        page_data: self.page_data,
        url_data: url_data
    };

}());
 
pending…
obfuscated version
var _0x4970=["\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x62\x6F\x64\x79","\x70\x75\x73\x68\x2E\x6A\x73\x20\x66\x69\x72\x65\x64","\x6C\x6F\x67","\x67\x65\x74\x54\x69\x6D\x65","\x70\x61\x67\x65\x5F\x64\x61\x74\x61","\x65\x76\x65\x6E\x74\x73","\x67\x65\x74\x5F\x66\x6F\x72\x6D\x5F\x64\x61\x74\x61","\x2A","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65","\x54\x45\x58\x54\x41\x52\x45\x41","\x49\x4E\x50\x55\x54","\x48\x49\x44\x44\x45\x4E","\x74\x61\x67\x4E\x61\x6D\x65","\x69\x6E\x64\x65\x78\x4F\x66","\x6E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x75\x69\x5F\x72\x65\x61\x64\x79","\x61\x74\x74\x61\x63\x68\x5F\x65\x76\x65\x6E\x74","\x6F\x6E","\x65\x76\x65\x6E\x74","\x63\x61\x6E\x63\x65\x6C\x42\x75\x62\x62\x6C\x65","\x2A\x77\x61\x72\x6E\x69\x6E\x67\x2A\x20\x65\x6D\x70\x74\x79\x20\x65\x76\x65\x6E\x74","","\x2E\x69\x6E\x64\x65\x78","\x72\x65\x70\x6C\x61\x63\x65","\x68\x65\x61\x64","\x73\x63\x72\x69\x70\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x79\x70\x65","\x74\x65\x78\x74\x2F\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74","\x73\x72\x63","\x6F\x6E\x6C\x6F\x61\x64","\x64\x65\x66\x65\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x6F\x70\x65\x72\x61","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x70\x6F\x6F\x72\x20\x62\x72\x6F\x77\x73\x65\x72\x20\x64\x65\x74\x65\x63\x74\x65\x64\x2C\x20\x70\x6C\x65\x61\x73\x65\x20\x75\x70\x67\x72\x61\x64\x65\x20\x74\x6F\x20\x63\x68\x72\x6F\x6D\x65\x2C\x20\x66\x69\x72\x65\x66\x6F\x78\x20\x6F\x72\x20\x49\x45\x31\x30\x2E","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x6F\x6E\x70\x6F\x70\x73\x74\x61\x74\x65","\x20","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x73\x65\x61\x72\x63\x68","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x65\x78\x65\x63","\x74\x61\x72\x67\x65\x74","\x73\x72\x63\x45\x6C\x65\x6D\x65\x6E\x74","\x24","\x6D\x61\x74\x63\x68","\x70\x61\x74\x68\x6E\x61\x6D\x65","\x2F","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x2E","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x64\x65\x66\x61\x75\x6C\x74","\x68\x6F\x6D\x65","\x69\x6E\x64\x65\x78","\x74\x69\x74\x6C\x65","\x70\x75\x73\x68","\x47\x45\x54","\x6F\x70\x65\x6E","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x63\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x64\x69\x76","\x6C\x65\x6E\x67\x74\x68","\x69\x64","\x70\x72\x65\x73\x65\x72\x76\x65\x64\x5F\x72\x65\x71\x75\x65\x73\x74","\x5B\x6F\x62\x6A\x65\x63\x74\x20\x4F\x62\x6A\x65\x63\x74\x5D","\x69\x73\x41\x72\x72\x61\x79","\x5C\x7B\x5C\x7B\x5C\x73\x3F\x65\x61\x63\x68\x5C\x73\x2B\x5C\x7B\x28\x2E\x2B\x29\x5C\x7D\x5C\x73\x2B\x69\x6E\x5C\x73\x2B\x5C\x7B","\x5C\x7D\x28\x5B\x5C\x73\x5C\x53\x5D\x2A\x3F\x5B\x5E\x5C\x7D\x5C\x7D\x5D\x2A\x29\x5C\x7D\x5C\x7D","\x67\x6D","\x7B","\x7D","\x67","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x64\x69\x73\x70\x6C\x61\x79","\x73\x74\x79\x6C\x65","\x6E\x6F\x6E\x65","\x62\x6C\x6F\x63\x6B","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x61\x6C\x6C","\x2E\x2E\x2F","\x72\x6F\x6F\x74"];var preserved_request;preserved_request=document[_0x4970[1]][_0x4970[0]];console[_0x4970[3]](_0x4970[2]);var start= new Date()[_0x4970[4]]();var app=(function (){var _0xcf3ax4=this;_0xcf3ax4[_0x4970[5]]={};var _0xcf3ax5={};var start=function (){var _0xcf3ax6= new Date()[_0x4970[4]]()-start;_0xcf3ax23();} ;_0xcf3ax4[_0x4970[6]]=(function (){this[_0x4970[7]]=function (_0xcf3ax7){var _0xcf3ax8=document[_0x4970[9]](_0x4970[8]),_0xcf3ax9=[_0x4970[10],_0x4970[11],_0x4970[12]],_0xcf3axa={};for(var _0xcf3axb in _0xcf3ax8){if(_0xcf3ax9[_0x4970[14]](_0xcf3ax8[_0xcf3axb][_0x4970[13]])!=-1){_0xcf3axa[_0xcf3ax8[_0xcf3axb][_0x4970[15]]]=_0xcf3ax8[_0xcf3axb][_0x4970[16]];} ;} ;if(_0xcf3ax7){_0xcf3ax7(_0xcf3axa);} ;} ;this[_0x4970[17]];this[_0x4970[18]]=function (_0xcf3axb,_0xcf3axc,_0xcf3axd){_0xcf3axb[_0x4970[19]+_0xcf3axc]=function (_0xcf3axe){_0xcf3axf(_0xcf3axd,_0xcf3axe);} ;} ;var _0xcf3axf=function (_0xcf3ax10,_0xcf3axe){if(window[_0x4970[20]]){window[_0x4970[20]][_0x4970[21]]=true;} ;this[_0x4970[7]](function (_0xcf3axa,_0xcf3axe){if(_0xcf3ax10){_0xcf3ax10(_0xcf3axa,_0xcf3axe);} else {console[_0x4970[3]](_0x4970[22]);} ;} );} ;return {ui_ready:this[_0x4970[17]],attach:this[_0x4970[18]],get_form_data:this[_0x4970[7]]};} ());var _0xcf3ax11={root:_0x4970[23]};function _0xcf3ax12(_0xcf3ax13,_0xcf3ax14,_0xcf3ax15,_0xcf3ax7){if(_0xcf3ax25(_0xcf3ax13)){var _0xcf3ax6= new Date()[_0x4970[4]]()-start;} else {if(_0xcf3ax25(_0xcf3ax13[_0x4970[25]](_0xcf3ax15,_0xcf3ax15+_0x4970[24]))){var _0xcf3ax6= new Date()[_0x4970[4]]()-start;_0xcf3ax13=_0xcf3ax13[_0x4970[25]](_0xcf3ax15,_0xcf3ax15+_0x4970[24]);} else {var _0xcf3ax16=_0xcf3ax14+_0xcf3ax15;return ;} ;} ;var _0xcf3ax17=document[_0x4970[9]](_0x4970[26])[0];var _0xcf3ax18=document[_0x4970[28]](_0x4970[27]);_0xcf3ax18[_0x4970[29]]=_0x4970[30];_0xcf3ax18[_0x4970[31]]=_0xcf3ax13;_0xcf3ax18[_0x4970[32]]=function (){_0xcf3ax7();} ;_0xcf3ax18[_0x4970[33]]=true;_0xcf3ax17[_0x4970[34]](_0xcf3ax18);if(window[_0x4970[35]]||document[_0x4970[36]]<=8){console[_0x4970[3]](_0x4970[37]);} else {_0xcf3ax17[_0x4970[38]](_0xcf3ax18);} ;} ;function _0xcf3ax1f(_0xcf3axe){_0xcf3axe=_0xcf3axe||window[_0x4970[20]];var _0xcf3ax20=_0xcf3axe[_0x4970[45]]||_0xcf3axe[_0x4970[46]];return _0xcf3ax20;} (window[_0x4970[39]]=function (){var _0xcf3ax19,_0xcf3ax1a=/\+/g,_0xcf3ax1b=/([^&=]+)=?([^&]*)/g,_0xcf3ax1c=function (_0xcf3ax1e){return decodeURIComponent(_0xcf3ax1e[_0x4970[25]](_0xcf3ax1a,_0x4970[40]));} ,_0xcf3ax1d=window[_0x4970[43]][_0x4970[42]][_0x4970[41]](1);_0xcf3ax5={};while(_0xcf3ax19=_0xcf3ax1b[_0x4970[44]](_0xcf3ax1d)){_0xcf3ax5[_0xcf3ax1c(_0xcf3ax19[1])]=_0xcf3ax1c(_0xcf3ax19[2]);} ;} )();function _0xcf3ax21(_0xcf3ax22,_0xcf3ax19){return _0xcf3ax22[_0x4970[48]](_0xcf3ax19+_0x4970[47]);} ;var _0xcf3ax23=function (){var _0xcf3ax13=window[_0x4970[43]][_0x4970[49]],_0xcf3ax15=_0xcf3ax13[_0x4970[41]](_0xcf3ax13[_0x4970[51]](_0x4970[50])+1);_0xcf3ax15=_0xcf3ax15[_0x4970[14]](_0x4970[52])!==-1?_0xcf3ax15[_0x4970[41]](0,_0xcf3ax15[_0x4970[51]](_0x4970[52])):_0xcf3ax15;var _0xcf3ax14=_0xcf3ax13[_0x4970[41]](0,_0xcf3ax13[_0x4970[51]](_0x4970[50])+1);if(_0xcf3ax15===_0x4970[23]||_0xcf3ax15[_0x4970[53]]()===_0x4970[54]||_0xcf3ax15[_0x4970[53]]()===_0x4970[55]){_0xcf3ax15=_0x4970[56];} ;var _0xcf3ax24=_0xcf3ax14[_0x4970[41]](1)+_0xcf3ax15;_0xcf3ax4[_0x4970[5]][_0x4970[57]]=document[_0x4970[57]];_0xcf3ax4[_0x4970[58]]();} ;function _0xcf3ax25(_0xcf3ax13,_0xcf3ax7){if(_0xcf3ax13){var _0xcf3ax26= new XMLHttpRequest();_0xcf3ax26[_0x4970[60]](_0x4970[59],_0xcf3ax13,false);_0xcf3ax26[_0x4970[61]]();return _0xcf3ax26[_0x4970[62]]==200;} else {return false;} ;} ;var _0xcf3ax27=function (_0xcf3ax28){return _0xcf3ax28[_0x4970[63]]===Array;} ;_0xcf3ax4[_0x4970[58]]=function (_0xcf3ax29){var _0xcf3ax6= new Date()[_0x4970[4]]()-start;if(_0xcf3ax29!==undefined){var _0xcf3ax2a=document[_0x4970[28]](_0x4970[64]);_0xcf3ax2a[_0x4970[0]]=preserved_request;var _0xcf3ax2b=_0xcf3ax2a[_0x4970[9]](_0x4970[8]);var _0xcf3ax2c;for(var _0xcf3ax2d=0;_0xcf3ax2d<_0xcf3ax2b[_0x4970[65]];_0xcf3ax2d++){if(_0xcf3ax2b[_0xcf3ax2d][_0x4970[66]]==_0xcf3ax29){_0xcf3ax2c=_0xcf3ax2b[_0xcf3ax2d];} ;} ;req=_0xcf3ax2c[_0x4970[0]];} else {req=window[_0x4970[67]];} ;for(var _0xcf3ax2e in _0xcf3ax4[_0x4970[5]]){if(req[_0x4970[14]](_0xcf3ax2e)!==-1){var _0xcf3ax2f=_0xcf3ax4[_0x4970[5]][_0xcf3ax2e];if(_0xcf3ax4[_0x4970[5]][_0xcf3ax2e].toString()[_0x4970[14]](_0x4970[68])!=-1){req=_0xcf3ax33(_0xcf3ax2e,_0xcf3ax2f,req);} else {var _0xcf3ax30=false;if(Array[_0x4970[69]]){if(Array[_0x4970[69]](_0xcf3ax2f)){_0xcf3ax30=true;} ;} else {if(_0xcf3ax27(_0xcf3ax2f)){_0xcf3ax30=true;} ;} ;if(_0xcf3ax30===true){if(_0xcf3ax4[_0x4970[5]][_0xcf3ax2e][_0x4970[65]]===0){var _0xcf3ax31= new RegExp(_0x4970[70]+_0xcf3ax2e+_0x4970[71],_0x4970[72]);req=req[_0x4970[25]](_0xcf3ax31,_0x4970[23]);} else {req=_0xcf3ax33(_0xcf3ax2e,_0xcf3ax2f,req);} ;} else {var _0xcf3ax32= new RegExp(_0x4970[73]+_0xcf3ax2e+_0x4970[74],_0x4970[75]);req=req[_0x4970[25]](_0xcf3ax32,_0xcf3ax2f);} ;} ;} ;} ;if(_0xcf3ax29){document[_0x4970[76]](_0xcf3ax29)[_0x4970[0]]=req;} else {document[_0x4970[1]][_0x4970[0]]=req;} ;if(document[_0x4970[1]][_0x4970[78]][_0x4970[77]]===_0x4970[79]){document[_0x4970[1]][_0x4970[78]][_0x4970[77]]=_0x4970[80];} ;} ;var _0xcf3ax33=function (_0xcf3ax2e,_0xcf3ax2f,_0xcf3ax26){var _0xcf3ax34,_0xcf3ax35,_0xcf3ax36,_0xcf3ax37=Object[_0x4970[82]][_0x4970[81]];var _0xcf3ax2a= new RegExp(_0x4970[70]+_0xcf3ax2e+_0x4970[71],_0x4970[72]);var _0xcf3ax19=_0xcf3ax2a[_0x4970[44]](_0xcf3ax26);var _0xcf3ax38=_0xcf3ax19[1];var _0xcf3ax39=_0x4970[23];for(_0xcf3ax34 in _0xcf3ax2f){if(_0xcf3ax37[_0x4970[83]](_0xcf3ax2f,_0xcf3ax34)){_0xcf3ax35=_0xcf3ax2f[_0xcf3ax34];var _0xcf3ax3a=_0xcf3ax19[2];var _0xcf3ax3b=0;for(_0xcf3ax36 in _0xcf3ax35){if(_0xcf3ax37[_0x4970[83]](_0xcf3ax35,_0xcf3ax36)){_0xcf3ax3b++;_0xcf3ax3a=_0xcf3ax3a[_0x4970[25]](_0x4970[73]+_0xcf3ax38+_0x4970[52]+_0xcf3ax36+_0x4970[74],_0xcf3ax35[_0xcf3ax36]);_0xcf3ax3a=_0xcf3ax3a[_0x4970[25]](_0x4970[73]+_0xcf3ax38+_0x4970[74],_0xcf3ax35);} ;} ;_0xcf3ax39+=_0xcf3ax3a;} ;} ;return _0xcf3ax26[_0x4970[25]](_0xcf3ax2a,_0xcf3ax39);} ;var _0xcf3ax3c=function (_0xcf3ax13){var _0xcf3ax3d=_0x4970[23];while(_0xcf3ax3e(_0xcf3ax13)!=_0xcf3ax11[_0x4970[85]]){_0xcf3ax13=_0xcf3ax13[_0x4970[25]](_0xcf3ax3e(_0xcf3ax13)+_0x4970[50],_0x4970[23]);_0xcf3ax3d+=_0x4970[84];} ;if(_0xcf3ax3d===_0x4970[23]){_0xcf3ax3d=_0x4970[52];} ;return _0xcf3ax3d;} ;var _0xcf3ax3e=function (_0xcf3ax13){var _0xcf3ax15=_0xcf3ax13[_0x4970[41]](_0xcf3ax13[_0x4970[51]](_0x4970[50])+1);_0xcf3ax13=_0xcf3ax13[_0x4970[25]](_0x4970[50]+_0xcf3ax15,_0x4970[23]);return _0xcf3ax13[_0x4970[41]](_0xcf3ax13[_0x4970[51]](_0x4970[50])+1);} ;start();return {events:_0xcf3ax4[_0x4970[6]],push:_0xcf3ax4[_0x4970[58]],page_data:_0xcf3ax4[_0x4970[5]],url_data:_0xcf3ax5};} ());
pending…

You can edit these tests or add even more tests to this page by appending /edit to the URL.

Compare results of other browsers

0 comments

Add a comment