(New page: Test) |
|||
Line 1: | Line 1: | ||
− | + | == Script Block == | |
+ | |||
+ | <pre> | ||
+ | window.onload = function() | ||
+ | { | ||
+ | var repetitions = 1000 ; | ||
+ | |||
+ | var t = new Date() ; | ||
+ | |||
+ | for ( var i = 0 ; i < repetitions ; i++ ) | ||
+ | PureDom() ; | ||
+ | |||
+ | t = ( ( new Date ) - t ) ; | ||
+ | |||
+ | var html = '<p>Pure DOM: ' + t + ' ms.</p>' ; | ||
+ | |||
+ | t = new Date() ; | ||
+ | |||
+ | for ( var i = 0 ; i < repetitions ; i++ ) | ||
+ | DomAbstraction() ; | ||
+ | |||
+ | t = ( ( new Date ) - t ) ; | ||
+ | |||
+ | html += '<p>DOM Abstraction: ' + t + ' ms.</p>' ; | ||
+ | |||
+ | document.body.innerHTML = html ; | ||
+ | } | ||
+ | |||
+ | function PureDom() | ||
+ | { | ||
+ | var p = ( document.parentWindow || document.defaultView ).document.body.firstChild ; | ||
+ | // var p = document.body.firstChild ; | ||
+ | |||
+ | var current = p.firstChild ; | ||
+ | |||
+ | var name ; | ||
+ | while ( current ) | ||
+ | { | ||
+ | if ( current.nodeType == 1 ) | ||
+ | { | ||
+ | name = current.nodeName.toLowerCase() ; | ||
+ | name = current.ownerDocument.body.firstChild.nodeName.toLowerCase() ; | ||
+ | } | ||
+ | else if ( current.nodeType == 3 ) | ||
+ | name = current.nodeValue ; | ||
+ | |||
+ | current = current.nextSibling ; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function DomAbstraction() | ||
+ | { | ||
+ | var p = (new DOM.Document(document)).getWindow().getDocument().getBody().getFirst() ; | ||
+ | // var p = new DOM.Element(document.body.firstChild) ; | ||
+ | |||
+ | var current = p.getFirst() ; | ||
+ | |||
+ | var name ; | ||
+ | while ( current ) | ||
+ | { | ||
+ | if ( current.isElement ) | ||
+ | { | ||
+ | name = current.getName() ; | ||
+ | name = current.getDocument().getBody().getFirst().getName() ; | ||
+ | } | ||
+ | else if ( current.isText ) | ||
+ | name = current.getText() ; | ||
+ | |||
+ | current = current.getNext() ; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | var DOM = | ||
+ | { | ||
+ | Window : (function() | ||
+ | { | ||
+ | var classImpl = function( domWindow ) | ||
+ | { | ||
+ | this._W = domWindow ; | ||
+ | } | ||
+ | |||
+ | classImpl.prototype = | ||
+ | { | ||
+ | getDocument : function() | ||
+ | { | ||
+ | return this._document || ( this._document = new DOM.Document( this._W.document ) ) ; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return classImpl ; | ||
+ | })(), | ||
+ | |||
+ | Document : (function() | ||
+ | { | ||
+ | var classImpl = function( domDocument ) | ||
+ | { | ||
+ | this._D = domDocument ; | ||
+ | } | ||
+ | |||
+ | classImpl.prototype = | ||
+ | { | ||
+ | getWindow : function() | ||
+ | { | ||
+ | return this._window || ( this._window = new DOM.Window( this._D.parentWindow || this._D.defaultView ) ) ; | ||
+ | }, | ||
+ | |||
+ | getBody : function() | ||
+ | { | ||
+ | return this._body || ( this._body = new DOM.Element( this._D.body ) ) ; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return classImpl ; | ||
+ | })(), | ||
+ | |||
+ | Element : (function() | ||
+ | { | ||
+ | var classImpl = function( domElement ) | ||
+ | { | ||
+ | this._E = domElement ; | ||
+ | } | ||
+ | |||
+ | classImpl.prototype = | ||
+ | { | ||
+ | isElement : true, | ||
+ | |||
+ | getDocument : function() | ||
+ | { | ||
+ | return this._document || ( this._document = new DOM.Document( this._E.ownerDocument ) ) ; | ||
+ | }, | ||
+ | |||
+ | getFirst : function() | ||
+ | { | ||
+ | return DOM.getNode( this._E.firstChild ) ; | ||
+ | }, | ||
+ | |||
+ | getNext : function() | ||
+ | { | ||
+ | return DOM.getNode( this._E.nextSibling ) ; | ||
+ | }, | ||
+ | |||
+ | getName : function() | ||
+ | { | ||
+ | return this._name || ( this._name = this._E.nodeName.toLowerCase() ) ; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return classImpl ; | ||
+ | })(), | ||
+ | |||
+ | Text : (function() | ||
+ | { | ||
+ | var classImpl = function( domTextNode ) | ||
+ | { | ||
+ | this._T = domTextNode ; | ||
+ | } | ||
+ | |||
+ | classImpl.prototype = | ||
+ | { | ||
+ | isText : true, | ||
+ | |||
+ | getNext : function() | ||
+ | { | ||
+ | return DOM.getNode( this._T.nextSibling ) ; | ||
+ | }, | ||
+ | |||
+ | getText : function() | ||
+ | { | ||
+ | return this._T.nodeValue ; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return classImpl ; | ||
+ | })(), | ||
+ | |||
+ | getNode : function( domNode ) | ||
+ | { | ||
+ | if ( domNode ) | ||
+ | { | ||
+ | if ( domNode.nodeType == 1 ) | ||
+ | return new DOM.Element( domNode ) ; | ||
+ | else | ||
+ | return new DOM.Text( domNode ) ; | ||
+ | } | ||
+ | |||
+ | return null ; | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | == Body Contents == | ||
+ | |||
+ | <pre> | ||
+ | <body><p>This is <b>some</b> sample <i>text</i>.</p></body> | ||
+ | </pre> |
Latest revision as of 13:31, 20 February 2008
Script Block
window.onload = function() { var repetitions = 1000 ; var t = new Date() ; for ( var i = 0 ; i < repetitions ; i++ ) PureDom() ; t = ( ( new Date ) - t ) ; var html = '<p>Pure DOM: ' + t + ' ms.</p>' ; t = new Date() ; for ( var i = 0 ; i < repetitions ; i++ ) DomAbstraction() ; t = ( ( new Date ) - t ) ; html += '<p>DOM Abstraction: ' + t + ' ms.</p>' ; document.body.innerHTML = html ; } function PureDom() { var p = ( document.parentWindow || document.defaultView ).document.body.firstChild ; // var p = document.body.firstChild ; var current = p.firstChild ; var name ; while ( current ) { if ( current.nodeType == 1 ) { name = current.nodeName.toLowerCase() ; name = current.ownerDocument.body.firstChild.nodeName.toLowerCase() ; } else if ( current.nodeType == 3 ) name = current.nodeValue ; current = current.nextSibling ; } } function DomAbstraction() { var p = (new DOM.Document(document)).getWindow().getDocument().getBody().getFirst() ; // var p = new DOM.Element(document.body.firstChild) ; var current = p.getFirst() ; var name ; while ( current ) { if ( current.isElement ) { name = current.getName() ; name = current.getDocument().getBody().getFirst().getName() ; } else if ( current.isText ) name = current.getText() ; current = current.getNext() ; } } var DOM = { Window : (function() { var classImpl = function( domWindow ) { this._W = domWindow ; } classImpl.prototype = { getDocument : function() { return this._document || ( this._document = new DOM.Document( this._W.document ) ) ; } } return classImpl ; })(), Document : (function() { var classImpl = function( domDocument ) { this._D = domDocument ; } classImpl.prototype = { getWindow : function() { return this._window || ( this._window = new DOM.Window( this._D.parentWindow || this._D.defaultView ) ) ; }, getBody : function() { return this._body || ( this._body = new DOM.Element( this._D.body ) ) ; } } return classImpl ; })(), Element : (function() { var classImpl = function( domElement ) { this._E = domElement ; } classImpl.prototype = { isElement : true, getDocument : function() { return this._document || ( this._document = new DOM.Document( this._E.ownerDocument ) ) ; }, getFirst : function() { return DOM.getNode( this._E.firstChild ) ; }, getNext : function() { return DOM.getNode( this._E.nextSibling ) ; }, getName : function() { return this._name || ( this._name = this._E.nodeName.toLowerCase() ) ; } } return classImpl ; })(), Text : (function() { var classImpl = function( domTextNode ) { this._T = domTextNode ; } classImpl.prototype = { isText : true, getNext : function() { return DOM.getNode( this._T.nextSibling ) ; }, getText : function() { return this._T.nodeValue ; } } return classImpl ; })(), getNode : function( domNode ) { if ( domNode ) { if ( domNode.nodeType == 1 ) return new DOM.Element( domNode ) ; else return new DOM.Text( domNode ) ; } return null ; } }
Body Contents
<body><p>This is <b>some</b> sample <i>text</i>.</p></body>