Skip to content

Commit

Permalink
Group search performance statements under perf feature
Browse files Browse the repository at this point in the history
  • Loading branch information
ang-zeyu committed Dec 13, 2021
1 parent 766ae83 commit 87b807d
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 48 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"scripts": {
"setup": "npm install && lerna bootstrap",
"dev": "webpack-cli serve --config ./webpack.dev.js",
"devPerf": "webpack-cli serve --config ./webpack.dev.js --env perf",
"devDocs": "cd docs && mdbook serve -p 8000",
"devDocsFull": "npm run installIndexer && npm run buildSearch && npm run installMdbook && npm run devDocs",
"buildDocs": "cd docs && mdbook build",
Expand Down
1 change: 1 addition & 0 deletions packages/morsels_search/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ default = ["lang_ascii"]
lang_ascii = ["morsels_lang_ascii"]
lang_latin = ["morsels_lang_latin"]
lang_chinese = ["morsels_lang_chinese"]
perf = []

[dependencies]
byteorder = "1"
Expand Down
12 changes: 8 additions & 4 deletions packages/morsels_search/src/dictionary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,10 @@ impl PartialOrd for TermWeightPair {
pub async fn setup_dictionary(url: &str, num_docs: u32, build_trigram: bool) -> Result<Dictionary, JsValue> {
let window: web_sys::Window = js_sys::global().unchecked_into();

/* let performance = window.performance().unwrap();
let start = performance.now(); */
#[cfg(feature = "perf")]
let performance = window.performance().unwrap();
#[cfg(feature = "perf")]
let start = performance.now();

let (table_resp_value, string_resp_value) = join!(
JsFuture::from(window.fetch_with_str(&(url.to_owned() + DICTIONARY_TABLE_FILE_NAME))),
Expand All @@ -71,11 +73,13 @@ pub async fn setup_dictionary(url: &str, num_docs: u32, build_trigram: bool) ->
let table_vec = js_sys::Uint8Array::new(&table_array_buffer.unwrap()).to_vec();
let string_vec = js_sys::Uint8Array::new(&string_array_buffer.unwrap()).to_vec();

// web_sys::console::log_1(&format!("Dictionary table and string retrieval took {} {} {}", performance.now() - start, table_vec.len(), string_vec.len()).into());
#[cfg(feature = "perf")]
web_sys::console::log_1(&format!("Dictionary table and string retrieval took {} {} {}", performance.now() - start, table_vec.len(), string_vec.len()).into());

let dictionary = dictionary::setup_dictionary(table_vec, string_vec, num_docs, build_trigram);

// web_sys::console::log_1(&format!("Dictionary initial setup took {}", performance.now() - start).into());
#[cfg(feature = "perf")]
web_sys::console::log_1(&format!("Dictionary initial setup took {}", performance.now() - start).into());

Ok(dictionary)
}
Expand Down
26 changes: 17 additions & 9 deletions packages/morsels_search/src/searcher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,14 +162,18 @@ fn get_searched_terms(query_parts: &[QueryPart], seen: &mut HashSet<String>, res
#[allow(dead_code)]
#[wasm_bindgen]
pub async fn get_query(searcher: *const Searcher, query: String) -> Result<query::Query, JsValue> {
/* let window: web_sys::Window = js_sys::global().unchecked_into();
let performance = window.performance().unwrap();
let start = performance.now();
*/
#[cfg(feature = "perf")]
let window: web_sys::Window = js_sys::global().unchecked_into();
#[cfg(feature = "perf")]
let performance = window.performance().unwrap();
#[cfg(feature = "perf")]
let start = performance.now();

let searcher_val = unsafe { &*searcher };
let mut query_parts = parse_query(query, &*searcher_val.tokenizer);

// web_sys::console::log_1(&format!("parse query took {}", performance.now() - start).into());
#[cfg(feature = "perf")]
web_sys::console::log_1(&format!("parse query took {}", performance.now() - start).into());

let is_free_text_query = query_parts.iter().all(|query_part| {
if let QueryPartType::Term = query_part.part_type {
Expand All @@ -181,22 +185,26 @@ pub async fn get_query(searcher: *const Searcher, query: String) -> Result<query

searcher_val.preprocess(&mut query_parts, is_free_text_query);

// web_sys::console::log_1(&format!("Preprocess took {}, is_free_text_query {}", performance.now() - start, is_free_text_query).into());
#[cfg(feature = "perf")]
web_sys::console::log_1(&format!("Preprocess took {}, is_free_text_query {}", performance.now() - start, is_free_text_query).into());

let term_pls = searcher_val.populate_term_pls(&mut query_parts).await?;

// web_sys::console::log_1(&format!("Population took {}", performance.now() - start).into());
#[cfg(feature = "perf")]
web_sys::console::log_1(&format!("Population took {}", performance.now() - start).into());

let pls = searcher_val.process(&mut query_parts, term_pls);

// web_sys::console::log_1(&format!("Process took {}", performance.now() - start).into());
#[cfg(feature = "perf")]
web_sys::console::log_1(&format!("Process took {}", performance.now() - start).into());

let mut searched_terms: Vec<String> = Vec::new();
get_searched_terms(&query_parts, &mut HashSet::new(), &mut searched_terms);

let query = searcher_val.create_query(10, searched_terms, query_parts, pls, is_free_text_query);

// web_sys::console::log_1(&format!("Ranking took {}", performance.now() - start).into());
#[cfg(feature = "perf")]
web_sys::console::log_1(&format!("Ranking took {}", performance.now() - start).into());

Ok(query)
}
Expand Down
75 changes: 42 additions & 33 deletions webpack.common.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,49 @@ const path = require('path');

const { version } = require('./packages/search/package.json');

module.exports = {
entry: {
'search-ui': {
import: './packages/search-ui/src/search.ts',
filename: 'search-ui.bundle.js',
library: {
name: 'initMorsels',
type: 'umd',
export: 'default',
module.exports = (env) => {
return {
entry: {
'search-ui': {
import: path.resolve(__dirname, 'packages/search-ui/src/search.ts'),
filename: 'search-ui.bundle.js',
library: {
name: 'initMorsels',
type: 'umd',
export: 'default',
},
},
},
},
experiments: {
asyncWebAssembly: true,
},
resolve: {
extensions: ['.ts', '.tsx', '.js'],
},
module: {
rules: [
{
test: /\.tsx?$/,
use: ['ts-loader'],
},
experiments: {
asyncWebAssembly: true,
},
resolve: {
extensions: ['.ts', '.tsx', '.js'],
},
module: {
rules: [
{
test: /\.tsx?$/,
use: ['ts-loader'],
},
],
},
plugins: [
!env.perf
? new WasmPackPlugin({
crateDirectory: path.resolve(__dirname, './packages/morsels_search'),
extraArgs: '-- --no-default-features --features lang_ascii',
outDir: path.resolve(__dirname, './packages/morsels_search/pkg/lang_ascii'),
})
: new WasmPackPlugin({
crateDirectory: path.resolve(__dirname, './packages/morsels_search'),
extraArgs: '-- --no-default-features --features lang_ascii,perf',
forceMode: 'production',
outDir: path.resolve(__dirname, './packages/morsels_search/pkg/lang_ascii'),
}),
new DefinePlugin({
MORSELS_VERSION: `'${version}'`,
}),
],
},
plugins: [
new WasmPackPlugin({
crateDirectory: path.resolve(__dirname, './packages/morsels_search'),
extraArgs: '-- --no-default-features --features lang_ascii',
outDir: path.resolve(__dirname, './packages/morsels_search/pkg/lang_ascii'),
}),
new DefinePlugin({
MORSELS_VERSION: `'${version}'`,
}),
],
};
};
2 changes: 1 addition & 1 deletion webpack.dev.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const { merge } = require('webpack-merge');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const common = require('./webpack.common');

module.exports = merge(common, {
module.exports = (env) => merge(common(env), {
mode: 'development',
devtool: 'inline-source-map',
devServer: {
Expand Down
2 changes: 1 addition & 1 deletion webpack.prod.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const TerserPlugin = require('terser-webpack-plugin');
const WasmPackPlugin = require('@wasm-tool/wasm-pack-plugin');
const common = require('./webpack.common');

module.exports = merge(common, {
module.exports = (env) => merge(common(env), {
mode: 'production',
output: {
filename: '[name].bundle.js',
Expand Down

0 comments on commit 87b807d

Please sign in to comment.