티스토리 뷰

728x90
반응형

Rust Wasm 속도 이슈 정리

러스트에서 자바스크립트로 값을 주고 받을 수 있는 데이터형

JavascriptRust비고

number 정수형(i32, u32.. 등)  
string 문자열(String)  
Object 엄밀하게 말하면 받을 수 없다. serde_derive, serde_json 등을 활용
Array(Object) vec[]  
Uint8Array &[u8] new Uint8Array(await imageBlob.arrayBuffer());

Input 값이 숫자일 때

#[wasm_bindgen[js_name = "isPrime"]]
pub fn is_prime(num: i32) -> bool {
	let mut i = 2;
	let mut result = false;
	loop {
		if num % i == 0 {
			result = false;
		}
		result = true;
		if i * i <= num {
			break;
		}
		i = i + 1;
	}
	result
}
Copy

결과

input:33550336;
wasm-rust: 0.021240234375 ms
javscript: 0.22509765625 ms
wasm-rust(num:JSValue) 0.11181640625ms
Copy

결론

JSValue로 자바스크립트의 값을 받아올 수 있지만(문자, 숫자 상관없이) 그렇게 되면 JS를 한번 더 호출하는 과정이 생기면서 느려진다. 왠만하면 JSValue는 사용을 지양해야 한다.

Object 처리

data

let arrayOfObjects = [
	{ name: "hello world", id: "99", parent_id: "88" },
	{ name: "hello world2", id: "88", parent_id: "12" },
	{ name: "hello world3", id: "77", parent_id: "88" },
];
Copy

JSValue(arrayOfObjects)로 받는 경우

pub fn object(js_objects: &JsValue) -> i32 {
	let elements: Vec<Element> = js_objects.into_serde().unwrap();
	elements
		.iter()
		.map(|e| {
			let id = e.id.parse::<i32>().unwrap_or(0);
			let parent_id = e.parent_id.parse::<i32>().unwrap_or(0);
			id + parent_id
		})
		.sum()
}
Copy

Wasm-Test: 0.304931640625 ms

str(JSON.stringify(arrayOfObjects)로 받는 경우

pub fn str(js_objects: &str) -> i32 {
	let elements: Vec<Element> = serde_json::from_str(js_objects).unwrap();
  ...
}
Copy

Wasm-Test: 0.304931640625 ms

Javascript

const result = arrayOfObjects.reduce((prev, curr) => {
	return prev + parseInt(curr.id) + parseInt(curr.parent_id);
}, 0);
Copy

sum: 0.01416015625 ms

결론

물론 계속 개선되어가고 있는 프로젝트이고,
대부분의 브라우저에서 지원할만큼 오픈소스 진영에서도 주목 받고 있기 떄문에 언젠가는 큰 차이가 없거나 더 좋은 속도로 개선될것이라고는 생각한다.
object를 반복하여 값을 빼거나 출력하거나 필터링 하는 경우
그냥 자바스크립트가 더 빠르다.

한줄요약

Javascript 객체는 Javascript 객체가 더 빠르게 처리한다.

 
728x90

'프로그래밍 > WebAssembly' 카테고리의 다른 글

WebAssembly에 대한 잡담  (0) 2022.09.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함