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

Loading…
Cancel
Save