Avoid Node.js unnecessary source copying
This commit is contained in:
parent
472c4d8fac
commit
46e20986b2
|
@ -120,16 +120,14 @@ napi_value node_method_minify(napi_env env, napi_callback_info info) {
|
||||||
napi_value src_arg = argv[0];
|
napi_value src_arg = argv[0];
|
||||||
napi_value js_cfg_arg = argv[1];
|
napi_value js_cfg_arg = argv[1];
|
||||||
|
|
||||||
|
void* src_data;
|
||||||
size_t src_data_len;
|
size_t src_data_len;
|
||||||
if (napi_is(env, src_arg, napi_is_buffer)) {
|
if (napi_is(env, src_arg, napi_is_buffer)) {
|
||||||
// Get pointer to bytes in buffer.
|
// Get pointer to bytes in buffer.
|
||||||
void* buffer_data;
|
if (napi_get_buffer_info(env, src_arg, &src_data, &src_data_len) != napi_ok || src_data == NULL) {
|
||||||
if (napi_get_buffer_info(env, src_arg, &buffer_data, &src_data_len) != napi_ok || buffer_data == NULL) {
|
|
||||||
assert_ok(napi_throw_type_error(env, NULL, "Failed to read source buffer"));
|
assert_ok(napi_throw_type_error(env, NULL, "Failed to read source buffer"));
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
src_data_copy = assert_malloc(src_data_len);
|
|
||||||
memcpy(src_data_copy, buffer_data, src_data_len);
|
|
||||||
} else {
|
} else {
|
||||||
// Assume string.
|
// Assume string.
|
||||||
if (napi_get_value_string_utf8(env, src_arg, NULL, 0, &src_data_len) != napi_ok) {
|
if (napi_get_value_string_utf8(env, src_arg, NULL, 0, &src_data_len) != napi_ok) {
|
||||||
|
@ -143,6 +141,7 @@ napi_value node_method_minify(napi_env env, napi_callback_info info) {
|
||||||
assert_ok(napi_throw_error(env, NULL, "Failed to copy source string"));
|
assert_ok(napi_throw_error(env, NULL, "Failed to copy source string"));
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
|
src_data = src_data_copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get Cfg.
|
// Get Cfg.
|
||||||
|
@ -154,7 +153,7 @@ napi_value node_method_minify(napi_env env, napi_callback_info info) {
|
||||||
Cfg const* cfg = (Cfg const*) cfg_raw;
|
Cfg const* cfg = (Cfg const*) cfg_raw;
|
||||||
|
|
||||||
// Run minifier.
|
// Run minifier.
|
||||||
ffi_output const* output = ffi_minify(src_data_copy, src_data_len, cfg);
|
ffi_output const* output = ffi_minify(src_data, src_data_len, cfg);
|
||||||
|
|
||||||
// Create minified buffer with copied memory.
|
// Create minified buffer with copied memory.
|
||||||
if (napi_create_external_buffer(env, output->len, output->data, js_output_buf_finalizer, (void*) output, &min_buf_rv) != napi_ok) {
|
if (napi_create_external_buffer(env, output->len, output->data, js_output_buf_finalizer, (void*) output, &min_buf_rv) != napi_ok) {
|
||||||
|
@ -165,9 +164,9 @@ napi_value node_method_minify(napi_env env, napi_callback_info info) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
rollback:
|
rollback:
|
||||||
free(src_data_copy);
|
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
free(src_data_copy);
|
||||||
return min_buf_rv;
|
return min_buf_rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue