prefer &str to String for reducing allocations

pull/96/head
rhysd 5 years ago
parent 84c13f0605
commit ddf4b8ac13

@ -29,10 +29,10 @@ pub fn get_parent_node(node: &Handle) -> Handle {
parent.and_then(|node| node.upgrade()).unwrap()
}
pub fn get_node_name(node: &Handle) -> String {
pub fn get_node_name(node: &Handle) -> &'_ str {
match &node.data {
NodeData::Element { ref name, .. } => name.local.as_ref().to_string(),
_ => str!(),
NodeData::Element { ref name, .. } => name.local.as_ref(),
_ => "",
}
}
@ -95,10 +95,10 @@ pub fn walk_and_embed_assets(
for attr in attrs_mut.iter_mut() {
if &attr.name.local == "rel" {
if is_icon(&attr.value.to_string()) {
if is_icon(attr.value.as_ref()) {
link_type = "icon";
break;
} else if attr.value.to_string() == "stylesheet" {
} else if attr.value.as_ref() == "stylesheet" {
link_type = "stylesheet";
break;
}
@ -111,8 +111,8 @@ pub fn walk_and_embed_assets(
if opt_no_images {
attr.value.clear();
} else {
let href_full_url = resolve_url(&url, &attr.value.to_string())
.unwrap_or_default();
let href_full_url =
resolve_url(&url, attr.value.as_ref()).unwrap_or_default();
let (favicon_dataurl, _) = retrieve_asset(
cache,
client,
@ -133,8 +133,8 @@ pub fn walk_and_embed_assets(
if opt_no_css {
attr.value.clear();
} else {
let href_full_url = resolve_url(&url, &attr.value.to_string())
.unwrap_or_default();
let href_full_url =
resolve_url(&url, &attr.value.as_ref()).unwrap_or_default();
let replacement_text = match retrieve_asset(
cache,
client,
@ -172,7 +172,7 @@ pub fn walk_and_embed_assets(
for attr in attrs_mut.iter_mut() {
if &attr.name.local == "href" {
let href_full_url =
resolve_url(&url, &attr.value.to_string()).unwrap_or_default();
resolve_url(&url, attr.value.as_ref()).unwrap_or_default();
attr.value.clear();
attr.value.push_slice(&href_full_url.as_str());
}
@ -230,8 +230,8 @@ pub fn walk_and_embed_assets(
let attr_name: &str = &attr.name.local;
if attr_name == "src" {
let src_full_url: String = resolve_url(&url, &attr.value.to_string())
.unwrap_or(attr.value.to_string());
let src_full_url: String = resolve_url(&url, attr.value.as_ref())
.unwrap_or_else(|_| attr.value.to_string());
attr.value.clear();
attr.value.push_slice(src_full_url.as_str());
} else if attr_name == "srcset" {
@ -241,8 +241,7 @@ pub fn walk_and_embed_assets(
attr.value.push_slice(TRANSPARENT_PIXEL);
} else {
let srcset_full_url: String =
resolve_url(&url, &attr.value.to_string())
.unwrap_or_default();
resolve_url(&url, attr.value.as_ref()).unwrap_or_default();
let (source_dataurl, _) = retrieve_asset(
cache,
client,
@ -268,7 +267,7 @@ pub fn walk_and_embed_assets(
}
let href_full_url: String =
resolve_url(&url, &attr.value.to_string()).unwrap_or_default();
resolve_url(&url, attr.value.as_ref()).unwrap_or_default();
attr.value.clear();
attr.value.push_slice(href_full_url.as_str());
}
@ -297,8 +296,8 @@ pub fn walk_and_embed_assets(
} else {
for attr in attrs_mut.iter_mut() {
if &attr.name.local == "src" {
let src_full_url: String =
resolve_url(&url, &attr.value.to_string()).unwrap_or_default();
let src_full_url =
resolve_url(&url, attr.value.as_ref()).unwrap_or_default();
let (js_dataurl, _) = retrieve_asset(
cache,
client,
@ -342,8 +341,8 @@ pub fn walk_and_embed_assets(
if &attr.name.local == "action" {
// Modify action to be a full URL
if !is_valid_url(&attr.value) {
let href_full_url: String =
resolve_url(&url, &attr.value.to_string()).unwrap_or_default();
let href_full_url =
resolve_url(&url, attr.value.as_ref()).unwrap_or_default();
attr.value.clear();
attr.value.push_slice(href_full_url.as_str());
}
@ -359,15 +358,14 @@ pub fn walk_and_embed_assets(
continue;
}
let iframe_src: String = attr.value.to_string();
let iframe_src = attr.value.as_ref();
// Ignore iframes with empty source (they cause infinite loops)
if iframe_src == str!() {
if iframe_src.is_empty() {
continue;
}
let src_full_url: String =
resolve_url(&url, &iframe_src).unwrap_or_default();
let src_full_url = resolve_url(&url, iframe_src).unwrap_or_default();
let (iframe_data, iframe_final_url) = retrieve_asset(
cache,
client,
@ -400,10 +398,10 @@ pub fn walk_and_embed_assets(
"video" => {
for attr in attrs_mut.iter_mut() {
if &attr.name.local == "poster" {
let video_poster = attr.value.to_string();
let video_poster = attr.value.as_ref();
// Skip posters with empty source
if video_poster == str!() {
if video_poster.is_empty() {
continue;
}
@ -411,7 +409,7 @@ pub fn walk_and_embed_assets(
attr.value.clear();
} else {
let poster_full_url =
resolve_url(&url, &video_poster).unwrap_or_default();
resolve_url(&url, video_poster).unwrap_or_default();
let (poster_dataurl, _) = retrieve_asset(
cache,
client,
@ -556,7 +554,6 @@ pub fn stringify_document(
if opt_no_images {
content_attr += " img-src data:;";
}
content_attr = content_attr.trim().to_string();
let meta = dom.create_element(
QualName::new(None, ns!(), local_name!("meta")),
@ -567,7 +564,7 @@ pub fn stringify_document(
},
Attribute {
name: QualName::new(None, ns!(), local_name!("content")),
value: format_tendril!("{}", content_attr),
value: format_tendril!("{}", content_attr.trim()),
},
],
Default::default(),

Loading…
Cancel
Save