prefer &str to String for reducing allocations
This commit is contained in:
parent
84c13f0605
commit
ddf4b8ac13
53
src/html.rs
53
src/html.rs
|
@ -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…
Reference in New Issue