Merge pull request #2633 from GuillaumeGomez/speed-up-loading
Speed up search index loading
This commit is contained in:
commit
14aeb0cb83
3 changed files with 15 additions and 7 deletions
|
|
@ -3,7 +3,7 @@
|
|||
/* global Mark, elasticlunr, path_to_root */
|
||||
|
||||
window.search = window.search || {};
|
||||
(function search(search) {
|
||||
(function search() {
|
||||
// Search functionality
|
||||
//
|
||||
// You can use !hasFocus() to prevent keyhandling in your key
|
||||
|
|
@ -289,6 +289,9 @@ window.search = window.search || {};
|
|||
|
||||
// If reloaded, do the search or mark again, depending on the current url parameters
|
||||
doSearchOrMarkFromUrl();
|
||||
|
||||
// Exported functions
|
||||
config.hasFocus = hasFocus;
|
||||
}
|
||||
|
||||
function unfocusSearchbar() {
|
||||
|
|
@ -522,6 +525,4 @@ window.search = window.search || {};
|
|||
|
||||
loadScript(path_to_root + '{{ resource "searchindex.js" }}', 'search-index');
|
||||
|
||||
// Exported functions
|
||||
search.hasFocus = hasFocus;
|
||||
})(window.search);
|
||||
|
|
|
|||
|
|
@ -66,7 +66,13 @@ pub fn create_files(
|
|||
if search_config.copy_js {
|
||||
static_files.add_builtin(
|
||||
"searchindex.js",
|
||||
format!("Object.assign(window.search, {});", index).as_bytes(),
|
||||
// To reduce the size of the generated JSON by preventing all `"` characters to be
|
||||
// escaped, we instead surround the string with much less common `'` character.
|
||||
format!(
|
||||
"window.search = JSON.parse('{}');",
|
||||
index.replace("\\", "\\\\").replace("'", "\\'")
|
||||
)
|
||||
.as_bytes(),
|
||||
);
|
||||
static_files.add_builtin("searcher.js", searcher::JS);
|
||||
static_files.add_builtin("mark.min.js", searcher::MARK_JS);
|
||||
|
|
|
|||
|
|
@ -773,9 +773,10 @@ mod search {
|
|||
fn read_book_index(root: &Path) -> serde_json::Value {
|
||||
let index = root.join("book/searchindex.js");
|
||||
let index = fs::read_to_string(index).unwrap();
|
||||
let index = index.trim_start_matches("Object.assign(window.search, ");
|
||||
let index = index.trim_end_matches(");");
|
||||
serde_json::from_str(index).unwrap()
|
||||
let index = index.trim_start_matches("window.search = JSON.parse('");
|
||||
let index = index.trim_end_matches("');");
|
||||
// We need unescape the string as it's supposed to be an escaped JS string.
|
||||
serde_json::from_str(&index.replace("\\'", "'").replace("\\\\", "\\")).unwrap()
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue