Моя функция фильтра JS:
Код: Выделить всё
function filter(array: Obj[], criteria: Filter, additionalArr: number[]){
//Filter....
}
Код: Выделить всё
#include
#include
struct Filter {
vector f1;
vector f2;
vector f3;
Filter(): f1({}), f2({}), f3({}) {}
Filter(vector f1, vector f2, vector f3) :
f1(f1), f2(f2), f3(f3) {}
};
struct Obj {
int p1;
int p2;
string p3;
Obj (): p1(0), p2(0), p3("") {}
Obj (int p1, int p2, string p3) :
p1(p1), p2(p2), f3(p3) {}
}
Obj processObj(emscripten::val jsObj){
Obj wasmObj = new Obj();
wasmObj.p1 = jsObj["p1"].as();
wasmObj.p2 = jsObj["p2"].as();
wasmObj.p3 = jsObj["p3"].as();
return wasmObj;
}
Filter processFilter(emscripten::val jsFilter){
//Similar to processObj
}
bool filterOneObj(Obj obj, Filter criterias, vector additionalArr) {
//Filter one obj base on criterias and additionalArr
}
emscripten::val wasmFilter(emscripten::val objJS, emscripten::val criteriaJS, emscripten:: val additionalArrJS) {
vector result;
Filter wasmFilter = processFilter(criteriaJS);
for(size_t i = 0; i < objJS["length"].as(); i++) {
if(filterOneObj()) result.push_back(objJS[i]["p1"].as());
}
return val::array(result);
}
EMSCRIPTEN_BINDINGS(module) {
class_("WasmFilter")
.constructor
.property("f1", &Filter::f1)
.property("f2", &Filter::f2)
.property("f3", &Filter::f3)
class_("WasmObj")...//similar to Filter
emscripten::register_vector("IntList");
emscripten::register_vector("ObjList");
emscripten::function("wasmFilter", &wasmFilter);
}
Код: Выделить всё
emcc -lembind -Iinclude -s WASM= -s EXPORT_ES6=1 -s MODULARIZE=1 -s ENVIRONMENT=web filter.cpp -o filter.js
Я не знаю, какая часть C++-файл заставляет Wasm работать очень медленно. Это из-за использования embind???
Я читал много статей, в которых показано, что Webassembly быстрее, чем Js.
Я также знаю, что в некоторых случаях Webassembly не работает. эффективный. Но в моем случае Webassembly работает очень медленно.
Почему? И есть ли эффективный способ передачи объекта и массива между JS и C++??
Подробнее здесь: https://stackoverflow.com/questions/783 ... t-function