Maybe you should use --extra_code flag to snapshot external js file.

and  how do you handle DOM objects used in jquery?
I don't think mksnapshot can hanlde this case.


在 2014年2月28日星期五UTC+8上午1时16分22秒,Zhao Cheng写道:
>
> No, it is still unsolved. The snapshot was created with the mksnapshot 
> tool which was created when building V8.
>
> Cheng
>
>
> On Thu, Feb 27, 2014 at 6:05 AM, Yi Shen <[email protected] <javascript:>
> > wrote:
>
>> Hi Zhao Cheng,
>>
>> Have you solved this problem? Could you let me know how you create the 
>> snapshot for jquery?
>>
>> Thanks,
>> Yi
>>
>>
>> On Wednesday, February 5, 2014 7:30:28 PM UTC-8, Zhao Cheng wrote:
>>>
>>> Hi v8-users,
>>>
>>> I'm working on a desktop application which is very sensible to the 
>>> startup time, I saw that V8's snapshot feature is exactly for this purpose, 
>>> so I patched V8 to make it accept external snapshot files.
>>>
>>> For small snapshot files this worked perfectly, but after I tried with 
>>> large extra js files (like jquery), the v8::Initialize would fail with 
>>> following stack trace:
>>>  
>>>
>>> Current executable set to './out/Release/v8_shell' (x86_64).
>>> (lldb) run
>>> Process 22132 launched: './out/Release/v8_shell' (x86_64)
>>> Process 22132 stopped
>>> * thread #1: tid = 0x2f53c, 0x00000001000876fd 
>>> v8_shell`v8::internal::Heap::ClearJSFunctionResultCaches() [inlined] 
>>> v8::internal::FixedArray::get(context=0x0000000000000000, index=56) at 
>>> objects-inl.h:1956, queue = 'com.apple.main-thread, stop reason = 
>>> EXC_BAD_ACCESS (code=1, address=0x1cf)
>>>     frame #0: 0x00000001000876fd 
>>> v8_shell`v8::internal::Heap::ClearJSFunctionResultCaches() 
>>> [inlined] v8::internal::FixedArray::get(context=0x0000000000000000, 
>>> index=56) at objects-inl.h:1956
>>>    1953 
>>>    1954 Object* FixedArray::get(int index) {
>>>    1955  ASSERT(index >= 0 && index < this->length());
>>> -> 1956  return READ_FIELD(this, kHeaderSize + index * kPointerSize);
>>>    1957 }
>>>    1958 
>>>    1959 
>>> (lldb) bt
>>> * thread #1: tid = 0x2f53c, 0x00000001000876fd 
>>> v8_shell`v8::internal::Heap::ClearJSFunctionResultCaches() [inlined] 
>>> v8::internal::FixedArray::get(context=0x0000000000000000, index=56) at 
>>> objects-inl.h:1956, queue = 'com.apple.main-thread, stop reason = 
>>> EXC_BAD_ACCESS (code=1, address=0x1cf)
>>>     frame #0: 0x00000001000876fd 
>>> v8_shell`v8::internal::Heap::ClearJSFunctionResultCaches() 
>>> [inlined] v8::internal::FixedArray::get(context=0x0000000000000000, 
>>> index=56) at objects-inl.h:1956
>>>     frame #1: 0x00000001000876fd v8_shell`v8::internal::Heap::
>>> ClearJSFunctionResultCaches(this=<unavailable>) + 93 at heap.cc:850
>>>     frame #2: 0x0000000100088e5f v8_shell`v8::internal::Heap::
>>> CollectGarbage(v8::internal::AllocationSpace, 
>>> v8::internal::GarbageCollector, 
>>> char const*, char const*) [inlined] v8::internal::Heap::
>>> GarbageCollectionPrologue(this=<unavailable>) + 24 at heap.cc:440
>>>     frame #3: 0x0000000100088e47 v8_shell`v8::internal::Heap::
>>> CollectGarbage(this=0x0000000101803210, space=<unavailable>, 
>>> collector=<unavailable>, gc_reason=0x00000001003a1f58, 
>>> collector_reason=<unavailable>) + 263 at heap.cc:676
>>>     frame #4: 0x0000000100089bad 
>>> v8_shell`v8::internal::Heap::ReserveSpace(int*, 
>>> unsigned char**) [inlined] 
>>> v8::internal::Heap::CollectGarbage(this=0x0000000101803210, 
>>> gc_reason=<unavailable>) + 109 at heap-inl.h:546
>>>     frame #5: 0x0000000100089b81 
>>> v8_shell`v8::internal::Heap::ReserveSpace(int*, 
>>> unsigned char**) [inlined] v8::internal::AbortIncrementalMarkingAndColl
>>> ectGarbage(v8::internal::Heap*, v8::internal::AllocationSpace, char 
>>> const*) + 16 at heap.cc:780
>>>     frame #6: 0x0000000100089b71 v8_shell`v8::internal::Heap::
>>> ReserveSpace(this=0x0000000101803210, sizes=0x00007fff5fbff6a0, 
>>> locations_out=0x00007fff5fbff660) + 49 at heap.cc:809
>>>     frame #7: 0x000000010020a939 v8_shell`v8::internal::
>>> Deserializer::Deserialize(this=0x00007fff5fbff648, 
>>> isolate=0x0000000101803200) + 41 at serialize.cc:815
>>>     frame #8: 0x000000010011ca4a v8_shell`v8::internal::
>>> Isolate::Init(this=0x0000000101803200, des=0x00007fff5fbff648) + 2522 
>>> at isolate.cc:2260
>>>     frame #9: 0x000000010023125c 
>>> v8_shell`v8::internal::V8::Initialize(des=<unavailable>) 
>>> + 124 at v8.cc:78
>>>     frame #10: 0x000000010020d3b0 v8_shell`v8::internal::
>>> Snapshot::Initialize(snapshot_file=<unavailable>) + 880 at 
>>> snapshot-common.cc:152
>>>     frame #11: 0x0000000100009368 v8_shell`v8::V8::Initialize(char 
>>> const*) [inlined] v8::InitializeHelper(snapshot_file=0x0000000100396e30) 
>>> + 18 at api.cc:315
>>>     frame #12: 0x0000000100009356 v8_shell`v8::V8::Initialize(
>>> snapshot_file=0x0000000100396e30) + 38 at api.cc:5179
>>>     frame #13: 0x0000000100001093 v8_shell`main(argc=1, 
>>> argv=0x00007fff5fbff810) + 67 at shell.cc:75
>>>     frame #14: 0x0000000100001044 
>>> v8_shell`___lldb_unnamed_function1$$v8_shell 
>>> + 52
>>>
>>>
>>> As I searched in the mailing list, there seems to be a object space 
>>> limitation on the snapshot feature, is this true? And is there a way to get 
>>> round of the size limitation (like changing some predefined constant 
>>> variable)?
>>>
>>> I also notice that ScriptData can be used to precompile script, is the 
>>> ScriptData serializable so I could write it in a file and the load it in 
>>> clients' machines? And is there any benchmark on how much time ScriptData 
>>> could save?
>>>
>>> My patch for V8 can be found 
>>> here,<https://gist.github.com/zcbenz/8837916>there is nothing special in it 
>>> and it just made V8 to accept external 
>>> snapshot file.
>>>
>>> Thanks,
>>> Cheng
>>>
>>  -- 
>> -- 
>> v8-users mailing list
>> [email protected] <javascript:>
>> http://groups.google.com/group/v8-users
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "v8-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>

-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to