สวัสดี ในวันที่ วันพฤหัสบดีที่ 6 สิงหาคม ค.ศ. 2020 เวลา 7 นาฬิกา 20 นาที 12 วินาที UTC+7 ad...@chromium.org เขียนว่า:
> On Tue, Aug 4, 2020 at 1:32 PM Adrienne Walker <en...@chromium.org> wrote: > >> On Thu, Jul 30, 2020 at 9:57 PM Ben Noordhuis <in...@bnoordhuis.nl> >> wrote: >> >>> On Thu, Jul 30, 2020 at 8:21 PM Adrienne Walker <en...@chromium.org> >>> wrote: >>> > Is there any way to know from a v8::Value whether serializing it will >>> have side effects (at all or on particular properties)? >>> >>> Apart from checking whether it's primitive (v->IsNullOrUndefined() || >>> v->IsBoolean() || ...), I believe the answer is 'no' . Non-primitive >>> values can have getters and getters execute arbitrary code. >>> >>> Checking for only simple properties recursively is an option but >>> probably not faster and you'll need to handle cycles and a ton of edge >>> cases (what if the property is a pending promise? what if it's a >>> WeakMap? etc.) >>> >> >> Can I use HasRealNamedProperty/GetRealNamedProperty to see if I can >> access those properties without side effects and then check if those values >> are primitive from there? I suspect that most indexeddb keys being provided >> here are primitive string values inside a single simple object, and so am I >> trying to figure out how to fast path this case. Is there a way to tell if >> a property is one of these complicated edge cases that you mention? >> >> >>> The debugger has a "side-effect-free evaluate" mode but that operates >>> on functions, not values. You could use it to check getters for side >>> effects (and promises, and...) but the algorithm is conservative (can >>> report side effects when there are none) and runs in O(n) time >>> relative to the function's bytecode size. >> >> >> Given the potential performance issues there, this doesn't sound like a >> plausible approach. >> >> The only other thing we thought of was if there was some way to have some >> sort of observer as a part of serialization that could record the values >> without having to deserialize again to access. I worry that this might be >> too invasive to v8's serialization though. >> > > To the question of whether something might be "invasive to v8's > serialization", I think the history here is important: serialization used > to live in Blink, but was moved into V8 (by jbroman@, CCed) for performance > reasons. Given that the problem you're investigating is another performance > issue in serialization, making such an invasive change should at least be > on the table, I'd argue. > > - Adam > > >> -- >> -- >> v8-users mailing list >> v8-u...@googlegroups.com >> 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 v8-users+u...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/v8-users/CA%2B1_fV8rAhA8arck6C%2BXoQC%3DaMx1S_cARXGbymiG-%3DCHko3_5Q%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/v8-users/CA%2B1_fV8rAhA8arck6C%2BXoQC%3DaMx1S_cARXGbymiG-%3DCHko3_5Q%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- -- v8-users mailing list v8-users@googlegroups.com 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 v8-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-users/9d3734ab-876f-4ca8-b7e7-d9db435f1799n%40googlegroups.com.