On Mon, Jan 17, 2011 at 10:50 AM, Vyacheslav Egorov
<[email protected]> wrote:
> 1) the code snippet above is incorrect, you are closing HandleScope
> several times.
FWIW, a correct sequence would be
for(...) {
HandleScope nested;
...
js_result->Set(..., js_entry);
// ~nested() will clean up the handles allocated in the loop body
}
>
> HandleScope::Close is required when you want to pass ownership over
> some value from current HandleScope to it's parent. It's a one-time
> operation usually applied to function's return value. You don't need
> HandleScope::Close if you are assigning value to a property.
>
> 2) It's a bit hard to say what's going on in this particular case
> without seeing both JavaScript and C++ side but in general C++ code
> like:
>
> js_entry->Set(Integer::New(q), Number::New(ticks[off]));
>
> will be slower than JS code like:
>
> a[q] = ticks[offs];
>
> (I assume that a and ticks are JS arrays and q and offs are integers).
>
> C++ code requires a lot of calls while for JS V8 will emit nice
> specialized native code.
>
> --
> Vyacheslav Egorov
>
>
> On Mon, Jan 17, 2011 at 1:26 AM, Egor Egorov <[email protected]> wrote:
>> I am writing a code that will parse a huge number of 32bit integers from a
>> binary chunk and do some math I need.
>> I coded it in JS (node.js 0.3.x with V8 3.x), and the calculations took
>> about 1 minute. Then I rewrote the main cycle in C++ module to speed it u
>> and it took... about 5 min. Here's a snippet of code that is running in C++
>> context, something like that:
>> HandleScope scope;
>> Local<Array> js_result = Array::New();
>> int i=0;
>> for(i=0;i<size;i++) {
>> int off=i*4;
>> Local<Array> js_entry = Array::New();
>> js_entry->Set(Integer::New(q), Number::New(ticks[off]));
>> js_entry->Set(Integer::New(q+1), Number::New(ticks[off+3]));
>> js_entry->Set(Integer::New(q+2), Number::New(ticks[off+2]));
>> scope.Close(js_entry);
>> js_result->Set(Number::New(i), js_entry);
>> }
>> return scope.Close(js_result);
>>
>> Does it mean that calls from C++ to create V8 JS objects are expensive?
>> Integer::New() and so alike?
>>
>> --
>> v8-users mailing list
>> [email protected]
>> http://groups.google.com/group/v8-users
>
> --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users