[Lxml-checkins] r49958 - in lxml/trunk: . doc src/lxml
scoder at codespeak.net
scoder at codespeak.net
Thu Dec 20 18:32:36 CET 2007
Author: scoder
Date: Thu Dec 20 18:32:36 2007
New Revision: 49958
Modified:
lxml/trunk/ (props changed)
lxml/trunk/doc/performance.txt
lxml/trunk/src/lxml/classlookup.pxi
Log:
r3166 at delle: sbehnel | 2007-12-20 18:32:27 +0100
tiny speedup in element instantiation
Modified: lxml/trunk/doc/performance.txt
==============================================================================
--- lxml/trunk/doc/performance.txt (original)
+++ lxml/trunk/doc/performance.txt Thu Dec 20 18:32:36 2007
@@ -203,7 +203,7 @@
T1: 0.0914 0.0875 0.0872 0.0892 0.0882 0.0900
T2: 0.0894 0.0897 0.0892 0.0988 0.0978 0.0974
T3: 0.0219 0.0194 0.0189 0.0570 0.0570 0.0573
- T4: 0.0004 0.0004 0.0004 0.0012 0.0013 0.0012
+ T4: 0.0004 0.0003 0.0003 0.0012 0.0012 0.0012
cET: -- S- U- -A SA UA
T1: 0.0272 0.0264 0.0267 0.0268 0.0261 0.0265
T2: 0.0280 0.0274 0.0273 0.0273 0.0276 0.0275
@@ -367,19 +367,19 @@
especially if few elements are of interest or the target element tag name is
known, lxml is a good choice::
- lxe: getiterator_all (--TR T1) 6.0360 msec/pass
+ lxe: getiterator_all (--TR T1) 5.8582 msec/pass
cET: getiterator_all (--TR T1) 39.9489 msec/pass
ET : getiterator_all (--TR T1) 23.0000 msec/pass
- lxe: getiterator_islice (--TR T2) 0.0851 msec/pass
+ lxe: getiterator_islice (--TR T2) 0.0780 msec/pass
cET: getiterator_islice (--TR T2) 0.3440 msec/pass
ET : getiterator_islice (--TR T2) 0.2429 msec/pass
- lxe: getiterator_tag (--TR T2) 0.3290 msec/pass
+ lxe: getiterator_tag (--TR T2) 0.3119 msec/pass
cET: getiterator_tag (--TR T2) 14.1001 msec/pass
ET : getiterator_tag (--TR T2) 7.4241 msec/pass
- lxe: getiterator_tag_all (--TR T2) 0.7281 msec/pass
+ lxe: getiterator_tag_all (--TR T2) 0.6540 msec/pass
cET: getiterator_tag_all (--TR T2) 40.7901 msec/pass
ET : getiterator_tag_all (--TR T2) 21.0390 msec/pass
Modified: lxml/trunk/src/lxml/classlookup.pxi
==============================================================================
--- lxml/trunk/src/lxml/classlookup.pxi (original)
+++ lxml/trunk/src/lxml/classlookup.pxi Thu Dec 20 18:32:36 2007
@@ -102,49 +102,50 @@
def __init__(self, element=None, comment=None, pi=None, entity=None):
self._lookup_function = _lookupDefaultElementClass
if element is None:
- self.element_class = None
+ self.element_class = _Element
elif issubclass(element, ElementBase):
self.element_class = element
else:
raise TypeError, "element class must be subclass of ElementBase"
if comment is None:
- self.comment_class = None
+ self.comment_class = _Comment
elif issubclass(comment, CommentBase):
self.comment_class = comment
else:
raise TypeError, "comment class must be subclass of CommentBase"
- if pi is None:
- self.pi_class = None
- elif issubclass(pi, PIBase):
- self.pi_class = pi
- else:
- raise TypeError, "PI class must be subclass of PIBase"
-
if entity is None:
- self.entity_class = None
+ self.entity_class = _Entity
elif issubclass(entity, EntityBase):
self.entity_class = entity
else:
raise TypeError, "Entity class must be subclass of EntityBase"
+ if pi is None:
+ self.pi_class = None # special case, see below
+ elif issubclass(pi, PIBase):
+ self.pi_class = pi
+ else:
+ raise TypeError, "PI class must be subclass of PIBase"
+
cdef object _lookupDefaultElementClass(state, _Document _doc, xmlNode* c_node):
"Trivial class lookup function that always returns the default class."
if c_node.type == tree.XML_ELEMENT_NODE:
if state is not None:
- cls = (<ElementDefaultClassLookup>state).element_class
- if cls is None:
- return _Element
+ return (<ElementDefaultClassLookup>state).element_class
else:
- return cls
+ return _Element
elif c_node.type == tree.XML_COMMENT_NODE:
if state is not None:
- cls = (<ElementDefaultClassLookup>state).comment_class
- if cls is None:
+ return (<ElementDefaultClassLookup>state).comment_class
+ else:
return _Comment
+ elif c_node.type == tree.XML_ENTITY_REF_NODE:
+ if state is not None:
+ return (<ElementDefaultClassLookup>state).entity_class
else:
- return cls
+ return _Entity
elif c_node.type == tree.XML_PI_NODE:
if state is not None:
cls = (<ElementDefaultClassLookup>state).pi_class
@@ -158,13 +159,6 @@
return _ProcessingInstruction
else:
return cls
- elif c_node.type == tree.XML_ENTITY_REF_NODE:
- if state is not None:
- cls = (<ElementDefaultClassLookup>state).entity_class
- if cls is None:
- return _Entity
- else:
- return cls
else:
assert 0, "Unknown node type: %s" % c_node.type
@@ -220,12 +214,10 @@
self._lookup_function = _parser_class_lookup
cdef object _parser_class_lookup(state, _Document doc, xmlNode* c_node):
- cdef FallbackElementClassLookup lookup
- lookup = <FallbackElementClassLookup>state
if doc._parser._class_lookup is not None:
return doc._parser._class_lookup._lookup_function(
doc._parser._class_lookup, doc, c_node)
- return lookup._callFallback(doc, c_node)
+ return (<FallbackElementClassLookup>state)._callFallback(doc, c_node)
cdef class CustomElementClassLookup(FallbackElementClassLookup):
More information about the lxml-checkins
mailing list