00:15 | <Domenic> | wanderview: sorry for being afk for the day |
00:16 | <Domenic> | wanderview: I don't really know why the promises cases take longer to settle, but I could guess that it's more work to JIT through all the extra stuff that's going on. |
00:17 | <Domenic> | wanderview: I agree that the async read() only on byobReader design would work. I don't think they should have the same method name though... same-named methods on similar classes should behave the same I think. |
00:18 | <Domenic> | wanderview: but I think it's unfair to say performance penalty, as discussed/benchmarked :) |
00:54 | <wanderview> | Domenic: I have results that show a more significant perf penalty on mobile devices |
00:55 | <wanderview> | Domenic: I was trying to understand the FF native results before posting to the issue, but this is what I have so far: https://docs.google.com/spreadsheets/d/1rl6mbD2z1x1bgJLD6y9KJLYWjppB7BujfiWvUMjYTVs/edit?usp=sharing |
00:56 | <wanderview> | Domenic: bluebird promises are always at a penalty compared to sync on my nexus5... native promises are also worse than sync for as few as 32 chunks |
00:56 | <wanderview> | I don't have the results in there, but my firefoxos Flame is even worse (as its a lower spec'd phone) |
00:58 | <wanderview> | Domenic: btw, the ?chunks= stuff in my test don't work with chrome because it doesn't implement URLSearchParams part of URL spec... do you know of a good alternative? I'd like to run the test there |
00:58 | <wanderview> | Domenic: also, I added a size= option to control the size of the chunks... so I can set size=1 to avoid mixing in GC pressure from the buffers |
01:00 | <caitp> | is anything blocking URLSearchParams? didn't see any mention of blockers on arv's bug. seems like it would be a good gsoc project |
01:01 | <wanderview> | Domenic: also a chunks=auto to run all those chunk sizes in my google doc |
01:02 | <caitp> | or maybe too fast for gsoc, but a good starter project maybe |
01:03 | <wanderview> | I'm going to redo the google doc results with ?chunks=auto&size=1 for consistency |
01:10 | <wanderview> | hmm... I get different sync results when using native promise vs bluebird... probably from GC/CC differences... I think I will split sync out into a separate test |
01:11 | <caitp> | not sure how you're doing sync tests at all with promises |
01:11 | <wanderview> | caitp: its sync test, promise test, sync test, promise test, etc... interleaved... I think objects left from promise runs are effecting sync runs due to GC |
01:11 | <caitp> | mm |
01:34 | <wanderview> | *much* more stable results moving sync and promise tests into separate windows |
03:00 | <wanderview> | actually... the test results were bogus... many of the results were being limited by setTimeout() clamping at 4ms |
03:31 | <wanderview> | summarized my profiling results in the issue: https://github.com/whatwg/streams/issues/320#issuecomment-91418297 |
06:43 | <hsivonen> | annevk: what's the story behind the codepoints of windows-1252 that Unicode.org leaves unassigned getting mapped to controls in the Encoding Standard? Did all browsers already agree to do that instead of U+FFFD? |
07:13 | <mcnesium> | my new wordpress does have a valid rss feed but safari on iOS and OSX do not show the "reader" sign. any idea what might be wrong? http://mcnesium.com |
08:10 | <annevk> | hsivonen: several browsers at least, yes |
08:11 | annevk | goes back into hiding |
10:53 | <zcorpan> | mathiasbynens: why recommend before </body> now that it uses a getter? |
10:58 | <mathiasbynens> | zcorpan: just the general best practice, since <script> blocks |
10:59 | <zcorpan> | mathiasbynens: k |
11:01 | <zcorpan> | mathiasbynens: i found http://johndyer.name/native-browser-get-set-properties-in-javascript/ |
11:02 | <mathiasbynens> | zcorpan: In IE8, `Object.defineProperty` only works on DOM objects, so that’s fine in this case. Not sure if it’s worthwhile to add IE < 8 support |
11:06 | <zcorpan> | mathiasbynens: yeah. maybe not. i can point to that in the blog post if people need IE6-7 support (or other old browsers with __defineGetter__) |
11:07 | <zcorpan> | mathiasbynens: thanks for doing the polyfill |
16:20 | <smaug____> | is there some plan or API proposal for animation frame callbacks in workers? |
16:21 | <smaug____> | for the cases like webgl in workers |
16:43 | <espadrine> | smaug____: as in, having worker-only canvas contexts? |
16:45 | <espadrine> | there's this: https://wiki.whatwg.org/wiki/WorkerCanvas |
16:45 | <espadrine> | no idea what state it is in |
16:47 | <smaug____> | well, that is the canvas part, but I wonder if there is a plan to expose animation frame callbacks on worker side somehow |
17:06 | <zcorpan> | smaug____: sounds a bit like the "UI worker" idea |
17:07 | <zcorpan> | ask rick byers |
18:20 | <Domenic> | #lazyirc if I dispatch a click event on a radio button or checkbox, that should be the same as .click()ing it, right? and .click() should trigger an event? |
18:22 | <Domenic> | I guess testing this myself is the easiest thing to do, instead of reading the specs |
18:26 | <TabAtkins> | Domenic: Indeed. (To just testing it yourself, the specs are a rathole on this kind of thing usually.) |
18:55 | <Ms2ger> | Domenic, click() triggers event, not the other way around |
18:57 | <Domenic> | Right, but triggering the event also checks the box |
19:00 | <Ms2ger> | I don't believe it should |
19:00 | <Ms2ger> | smaug____, ^ |
19:04 | <smaug____> | click() does trigger the link... |
19:04 | <smaug____> | in practice implementations dispatch click event and do default handling during the dispathc |
19:05 | <smaug____> | dispatch |
19:05 | <smaug____> | the spec has still the different model |
19:08 | <smaug____> | per spec dispatching click event shouldn't change the checked state, IIRC |
19:09 | <smaug____> | nor follow <a href="foo"> |
19:09 | <smaug____> | but I think the web disagrees |
19:09 | <smaug____> | click is one of the special cases |
19:09 | <smaug____> | usually events must be trusted in order to trigger default action |
19:09 | <smaug____> | blink has tons of issues with this |
23:21 | <wanderview> | Domenic: it appears the native chrome promises clamp to 4ms delays like setTimeout... that seems like a pretty bad bug for promises |
23:21 | <Domenic> | wanderview: no waaaaayyyy |
23:21 | <wanderview> | I just made the defaults for the benchmark do the automated thing... so running the tests on chrome |
23:22 | <Domenic> | wanderview: I think benchmarkjs must be screwing us somehow... I trust it less :( |
23:22 | <wanderview> | Domenic: happy to fix it... but so far the data seems consistent to me |
23:23 | <Domenic> | wanderview: I am probably going to have to push off working on the benchmark until the weekend/Monday... today is running out of hours |
23:23 | <Domenic> | I'm excited about this user-space microtask queue idea |
23:23 | <wanderview> | Domenic: np... I will be offline until Monday... getting on a plane and then family time |
23:24 | <wanderview> | Domenic: it will be interesting to see the case of the js microtask and a pure js closure per callback.... thats still something to GC, but avoids some of the native promise wackyness |
23:26 | <wanderview> | Domenic: the reason I say chrome native promises are clamping... the benchmark shows ~210 ops/sec for the sync case with only 1 chunk... |
23:27 | <Domenic> | wanderview: so my guess is benchmarkjs uses setTimeout and so the most async benchmarkjs cases you can run is 250 ops/sec... |
23:30 | <wanderview> | Domenic: yes, but the promise.resolve().then(() => deferred.resolve()); should prevent the clamping from occurring, no? |
23:30 | <wanderview> | maybe we should try benchmark.js 2.0... jdalton indicated the sync deferred.resolve() is not permitted any more |
23:30 | <Domenic> | wanderview: I don't really understand how setTimeout clamping works so I'm not sure ... |
23:31 | <Domenic> | I am feeling a desire to go back to your manual tests, but just run them in a loop |
23:31 | <wanderview> | Domenic: if setTimeout() nests.. so setTimeout(() => setTimeout(() =>setTimeout()));... if it nests 4 or 5 times it forces the delay to a minimum of 4ms |
23:31 | <wanderview> | its in the spec |
23:31 | <Domenic> | I think maybe in Chrome setTimeout() is just always clamped to 4ms |
23:31 | <Domenic> | I remember bugs |
23:32 | <wanderview> | in Firefox the microtask schedule breaks the nesting behavior because it forces the stack back to nothing... I think chrome should do the same, but it does not |
23:32 | <wanderview> | ah |
23:32 | <wanderview> | yea |
23:33 | <wanderview> | even with the clamping the benchmark is still useful to see the curve |
23:33 | <wanderview> | we just can't trust the ~210 values |
23:36 | <wanderview> | Domenic: I can also see that with chrome the CPU is not maxing out on the low tests... definitely the clamping |
23:38 | <wanderview> | I wonder if the perf penalty from promises really is GC of objects |
23:41 | <wanderview> | chrome on android does do better with bluebird promises... |