Optimize Node.normalize().

Do not copy the discarded node's text data, borrow it.

Closes #6658.
This commit is contained in:
Michael Howell 2015-07-19 17:44:48 -07:00
parent 36d732a60a
commit 402a2a8717
2 changed files with 7 additions and 3 deletions

View file

@ -79,7 +79,7 @@ impl<'a> CharacterDataMethods for &'a CharacterData {
// https://dom.spec.whatwg.org/#dom-characterdata-appenddatadata // https://dom.spec.whatwg.org/#dom-characterdata-appenddatadata
fn AppendData(self, data: DOMString) { fn AppendData(self, data: DOMString) {
self.data.borrow_mut().push_str(&data); self.append_data(&*data);
} }
// https://dom.spec.whatwg.org/#dom-characterdata-insertdataoffset-data // https://dom.spec.whatwg.org/#dom-characterdata-insertdataoffset-data
@ -159,6 +159,7 @@ pub enum CharacterDataTypeId {
pub trait CharacterDataHelpers<'a> { pub trait CharacterDataHelpers<'a> {
fn data(self) -> Ref<'a, DOMString>; fn data(self) -> Ref<'a, DOMString>;
fn append_data(self, data: &str);
} }
impl<'a> CharacterDataHelpers<'a> for &'a CharacterData { impl<'a> CharacterDataHelpers<'a> for &'a CharacterData {
@ -166,6 +167,10 @@ impl<'a> CharacterDataHelpers<'a> for &'a CharacterData {
fn data(self) -> Ref<'a, DOMString> { fn data(self) -> Ref<'a, DOMString> {
self.data.borrow() self.data.borrow()
} }
#[inline]
fn append_data(self, data: &str) {
self.data.borrow_mut().push_str(data)
}
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]

View file

@ -2330,10 +2330,9 @@ impl<'a> NodeMethods for &'a Node {
} else { } else {
match prev_text { match prev_text {
Some(ref text_node) => { Some(ref text_node) => {
let text_node = text_node.clone();
let prev_characterdata = let prev_characterdata =
CharacterDataCast::from_ref(text_node.r()); CharacterDataCast::from_ref(text_node.r());
let _ = prev_characterdata.AppendData(characterdata.Data()); prev_characterdata.append_data(&**characterdata.data());
self.remove_child(child.r()); self.remove_child(child.r());
}, },
None => prev_text = Some(Root::from_ref(text)) None => prev_text = Some(Root::from_ref(text))