WEBVTT

1
00:00:05.240 --> 00:00:08.839
<v Speaker 1>Hey, folks, welcome back to another episode of JavaScript Jabber.

2
00:00:09.039 --> 00:00:12.320
<v Speaker 1>This week, on our panel, we have Steve Edwards.

3
00:00:12.000 --> 00:00:15.160
<v Speaker 2>Yo yo yo, come in at you live from Portland.

4
00:00:15.480 --> 00:00:17.640
<v Speaker 2>I'm filling in for a j since he's not here

5
00:00:17.679 --> 00:00:18.760
<v Speaker 2>right now right.

6
00:00:18.800 --> 00:00:20.239
<v Speaker 1>We also have Dan shpier.

7
00:00:20.839 --> 00:00:25.320
<v Speaker 3>Hey sitting in the air conditioning room in hot and sunny.

8
00:00:25.320 --> 00:00:26.320
<v Speaker 3>Tell the league.

9
00:00:26.399 --> 00:00:28.600
<v Speaker 1>I'm Charles Maxwood from Top End Devs and we have

10
00:00:28.600 --> 00:00:33.240
<v Speaker 1>a special guest this week and that's your weiss. Do

11
00:00:33.280 --> 00:00:34.359
<v Speaker 1>you want to introduce yourself?

12
00:00:34.439 --> 00:00:35.159
<v Speaker 4>Let people know it.

13
00:00:35.520 --> 00:00:37.399
<v Speaker 1>We've had you on before, so I think some people

14
00:00:37.439 --> 00:00:38.520
<v Speaker 1>know who you are, and then.

15
00:00:39.280 --> 00:00:41.399
<v Speaker 3>There may be a few they don't. They should.

16
00:00:41.920 --> 00:00:45.399
<v Speaker 1>Yeah, sure I can introduce myself.

17
00:00:46.119 --> 00:00:51.799
<v Speaker 4>So hey, I've been working on web performance for way

18
00:00:51.840 --> 00:00:56.759
<v Speaker 4>too long, trying to solve it and so far not

19
00:00:56.840 --> 00:01:05.519
<v Speaker 4>being super successful. I been working on browsers since twenty twelve,

20
00:01:07.519 --> 00:01:12.719
<v Speaker 4>and initially on my own, then at a Kamai working

21
00:01:12.799 --> 00:01:18.599
<v Speaker 4>on both browsers and server features, then at Google for

22
00:01:18.640 --> 00:01:22.480
<v Speaker 4>a few years, and nowadays I'm at Shopify, still working

23
00:01:22.519 --> 00:01:27.560
<v Speaker 4>on the web platform amongst other things. I co chair

24
00:01:28.000 --> 00:01:33.599
<v Speaker 4>the Web Performance Working Group and I'm one of the

25
00:01:33.840 --> 00:01:39.760
<v Speaker 4>doink api owners, which is basically the folks that sign

26
00:01:39.799 --> 00:01:47.599
<v Speaker 4>off on features getting released in Chromeum.

27
00:01:46.359 --> 00:01:49.040
<v Speaker 3>The working group is what it's worth mentioning is part

28
00:01:49.079 --> 00:01:50.040
<v Speaker 3>of the W THREEC.

29
00:01:50.760 --> 00:01:53.840
<v Speaker 4>Yes, yeah, yeah, the W three C Web Performance working Group. Yeah.

30
00:01:54.319 --> 00:01:56.200
<v Speaker 2>I would like to point out that it's from a

31
00:01:56.280 --> 00:01:58.359
<v Speaker 2>visual standpoint, it's easy to tell how smart he is

32
00:01:58.359 --> 00:02:02.480
<v Speaker 2>by his haircut, just saying so, yeah.

33
00:02:02.359 --> 00:02:05.280
<v Speaker 3>He's one of these guys that shapes his head even

34
00:02:05.319 --> 00:02:06.280
<v Speaker 3>though he has hair.

35
00:02:09.240 --> 00:02:14.639
<v Speaker 4>Yeah yeah, I wouldn't define it as has.

36
00:02:14.479 --> 00:02:17.360
<v Speaker 2>Hair, but yeah, well got made only so many perfect

37
00:02:17.400 --> 00:02:20.039
<v Speaker 2>heads and the rest he covered with hair, So that's right.

38
00:02:20.960 --> 00:02:25.159
<v Speaker 3>I like to say that I'm also I'm an invited

39
00:02:25.280 --> 00:02:28.639
<v Speaker 3>expert on that same working group. The guy who invited

40
00:02:28.639 --> 00:02:31.719
<v Speaker 3>me over it is job, so I'm very thankful for that.

41
00:02:33.400 --> 00:02:35.120
<v Speaker 4>I'm thankful for contributions.

42
00:02:35.199 --> 00:02:39.840
<v Speaker 3>So yeah, doing fighting the good fight, trying to make

43
00:02:39.879 --> 00:02:42.240
<v Speaker 3>the web faster for everybody's sake.

44
00:02:43.199 --> 00:02:48.599
<v Speaker 1>So, Yo, we got this document from you about JavaScript loading,

45
00:02:49.039 --> 00:02:53.520
<v Speaker 1>and it's interesting because it starts off with you changed jobs.

46
00:02:53.520 --> 00:02:56.800
<v Speaker 1>So you want to kind of give us some context

47
00:02:56.840 --> 00:02:58.680
<v Speaker 1>on that and then we can jump in and talk

48
00:02:58.680 --> 00:02:59.680
<v Speaker 1>about JavaScript floating.

49
00:03:00.159 --> 00:03:04.960
<v Speaker 4>Yeah sure, so yeah, So basically, I, like I said,

50
00:03:05.599 --> 00:03:11.240
<v Speaker 4>worked on Chrome at Google for five years up until

51
00:03:11.439 --> 00:03:15.120
<v Speaker 4>a few months back. And yeah, and earlier this year

52
00:03:15.280 --> 00:03:22.639
<v Speaker 4>I changed employers. But the good thing about open source

53
00:03:22.840 --> 00:03:24.879
<v Speaker 4>is that I get to do a lot of the

54
00:03:24.960 --> 00:03:31.000
<v Speaker 4>same things with a different head on. Basically, I've been

55
00:03:31.199 --> 00:03:36.680
<v Speaker 4>working on making the web faster by default, I've been

56
00:03:36.719 --> 00:03:42.360
<v Speaker 4>doing that before joining Google, and I get to do

57
00:03:42.439 --> 00:03:48.520
<v Speaker 4>that afterwards. So I continue to work on on Chromium.

58
00:03:49.120 --> 00:03:51.800
<v Speaker 4>I now also get to work on WebKit, which is

59
00:03:52.199 --> 00:03:58.120
<v Speaker 4>a refreshing change and the only thing with I guess

60
00:03:59.400 --> 00:04:03.840
<v Speaker 4>with the change from working for a browser vendor to

61
00:04:03.919 --> 00:04:07.479
<v Speaker 4>working more like closer to the industry, it kind of

62
00:04:07.479 --> 00:04:12.439
<v Speaker 4>helps to keep me aligned with what developers actually need,

63
00:04:12.800 --> 00:04:19.879
<v Speaker 4>because working for a browser vendor is great, but it's

64
00:04:19.959 --> 00:04:25.040
<v Speaker 4>also it makes it hard to keep up with what

65
00:04:26.199 --> 00:04:31.319
<v Speaker 4>actual developers are doing because browser developers are not Web developers,

66
00:04:31.360 --> 00:04:37.480
<v Speaker 4>at least not really. Yeah, and working as part of

67
00:04:37.560 --> 00:04:43.519
<v Speaker 4>the you know, quote unquote industry makes it easier to

68
00:04:43.639 --> 00:04:47.240
<v Speaker 4>make sure that my work is actually aligned with what

69
00:04:47.399 --> 00:04:50.839
<v Speaker 4>people need, So that part is something I'm very very

70
00:04:50.839 --> 00:04:51.399
<v Speaker 4>happy about.

71
00:04:51.600 --> 00:04:51.800
<v Speaker 3>Yeah.

72
00:04:51.839 --> 00:04:56.040
<v Speaker 4>Other than that, there aren't a lot of commerce voices

73
00:04:56.519 --> 00:05:01.199
<v Speaker 4>amongst people who work on browsers, so I'm very happy

74
00:05:01.240 --> 00:05:04.360
<v Speaker 4>to bring in that perspective to those discussions.

75
00:05:04.920 --> 00:05:10.759
<v Speaker 3>That's especially interesting given that probably the organizations or the

76
00:05:11.240 --> 00:05:16.839
<v Speaker 3>web that's websites web apps that have potentially the greatest

77
00:05:16.959 --> 00:05:22.240
<v Speaker 3>need for web performance or see the greatest impact from

78
00:05:22.319 --> 00:05:28.000
<v Speaker 3>improving web performance are commerce related websites. In many cases. Yeah,

79
00:05:28.199 --> 00:05:34.079
<v Speaker 3>there's always those you know, research papers showing like Amazon

80
00:05:34.759 --> 00:05:38.639
<v Speaker 3>increase their revenue by a trillion dollars because they spend

81
00:05:38.720 --> 00:05:42.319
<v Speaker 3>up loading time by five milliseconds or something along these sides.

82
00:05:42.800 --> 00:05:47.639
<v Speaker 4>Yeah, I don't know about these exact numbers, but but yeah,

83
00:05:47.720 --> 00:05:52.120
<v Speaker 4>basically performance is very important. There are a lot of

84
00:05:52.680 --> 00:05:57.199
<v Speaker 4>public case studies about the relationship between web performance and

85
00:05:57.240 --> 00:06:02.040
<v Speaker 4>conversion rates. And I'm biased, but it seems to me

86
00:06:02.319 --> 00:06:06.560
<v Speaker 4>that it's like crucial to have that kind of influence

87
00:06:07.120 --> 00:06:11.000
<v Speaker 4>on you know, on web standards and and where the

88
00:06:11.000 --> 00:06:12.000
<v Speaker 4>web platform is going.

89
00:06:12.480 --> 00:06:16.360
<v Speaker 3>Yeah. By the way, the Google driven website web dot

90
00:06:16.399 --> 00:06:20.120
<v Speaker 3>dep which is an excellent website, has a case studies

91
00:06:20.160 --> 00:06:24.639
<v Speaker 3>section which actually has real numbers, not numbers invented by me,

92
00:06:25.319 --> 00:06:31.839
<v Speaker 3>that describe how companies did in fact significantly increase their conversion,

93
00:06:32.079 --> 00:06:36.360
<v Speaker 3>their income or whatever thanks to improving performance. And like

94
00:06:36.399 --> 00:06:41.160
<v Speaker 3>you said, it's it's not really surprising. Uh, you know,

95
00:06:42.399 --> 00:06:47.680
<v Speaker 3>it's we have We're in an age of you know,

96
00:06:47.839 --> 00:06:51.879
<v Speaker 3>little patients and a lot of distractions, and if your

97
00:06:51.920 --> 00:06:56.079
<v Speaker 3>website takes too long, too low, then people will go elsewhere. Yeah.

98
00:06:56.199 --> 00:07:00.759
<v Speaker 4>If if you remove friction, good things happen in general.

99
00:07:01.800 --> 00:07:05.480
<v Speaker 3>Yeah, it reminds me of when I told someone that

100
00:07:07.079 --> 00:07:13.160
<v Speaker 3>the said that the pipeline or the funnel at the

101
00:07:13.199 --> 00:07:16.720
<v Speaker 3>previous company that I worked at is implemented in Angular.

102
00:07:17.319 --> 00:07:21.959
<v Speaker 3>Their response was, don't let angular get between your customers

103
00:07:22.000 --> 00:07:27.879
<v Speaker 3>and potential customers and the payment something along these lines.

104
00:07:29.319 --> 00:07:34.839
<v Speaker 3>But but yeah, it is important to reduce friction as

105
00:07:34.879 --> 00:07:38.160
<v Speaker 3>much as possible, and improving performance is certainly a good

106
00:07:38.199 --> 00:07:38.800
<v Speaker 3>way to do that.

107
00:07:41.079 --> 00:07:47.519
<v Speaker 1>So we're talking about the JavaScript bloating today, So how

108
00:07:47.560 --> 00:07:53.120
<v Speaker 1>does that get into this friction or frictionless performance set up.

109
00:07:54.439 --> 00:08:00.240
<v Speaker 4>So I've been unhappy with the way that JavaScript is

110
00:08:00.279 --> 00:08:02.279
<v Speaker 4>being loaded on the web for a long while, but

111
00:08:02.600 --> 00:08:09.319
<v Speaker 4>haven't been able to move that too much just yet.

112
00:08:09.439 --> 00:08:15.600
<v Speaker 4>But it's essentially I think that in many ways, when

113
00:08:15.639 --> 00:08:22.319
<v Speaker 4>we're looking at web performance and loading performance, there isn't

114
00:08:22.399 --> 00:08:27.639
<v Speaker 4>really a good way to load JavaScript, and the main

115
00:08:27.720 --> 00:08:35.080
<v Speaker 4>advice that web performance folks can tell people or have

116
00:08:35.200 --> 00:08:39.840
<v Speaker 4>been telling people is just to load less JavaScript, which

117
00:08:39.960 --> 00:08:47.200
<v Speaker 4>is correct but not necessarily useful in today's web development environment.

118
00:08:47.759 --> 00:08:53.240
<v Speaker 4>If you can load your site with less JavaScript, you should.

119
00:08:54.399 --> 00:08:56.600
<v Speaker 4>But at the same time, there are a lot of

120
00:08:56.679 --> 00:09:04.720
<v Speaker 4>JavaScript based but like even for those, loading performance matters.

121
00:09:05.200 --> 00:09:12.600
<v Speaker 4>Loading performance matters because your users interact with your website.

122
00:09:12.639 --> 00:09:16.159
<v Speaker 4>They will right click and open a new tab, they

123
00:09:16.200 --> 00:09:20.759
<v Speaker 4>will reload your browser will unload your app in the

124
00:09:20.799 --> 00:09:25.159
<v Speaker 4>background in order to save memory. And in those cases

125
00:09:26.080 --> 00:09:32.399
<v Speaker 4>you're you're effectively heating reload even if you even if

126
00:09:32.440 --> 00:09:36.440
<v Speaker 4>your if your site is you know there all day.

127
00:09:37.559 --> 00:09:40.240
<v Speaker 4>There are a lot of interactions where loading performance matters.

128
00:09:40.240 --> 00:09:45.720
<v Speaker 4>So essentially there are no good ways today to load scripts.

129
00:09:46.080 --> 00:09:49.159
<v Speaker 4>And yeah, then and I as part of we started

130
00:09:49.320 --> 00:09:53.559
<v Speaker 4>enumrating the different number of ways of that you can

131
00:09:53.600 --> 00:09:57.559
<v Speaker 4>load scripts. But it's essentially if if you go back

132
00:09:57.559 --> 00:10:02.519
<v Speaker 4>to the basics, we have blocking script that are you know,

133
00:10:03.200 --> 00:10:08.120
<v Speaker 4>they are not a good pattern because they are blocking

134
00:10:08.200 --> 00:10:13.600
<v Speaker 4>the parser from processing the rest of the document. There

135
00:10:13.639 --> 00:10:18.720
<v Speaker 4>are acink scripts who are not necessarily a good pattern

136
00:10:18.840 --> 00:10:23.879
<v Speaker 4>because they are racing and will potentially get in the

137
00:10:23.919 --> 00:10:28.120
<v Speaker 4>way of more important things if they happen to load earlier.

138
00:10:29.399 --> 00:10:34.799
<v Speaker 5>And we have deferred scripts who are really like, it's

139
00:10:34.879 --> 00:10:40.879
<v Speaker 5>a relatively well defined model and it doesn't block the parser.

140
00:10:41.320 --> 00:10:45.279
<v Speaker 4>But at the same time, they are often like they're

141
00:10:45.320 --> 00:10:48.360
<v Speaker 4>always loading in a single milestone, a single point in

142
00:10:48.399 --> 00:10:52.360
<v Speaker 4>time in the page life cycle, and that may or

143
00:10:52.399 --> 00:10:53.639
<v Speaker 4>may not be sufficient.

144
00:10:53.960 --> 00:10:59.200
<v Speaker 3>So I think though it is important to mention that.

145
00:10:59.360 --> 00:11:03.080
<v Speaker 3>Even though so talking about blocking scripts, which are the

146
00:11:03.159 --> 00:11:07.679
<v Speaker 3>most obvious way in initial and kind of the oldest way,

147
00:11:07.759 --> 00:11:11.080
<v Speaker 3>I guess, because really, if you don't say anything else,

148
00:11:11.240 --> 00:11:14.679
<v Speaker 3>then a script is blocking by by default, like this

149
00:11:14.799 --> 00:11:20.440
<v Speaker 3>is the way the web was originally built. It's it's problematic,

150
00:11:20.919 --> 00:11:26.799
<v Speaker 3>like you said, it's usually bad, but it's needed because

151
00:11:26.840 --> 00:11:33.000
<v Speaker 3>sometimes you need to do some things before rendering can proceed.

152
00:11:33.200 --> 00:11:36.759
<v Speaker 3>So it's it's when we say blocking, what it really

153
00:11:36.799 --> 00:11:40.679
<v Speaker 3>means is render. Blocking means that when the browser hits

154
00:11:40.720 --> 00:11:45.519
<v Speaker 3>that point that script tag, it has to stop rendering

155
00:11:45.720 --> 00:11:49.200
<v Speaker 3>until that script finishes. I know that some browsers do

156
00:11:49.399 --> 00:11:54.360
<v Speaker 3>hacks around that, but really, at the logical level, that's

157
00:11:54.399 --> 00:11:55.840
<v Speaker 3>what it means, right.

158
00:11:57.320 --> 00:12:02.720
<v Speaker 4>Yeah, But there so there is a better alternative to that,

159
00:12:03.279 --> 00:12:10.159
<v Speaker 4>which is blocking equals render, which gives you essentially it

160
00:12:10.159 --> 00:12:13.799
<v Speaker 4>gives your acing script or deferred script, the ability to

161
00:12:13.919 --> 00:12:17.759
<v Speaker 4>block rendering but not block the parser, so the browser

162
00:12:17.799 --> 00:12:22.240
<v Speaker 4>can continue to do work, but the user doesn't see

163
00:12:22.600 --> 00:12:26.000
<v Speaker 4>things flashing around before that script.

164
00:12:26.039 --> 00:12:28.679
<v Speaker 3>Oh yeah, I forgot that one, and maybe I should

165
00:12:28.679 --> 00:12:32.759
<v Speaker 3>have even added that to the list. In this In

166
00:12:32.799 --> 00:12:37.279
<v Speaker 3>this context, it's you know, the web is something of

167
00:12:37.759 --> 00:12:43.120
<v Speaker 3>you know, like an archaeological site. You know, it's it's

168
00:12:43.279 --> 00:12:46.720
<v Speaker 3>layers upon layers of history. And and the thing about

169
00:12:46.720 --> 00:12:50.720
<v Speaker 3>the web is that once something has been implemented, it

170
00:12:50.799 --> 00:12:54.720
<v Speaker 3>can almost never be taken away and must be supported

171
00:12:54.799 --> 00:12:58.440
<v Speaker 3>forever and ever. So in the very olden days, I

172
00:12:58.480 --> 00:13:01.480
<v Speaker 3>think it was brendan Ike that introduce the concept of

173
00:13:01.639 --> 00:13:08.200
<v Speaker 3>document right, which enabled JavaScript to kind of inject content

174
00:13:08.639 --> 00:13:15.000
<v Speaker 3>into the HTML stream, into the document downloading stream, and therefore,

175
00:13:15.399 --> 00:13:20.000
<v Speaker 3>because of that, scripts had to be blocking, because you

176
00:13:20.039 --> 00:13:24.720
<v Speaker 3>couldn't proceed with processing the HTML just in case something

177
00:13:25.159 --> 00:13:30.159
<v Speaker 3>happened to be injected into it. Now nobody uses document well,

178
00:13:30.240 --> 00:13:35.240
<v Speaker 3>I can't say nobody, but hardly anybody uses document right anymore.

179
00:13:35.240 --> 00:13:38.240
<v Speaker 3>It's like a fraction of a fraction of a percent

180
00:13:38.440 --> 00:13:43.080
<v Speaker 3>of websites, I would say, But it still needs to

181
00:13:43.120 --> 00:13:47.360
<v Speaker 3>be there. You're smiling, you off, so I'm guessing more websites.

182
00:13:49.960 --> 00:13:55.080
<v Speaker 3>Maybe sure, and we can let me see, probably like

183
00:13:57.120 --> 00:14:00.399
<v Speaker 3>SSL VPNs or something. Use it for evil in the

184
00:14:00.519 --> 00:14:03.639
<v Speaker 3>various things, or maybe all sorts of firewalls or whatnot.

185
00:14:04.200 --> 00:14:09.720
<v Speaker 3>Use it for crazy stuff. But it's not something that.

186
00:14:09.879 --> 00:14:13.639
<v Speaker 3>Let's put it differently, ninety nine point ninety nine percent

187
00:14:14.200 --> 00:14:18.720
<v Speaker 3>of web developers don't use it, but it still needs

188
00:14:18.759 --> 00:14:21.879
<v Speaker 3>to be supported, so it's still there. So scripts are

189
00:14:22.039 --> 00:14:28.039
<v Speaker 3>not just render blocking. They're download and parsing blocking, as

190
00:14:28.080 --> 00:14:30.759
<v Speaker 3>it were. And like you have said, if you put

191
00:14:30.840 --> 00:14:35.080
<v Speaker 3>loading equals render, then you're telling it basically telling the browser. Look,

192
00:14:35.120 --> 00:14:39.200
<v Speaker 3>you need to pause the rendering because maybe I'm doing

193
00:14:39.320 --> 00:14:45.200
<v Speaker 3>logic around dark mode and I don't want content flashing

194
00:14:45.320 --> 00:14:48.720
<v Speaker 3>or something, so you need to pause the rendering. But

195
00:14:49.480 --> 00:14:53.360
<v Speaker 3>I'm not using document, right, I promise, so you can

196
00:14:53.519 --> 00:14:58.559
<v Speaker 3>actually continue parsing stuff because I won't be modifying the

197
00:14:58.679 --> 00:15:03.240
<v Speaker 3>download the documents stream. So yeah, I to be honest,

198
00:15:03.279 --> 00:15:08.960
<v Speaker 3>like I said, I actually forgot about that. That option. Another,

199
00:15:09.039 --> 00:15:12.240
<v Speaker 3>by the way, interesting option is again if you have

200
00:15:12.320 --> 00:15:16.000
<v Speaker 3>a blocking script, whether it's in the head or the

201
00:15:16.039 --> 00:15:19.759
<v Speaker 3>bottom of the body, that also kind of modifies the

202
00:15:19.840 --> 00:15:21.480
<v Speaker 3>behavior as I recall.

203
00:15:21.799 --> 00:15:29.159
<v Speaker 4>It modifies the priority. It's not like the script will

204
00:15:29.200 --> 00:15:35.639
<v Speaker 4>block parsing whenever it's discovered, but if it's discovered at

205
00:15:35.639 --> 00:15:39.879
<v Speaker 4>the bottom of the document, that like parsi're blocking, doesn't

206
00:15:39.919 --> 00:15:43.759
<v Speaker 4>have a huge effect because there's nothing more than that

207
00:15:44.200 --> 00:15:48.679
<v Speaker 4>actual script to parts, so it's blocking nothing behind it.

208
00:15:49.360 --> 00:15:53.840
<v Speaker 3>So if you're some browsers, yeah, we talked about it

209
00:15:53.840 --> 00:15:58.720
<v Speaker 3>with Robin Marx, some browsers in that scenario would actually

210
00:15:58.200 --> 00:16:02.919
<v Speaker 3>reduce the priority you have the script download, some don't.

211
00:16:03.639 --> 00:16:09.600
<v Speaker 4>Yes, yeah, the whole Yeah, so there are generally for

212
00:16:09.759 --> 00:16:16.600
<v Speaker 4>blocking scripts browsers. All browsers nowadays have a mechanism or

213
00:16:16.840 --> 00:16:23.600
<v Speaker 4>all all commercial browsers like if I'm not sure about

214
00:16:23.720 --> 00:16:30.000
<v Speaker 4>for example, ady Bird, but all big browsers have a

215
00:16:30.039 --> 00:16:33.600
<v Speaker 4>mechanism where they continue to parse the document in order

216
00:16:33.639 --> 00:16:38.320
<v Speaker 4>to speculatively fetch resources when they're when they encounter a

217
00:16:38.360 --> 00:16:42.960
<v Speaker 4>blocking script and yes whenever, Like a blocking script of

218
00:16:43.000 --> 00:16:46.320
<v Speaker 4>the head would have a higher priority in some browsers

219
00:16:46.399 --> 00:16:49.799
<v Speaker 4>than a blocking script at the bottom, but all the

220
00:16:50.039 --> 00:16:55.600
<v Speaker 4>like the priorities as well as this speculative preloading of

221
00:16:55.720 --> 00:17:00.639
<v Speaker 4>assets of resources, none of that is specified, so every

222
00:17:00.679 --> 00:17:07.240
<v Speaker 4>browser can pretty much do their thing and Web developers

223
00:17:07.240 --> 00:17:11.400
<v Speaker 4>shouldn't really rely on it. Yes. So basically we have multiple,

224
00:17:13.359 --> 00:17:17.440
<v Speaker 4>multiple ways to load scripts. I am unhappy with all

225
00:17:17.480 --> 00:17:24.519
<v Speaker 4>of them. And then we have essentially for like the

226
00:17:24.559 --> 00:17:28.039
<v Speaker 4>future of script loading for the last I don't know

227
00:17:28.079 --> 00:17:31.799
<v Speaker 4>how many years have been yes modules and.

228
00:17:33.599 --> 00:17:37.559
<v Speaker 3>One more thing before we get to yes modules. I

229
00:17:37.599 --> 00:17:42.759
<v Speaker 3>think that another key aspect that confuses people when they

230
00:17:42.799 --> 00:17:47.000
<v Speaker 3>think about script loading, but really any asset loading in

231
00:17:47.000 --> 00:17:52.480
<v Speaker 3>the browser, is that the difference between important and urgent

232
00:17:53.240 --> 00:17:57.880
<v Speaker 3>isn't always obvious. That some stuff is important because the

233
00:17:57.960 --> 00:18:03.359
<v Speaker 3>page can't work without it, but it might not be urgent,

234
00:18:03.680 --> 00:18:08.440
<v Speaker 3>as in that certain things need to be downloaded sooner.

235
00:18:09.039 --> 00:18:13.759
<v Speaker 3>So for example, in this day and age of SSR

236
00:18:13.880 --> 00:18:20.440
<v Speaker 3>and SSG, where we present stuff visually before it actually

237
00:18:20.559 --> 00:18:25.400
<v Speaker 3>becomes interactive, Like there's a difference in time between when

238
00:18:25.440 --> 00:18:29.200
<v Speaker 3>a page is seen and when a page becomes interactive.

239
00:18:29.759 --> 00:18:34.880
<v Speaker 3>You might say that visibility is more urgent than interactivity.

240
00:18:35.319 --> 00:18:41.559
<v Speaker 3>As long as the difference between the two is sufficiently small.

241
00:18:42.279 --> 00:18:46.400
<v Speaker 3>It's a painful thing because because sufficiently small is a

242
00:18:46.440 --> 00:18:50.519
<v Speaker 3>problematic definition in and of itself, and if it's even

243
00:18:50.640 --> 00:18:53.960
<v Speaker 3>slightly too big, it becomes a real problem. Like the

244
00:18:54.039 --> 00:18:58.839
<v Speaker 3>page literally doesn't properly respond to user interactions, which is

245
00:18:58.880 --> 00:19:05.119
<v Speaker 3>worse than slow, it's really broken. But yeah, I still

246
00:19:05.200 --> 00:19:08.759
<v Speaker 3>think that this distinction between what is urgent and what

247
00:19:08.880 --> 00:19:12.279
<v Speaker 3>is important, Like what is important is stuff that the

248
00:19:12.319 --> 00:19:16.400
<v Speaker 3>page can't properly work without. If a certain image, for example,

249
00:19:16.519 --> 00:19:21.480
<v Speaker 3>is not downloaded, that's not necessarily important. If it's if

250
00:19:21.480 --> 00:19:24.319
<v Speaker 3>it's doesn't get in the way of the pages operations,

251
00:19:24.359 --> 00:19:27.559
<v Speaker 3>so you get a broken icon, you know, you could

252
00:19:27.559 --> 00:19:30.640
<v Speaker 3>still work. On the other hand, let's say if the

253
00:19:30.720 --> 00:19:34.359
<v Speaker 3>CSS doesn't download, then there's a good chance that the

254
00:19:34.400 --> 00:19:38.759
<v Speaker 3>page becomes totally illegible. So that's kind of really important,

255
00:19:39.279 --> 00:19:43.039
<v Speaker 3>and it's also urgent because you need that CSS really quickly,

256
00:19:43.079 --> 00:19:45.960
<v Speaker 3>and JavaScript can be somewhere in the middle between these two.

257
00:19:46.599 --> 00:19:52.839
<v Speaker 4>Yeah, yeah, I guess fonts also is you know, one

258
00:19:52.880 --> 00:19:56.880
<v Speaker 4>of those assets which is like there's no good way

259
00:19:57.119 --> 00:20:01.519
<v Speaker 4>to load them because they are potentially important for branding

260
00:20:01.799 --> 00:20:06.359
<v Speaker 4>and user experience and whatnot. But if they don't download,

261
00:20:06.440 --> 00:20:10.559
<v Speaker 4>then you fall system fonts. That's also like it's still

262
00:20:10.599 --> 00:20:17.240
<v Speaker 4>a usable site. So yeah, there's also so it's an

263
00:20:17.319 --> 00:20:22.119
<v Speaker 4>interesting distinction between important and urgent. I think that there's

264
00:20:22.240 --> 00:20:29.640
<v Speaker 4>also no current way like Another interesting distinction that there's

265
00:20:29.680 --> 00:20:34.599
<v Speaker 4>no way to express today is the difference between when

266
00:20:34.599 --> 00:20:38.119
<v Speaker 4>you want the script to load and when you want

267
00:20:38.160 --> 00:20:43.200
<v Speaker 4>the script to execute, and at least for acing scripts,

268
00:20:43.359 --> 00:20:46.160
<v Speaker 4>those two happen at the same time. As soon as

269
00:20:46.160 --> 00:20:50.240
<v Speaker 4>the script is loaded and the main thread is clear,

270
00:20:50.680 --> 00:20:53.559
<v Speaker 4>that script gets executed, and that may or may not

271
00:20:53.640 --> 00:20:57.640
<v Speaker 4>be the right choice depending on when you need that script.

272
00:20:58.319 --> 00:21:03.279
<v Speaker 4>So there are scripts that you want them to like

273
00:21:03.400 --> 00:21:07.960
<v Speaker 4>load earlier, but still want to be able to control

274
00:21:08.000 --> 00:21:12.079
<v Speaker 4>their execution either manually, and then you can use preload

275
00:21:12.160 --> 00:21:17.039
<v Speaker 4>for that, but that is hacky and cumbersome or otherwise.

276
00:21:17.119 --> 00:21:21.119
<v Speaker 4>The only currently official milestone you have in the page

277
00:21:21.839 --> 00:21:26.720
<v Speaker 4>life cycle is the down content loaded when the whole

278
00:21:26.880 --> 00:21:32.880
<v Speaker 4>HTML finished parsing, that's when the third scripts trigger. And yeah,

279
00:21:33.119 --> 00:21:38.160
<v Speaker 4>there's no way today to express different preferences there.

280
00:21:39.359 --> 00:21:43.119
<v Speaker 3>And again there is even a middle step in between

281
00:21:43.160 --> 00:21:47.240
<v Speaker 3>the two that's kind of less important but still exists

282
00:21:47.720 --> 00:21:49.960
<v Speaker 3>that people might want to be aware of, which is

283
00:21:49.960 --> 00:21:55.440
<v Speaker 3>the parsing. So you're really downloading the script, you're parsing

284
00:21:55.480 --> 00:22:00.880
<v Speaker 3>the script, and then you're executing the parts the parted script. Now.

285
00:22:01.079 --> 00:22:07.039
<v Speaker 3>Per my recollection, some browsers, not all browsers can parse

286
00:22:07.079 --> 00:22:11.240
<v Speaker 3>the script as it downloads. Some of them can even

287
00:22:11.319 --> 00:22:15.559
<v Speaker 3>do it off off of the main thread. Some don't.

288
00:22:16.359 --> 00:22:20.079
<v Speaker 3>Some bundlers get in the way of this by putting

289
00:22:20.319 --> 00:22:26.440
<v Speaker 3>all the script inside strings and then converting those strings

290
00:22:26.480 --> 00:22:32.279
<v Speaker 3>into scripts, which I never really understood why bundlers do that,

291
00:22:32.599 --> 00:22:33.640
<v Speaker 3>but some of them do.

292
00:22:34.319 --> 00:22:40.119
<v Speaker 4>I did not know that. That's that's interesting, and that seems.

293
00:22:41.519 --> 00:22:45.960
<v Speaker 3>Yeah, I think webpack does that in certain situations, at.

294
00:22:45.920 --> 00:22:49.480
<v Speaker 6>Least I wonder if it's dev mode.

295
00:22:50.680 --> 00:22:53.240
<v Speaker 3>I don't think so. I think that if you I don't.

296
00:22:53.279 --> 00:22:55.119
<v Speaker 3>I don't think it's defoe necessarily.

297
00:22:55.799 --> 00:23:00.200
<v Speaker 4>Okay, that's that's interesting, and that can also that can

298
00:23:00.200 --> 00:23:05.400
<v Speaker 4>get in the way of yeah, of parts like a

299
00:23:05.519 --> 00:23:09.599
<v Speaker 4>parallel parsing in the background. It can also maybe get

300
00:23:09.640 --> 00:23:11.920
<v Speaker 4>in the way of code caching, although I guess if

301
00:23:11.960 --> 00:23:20.200
<v Speaker 4>those strings don't change then eventually yeah, I'm yeah, not sure,

302
00:23:20.279 --> 00:23:23.160
<v Speaker 4>but it's it seems less than idea.

303
00:23:23.880 --> 00:23:30.119
<v Speaker 3>So you were saying that we can separate so the

304
00:23:31.279 --> 00:23:35.559
<v Speaker 3>downloading and parsing can happen together. Not even so we

305
00:23:35.680 --> 00:23:41.319
<v Speaker 3>can actually download without parsing by prefetching. We can download

306
00:23:41.359 --> 00:23:47.319
<v Speaker 3>and parse together but not execute by preloading, or we

307
00:23:47.359 --> 00:23:51.119
<v Speaker 3>can just load the script which does all three or

308
00:23:51.160 --> 00:23:54.640
<v Speaker 3>maybe avoid some of them if you've already prefetched or preloaded.

309
00:23:55.240 --> 00:23:57.880
<v Speaker 4>Yes, but the problem with the script loading, like if

310
00:23:58.240 --> 00:24:01.839
<v Speaker 4>that the most straightforward mechanism for just loading the script

311
00:24:02.400 --> 00:24:05.680
<v Speaker 4>doesn't give you any control regarding to when that script

312
00:24:05.720 --> 00:24:10.480
<v Speaker 4>is executed, at least when you're going with acinkscripts and

313
00:24:11.279 --> 00:24:13.599
<v Speaker 4>like we deferred as well give to you a certain

314
00:24:13.640 --> 00:24:17.880
<v Speaker 4>point in time in which your script will execute.

315
00:24:18.359 --> 00:24:22.960
<v Speaker 3>And yeah, so talking about the sink scripts for a second.

316
00:24:23.000 --> 00:24:28.160
<v Speaker 3>So sink script scripts become a sink either because you

317
00:24:28.319 --> 00:24:33.440
<v Speaker 3>explicitly put the sync attribute on the script tag or

318
00:24:33.720 --> 00:24:39.799
<v Speaker 3>if you've added them dynamically into the HTML. Then there

319
00:24:39.799 --> 00:24:44.599
<v Speaker 3>are sync by default as I recall, or if there

320
00:24:44.640 --> 00:24:48.799
<v Speaker 3>are our modules by default of sync or deferred. I

321
00:24:48.880 --> 00:24:51.279
<v Speaker 3>always forgetfer.

322
00:24:50.480 --> 00:24:52.119
<v Speaker 4>Modules are deferred by default.

323
00:24:52.680 --> 00:24:56.799
<v Speaker 3>Okay, So those are the two scenarios in which it's

324
00:24:56.799 --> 00:25:01.960
<v Speaker 3>a sink. A sink, as its name implies, downloads without blocking.

325
00:25:02.400 --> 00:25:05.319
<v Speaker 3>It downloads the background. But the problem with it, as

326
00:25:05.359 --> 00:25:09.799
<v Speaker 3>you said, is that it's executed as soon as it's

327
00:25:10.400 --> 00:25:13.960
<v Speaker 3>finished downloading, and the browser can execute it if we'll

328
00:25:14.039 --> 00:25:17.680
<v Speaker 3>execute it. Yes, I mean that there's no guarantee about

329
00:25:17.920 --> 00:25:21.079
<v Speaker 3>order of things and what else the browser or may

330
00:25:21.200 --> 00:25:22.279
<v Speaker 3>or may not have done.

331
00:25:22.640 --> 00:25:28.319
<v Speaker 4>Yeah, and beyond the lack of guarantees regarding ordering, I've

332
00:25:28.359 --> 00:25:32.319
<v Speaker 4>seen a lot of cases in the past where you know,

333
00:25:32.400 --> 00:25:39.200
<v Speaker 4>people have some scripts are critical for rendering. They are

334
00:25:39.519 --> 00:25:43.200
<v Speaker 4>like they contain they render the main content, and other

335
00:25:43.319 --> 00:25:46.759
<v Speaker 4>scripts aren't. People load all of them with acing scripts.

336
00:25:47.599 --> 00:25:52.920
<v Speaker 4>And then if you naively preload those scripts. Basically, if

337
00:25:53.039 --> 00:25:57.400
<v Speaker 4>if you make acing script go faster, some pages will

338
00:25:57.440 --> 00:26:01.640
<v Speaker 4>get slower, some pages will get will get faster, and

339
00:26:01.720 --> 00:26:07.400
<v Speaker 4>some will see a mix of like essentially both where

340
00:26:08.240 --> 00:26:12.119
<v Speaker 4>some parts of the like some parts of the critical experience,

341
00:26:12.200 --> 00:26:14.880
<v Speaker 4>get faster, but then they there are other scripts that

342
00:26:14.920 --> 00:26:18.559
<v Speaker 4>should have run later that get in the way because

343
00:26:19.279 --> 00:26:24.160
<v Speaker 4>execute execution times essentially grabs a hold of the of

344
00:26:24.200 --> 00:26:27.799
<v Speaker 4>the main thread for things that aren't critical.

345
00:26:29.079 --> 00:26:32.799
<v Speaker 3>Yeah. So again you're you're saying something is not urgent,

346
00:26:33.000 --> 00:26:35.880
<v Speaker 3>I'll make it a sync. But what you're not taking

347
00:26:35.920 --> 00:26:40.559
<v Speaker 3>into account is that the browser will start downloading it immediately,

348
00:26:40.720 --> 00:26:44.039
<v Speaker 3>even if it's a lower priority, and if it happens

349
00:26:44.079 --> 00:26:48.319
<v Speaker 3>to be a relatively quick download, then it might get

350
00:26:48.400 --> 00:26:53.079
<v Speaker 3>executed faster than you expect. Ahead of more more urgent stuff,

351
00:26:53.559 --> 00:26:57.519
<v Speaker 3>and if its execution is lengthy for any reason whatsoever,

352
00:26:57.839 --> 00:27:01.480
<v Speaker 3>because it loops up to a trillion or what, then

353
00:27:01.720 --> 00:27:06.599
<v Speaker 3>you're basically stuck. So you either need to write if

354
00:27:06.640 --> 00:27:08.839
<v Speaker 3>it's your own script, you need to write it in

355
00:27:08.880 --> 00:27:13.039
<v Speaker 3>a way that ensures that it doesn't execute really too soon,

356
00:27:13.920 --> 00:27:17.200
<v Speaker 3>or alternatively, you might want to load it at a

357
00:27:17.279 --> 00:27:19.759
<v Speaker 3>later time, not just using a sin.

358
00:27:20.359 --> 00:27:26.359
<v Speaker 4>Yeah, and in the past, I've seen optimizations that preloaded

359
00:27:26.440 --> 00:27:31.599
<v Speaker 4>things and made like made everything slower because those acing

360
00:27:31.680 --> 00:27:33.880
<v Speaker 4>scripts ran too too early.

361
00:27:35.039 --> 00:27:37.400
<v Speaker 3>And again we kind of spoke about it with Robin

362
00:27:37.480 --> 00:27:41.079
<v Speaker 3>as well. The reason that people preload scripts. You might ask,

363
00:27:41.160 --> 00:27:44.759
<v Speaker 3>if I'm loading scripts up front, why would I preload

364
00:27:44.839 --> 00:27:48.640
<v Speaker 3>the scripts? You know, it seems like a useless operation.

365
00:27:49.319 --> 00:27:54.079
<v Speaker 3>But the thing is that preloading actually impacted the download

366
00:27:54.119 --> 00:27:58.559
<v Speaker 3>priority or could impact the download priority, which could make

367
00:27:58.599 --> 00:28:02.599
<v Speaker 3>the scripts and I'm making air quotes download faster. These days,

368
00:28:02.640 --> 00:28:06.279
<v Speaker 3>you've got more let's call it the natural way of

369
00:28:06.319 --> 00:28:10.920
<v Speaker 3>doing it, which is the fetch priority attribute.

370
00:28:11.359 --> 00:28:16.880
<v Speaker 4>Yeah, but you also have you know, there are systems

371
00:28:16.880 --> 00:28:26.000
<v Speaker 4>out there who detect scripts as get for example, scripture

372
00:28:26.079 --> 00:28:31.359
<v Speaker 4>or else from run data and then automatically preload those

373
00:28:31.400 --> 00:28:35.440
<v Speaker 4>in order to accel, Like, let's get all the scripts

374
00:28:35.440 --> 00:28:40.640
<v Speaker 4>that loaded before FCPO or LCP, preload them and then

375
00:28:40.720 --> 00:28:44.440
<v Speaker 4>make things faster. And some of those scripts are in

376
00:28:44.759 --> 00:28:47.519
<v Speaker 4>HTML and could have just had the fetch priority, but

377
00:28:47.559 --> 00:28:53.160
<v Speaker 4>some of them are laid discovered and are dynamically injected

378
00:28:53.240 --> 00:28:56.240
<v Speaker 4>through other scripts, and that part is not like it's

379
00:28:56.359 --> 00:29:00.359
<v Speaker 4>less trivial like in those cases helps more.

380
00:29:02.160 --> 00:29:03.160
<v Speaker 3>Also, we used to.

381
00:29:03.079 --> 00:29:08.480
<v Speaker 4>Have a thing called server push, which even like loaded

382
00:29:08.519 --> 00:29:12.680
<v Speaker 4>these scripts even earlier, and those kind of optimizations often

383
00:29:12.880 --> 00:29:20.279
<v Speaker 4>ended up with basically results, Yeah, bimodal results. Some pages

384
00:29:20.319 --> 00:29:24.119
<v Speaker 4>get way faster, some pages get way slower, and.

385
00:29:24.359 --> 00:29:27.680
<v Speaker 3>Some pages get faster in some scenarios and slower in

386
00:29:27.720 --> 00:29:32.920
<v Speaker 3>other scenarios, like depending on network conditions and stuff like that. Yeah,

387
00:29:32.960 --> 00:29:33.680
<v Speaker 3>so we live.

388
00:29:33.720 --> 00:29:34.359
<v Speaker 1>So what do we do?

389
00:29:34.400 --> 00:29:34.559
<v Speaker 3>Then?

390
00:29:36.640 --> 00:29:39.440
<v Speaker 1>It sounds like you're kind of outlining what the issues

391
00:29:39.960 --> 00:29:45.160
<v Speaker 1>could be. But then, yeah, what do I, as the

392
00:29:45.200 --> 00:29:48.240
<v Speaker 1>regular old web developer do to make this better?

393
00:29:51.119 --> 00:29:57.279
<v Speaker 4>So right now, I don't really have I don't have

394
00:29:57.319 --> 00:30:01.559
<v Speaker 4>a perfect answer. I can, like, I think, as a

395
00:30:01.559 --> 00:30:06.400
<v Speaker 4>web developer, you should probably prefer deferred scripts over.

396
00:30:06.519 --> 00:30:11.920
<v Speaker 3>As is the good baseline. Always start with defer with

397
00:30:12.000 --> 00:30:12.680
<v Speaker 3>you when you can.

398
00:30:13.359 --> 00:30:19.400
<v Speaker 4>Yeah, with the caveat that deferred scripts all run in

399
00:30:19.480 --> 00:30:22.960
<v Speaker 4>a singe like all of your pages. Deferred scripts run

400
00:30:22.960 --> 00:30:26.559
<v Speaker 4>in a single task and they don't get interrupted. So

401
00:30:27.319 --> 00:30:34.079
<v Speaker 4>that could be a source of responsiveness issues because there

402
00:30:34.119 --> 00:30:34.440
<v Speaker 4>is that.

403
00:30:35.559 --> 00:30:37.799
<v Speaker 3>I think you need to explain what that means.

404
00:30:38.039 --> 00:30:42.559
<v Speaker 4>Okay, sure, Let's say I have a page with ten

405
00:30:42.720 --> 00:30:48.279
<v Speaker 4>different deferred scripts from different sources. All of these scripts

406
00:30:49.559 --> 00:30:55.039
<v Speaker 4>will run one after the other without the ability for

407
00:30:55.279 --> 00:31:01.279
<v Speaker 4>browsers to interject and handle events while all those scripts

408
00:31:01.279 --> 00:31:06.960
<v Speaker 4>are running. At least that's the current Chromium implementation, and

409
00:31:07.000 --> 00:31:11.440
<v Speaker 4>I believe other browsers follow the same pattern. It's not

410
00:31:11.759 --> 00:31:18.160
<v Speaker 4>really defined in like the spec doesn't force that kind

411
00:31:18.200 --> 00:31:20.640
<v Speaker 4>of behavior as far as I know. But at the

412
00:31:20.640 --> 00:31:24.039
<v Speaker 4>same time, it will be somewhat risky to change it

413
00:31:24.079 --> 00:31:28.759
<v Speaker 4>because pages can break if side effects can now be

414
00:31:28.880 --> 00:31:35.759
<v Speaker 4>interleaved in between in between the first scripts. So basically

415
00:31:35.759 --> 00:31:39.480
<v Speaker 4>what that means is that, yeah, we can't handle any

416
00:31:39.519 --> 00:31:45.240
<v Speaker 4>events between those different scripts. We can't handle any micro tasks,

417
00:31:45.440 --> 00:31:49.079
<v Speaker 4>any promise resolutions, and that.

418
00:31:49.920 --> 00:31:52.759
<v Speaker 3>Going back to your example. If we've got ten scripts

419
00:31:52.759 --> 00:31:55.319
<v Speaker 3>and each one of them runs for one hundred milliseconds

420
00:31:55.359 --> 00:31:58.079
<v Speaker 3>and effectively your browser is stuck for a whole second

421
00:31:58.519 --> 00:32:03.279
<v Speaker 3>and won't respond to any user interactions doing that one second,

422
00:32:03.359 --> 00:32:05.240
<v Speaker 3>which might be less than idea.

423
00:32:06.200 --> 00:32:14.319
<v Speaker 4>Yeah, so, yeah, so I would like my baseline recommendation

424
00:32:14.400 --> 00:32:17.640
<v Speaker 4>would be deferred scripts, but there's this caveat to take

425
00:32:17.640 --> 00:32:22.119
<v Speaker 4>into account. If your scripts are if you expect those

426
00:32:22.160 --> 00:32:25.200
<v Speaker 4>scripts to run for a long while, then maybe deferred

427
00:32:25.240 --> 00:32:29.079
<v Speaker 4>script is not the best option. There are currently there's

428
00:32:29.200 --> 00:32:37.240
<v Speaker 4>current effort to modify this behavior, but yeah, it's not

429
00:32:37.240 --> 00:32:42.400
<v Speaker 4>not trivial because there is risk compatibility risk in changing it.

430
00:32:44.680 --> 00:32:54.240
<v Speaker 4>So essentially, yeah, I think that today's best option is maybe,

431
00:32:55.920 --> 00:33:01.079
<v Speaker 4>like yeah, somewhere in the between a SC and defer,

432
00:33:01.200 --> 00:33:03.599
<v Speaker 4>but both of them have drawbacks.

433
00:33:04.319 --> 00:33:09.200
<v Speaker 3>I think that that most bundlers or most meta frameworks

434
00:33:09.799 --> 00:33:16.160
<v Speaker 3>either put use defer with all the downsides because like

435
00:33:16.279 --> 00:33:20.680
<v Speaker 3>we said, it's it's the best of the worst, or alternatively,

436
00:33:20.920 --> 00:33:25.640
<v Speaker 3>they use blocking scripts at the very end of the document.

437
00:33:25.759 --> 00:33:29.000
<v Speaker 3>I think those are the most common ways that most

438
00:33:30.599 --> 00:33:35.119
<v Speaker 3>frameworks use because it's also the safest approach in a

439
00:33:35.119 --> 00:33:35.920
<v Speaker 3>lot of ways.

440
00:33:36.359 --> 00:33:38.160
<v Speaker 4>Yeah, I guess.

441
00:33:38.559 --> 00:33:41.200
<v Speaker 3>And as we said, there are two ways to get

442
00:33:41.319 --> 00:33:46.480
<v Speaker 3>deferred behavior. Either you add the defer attribute or you

443
00:33:46.559 --> 00:33:51.440
<v Speaker 3>put the type equals module, which makes your script anes

444
00:33:51.640 --> 00:33:54.480
<v Speaker 3>M module and then it's deferred by default.

445
00:33:55.200 --> 00:33:59.359
<v Speaker 4>Yeah, which kind of brings me to the problems with

446
00:34:00.519 --> 00:34:02.359
<v Speaker 4>because they are also not.

447
00:34:04.240 --> 00:34:05.880
<v Speaker 6>Like they are.

448
00:34:08.679 --> 00:34:11.400
<v Speaker 4>How a lot of people, at least a lot of

449
00:34:11.400 --> 00:34:16.880
<v Speaker 4>people around me are writing code. They are not necessarily

450
00:34:17.000 --> 00:34:21.480
<v Speaker 4>how a lot of people are delivering code. Bundlers. A

451
00:34:21.480 --> 00:34:26.519
<v Speaker 4>lot of bundlers are turning es M into kumjas or

452
00:34:26.559 --> 00:34:34.800
<v Speaker 4>other classic script patterns. And the reason for that is

453
00:34:34.840 --> 00:34:38.440
<v Speaker 4>that if you deliver yes modules to the browser and

454
00:34:38.599 --> 00:34:46.320
<v Speaker 4>rely on that, essentially have static imports as part of

455
00:34:46.360 --> 00:34:51.119
<v Speaker 4>what you deliver. Those static imports are by definition discovered late.

456
00:34:51.840 --> 00:34:54.960
<v Speaker 4>The browser needs to parse that first script in order

457
00:34:55.000 --> 00:34:59.159
<v Speaker 4>to discover the second layer of imports. It downloads them,

458
00:34:59.239 --> 00:35:03.199
<v Speaker 4>it parses them, and only then it discovers the third

459
00:35:03.280 --> 00:35:05.480
<v Speaker 4>layer of imports, and so on and so forth. So

460
00:35:06.039 --> 00:35:10.159
<v Speaker 4>by definition, you're hitting a waterfall pattern if you are

461
00:35:10.239 --> 00:35:15.719
<v Speaker 4>delivering yes modules as is to the browser.

462
00:35:16.119 --> 00:35:21.199
<v Speaker 3>And those and those static imports, if I recall correctly,

463
00:35:21.440 --> 00:35:23.880
<v Speaker 3>are are blocking right?

464
00:35:25.239 --> 00:35:29.159
<v Speaker 4>They are blocking the script from running. Yes, they all

465
00:35:29.599 --> 00:35:34.039
<v Speaker 4>and Yeah, essentially the whole module tree will wait until

466
00:35:34.119 --> 00:35:37.920
<v Speaker 4>everything is loaded, and only then will it execute in

467
00:35:37.960 --> 00:35:44.199
<v Speaker 4>a single task, similar to how the fur like it. Basically,

468
00:35:44.239 --> 00:35:50.039
<v Speaker 4>you wouldn't have a way to interrupt the browser won't

469
00:35:50.039 --> 00:35:52.920
<v Speaker 4>have a way to interrupt this single task of script

470
00:35:53.000 --> 00:35:56.239
<v Speaker 4>while it's running. So the territory will load at once.

471
00:35:56.360 --> 00:35:59.079
<v Speaker 3>But if you I don't know if you remember, but

472
00:36:00.440 --> 00:36:04.840
<v Speaker 3>it is the browser itself responsive during that import or

473
00:36:04.880 --> 00:36:07.079
<v Speaker 3>is it kind of like an alert or something?

474
00:36:07.679 --> 00:36:17.679
<v Speaker 4>Uh? So the renderer will not be so while everything

475
00:36:17.840 --> 00:36:22.960
<v Speaker 4>is downloaded, the main thread is still free. It's just

476
00:36:23.039 --> 00:36:26.760
<v Speaker 4>when when some like when something when when the module

477
00:36:26.800 --> 00:36:31.920
<v Speaker 4>three starts executing, that's when the main thread.

478
00:36:31.639 --> 00:36:37.199
<v Speaker 3>Blocks, so execution so execution is blocked, but not the

479
00:36:37.239 --> 00:36:40.400
<v Speaker 3>browser until imports finish. Yeah.

480
00:36:40.480 --> 00:36:45.960
<v Speaker 4>Yeah, the download of the imports is done a smous okay,

481
00:36:45.960 --> 00:36:51.239
<v Speaker 4>but it's it's late, Like there's a discoverability problem know

482
00:36:51.320 --> 00:36:54.599
<v Speaker 4>about them until it parses, Like doesn't know about the

483
00:36:54.639 --> 00:36:56.760
<v Speaker 4>next layer until it parses the layer about it?

484
00:36:58.440 --> 00:37:01.440
<v Speaker 3>Okay, but there is at for that kind of isn't

485
00:37:01.440 --> 00:37:03.760
<v Speaker 3>there with module preloads or stuff like that.

486
00:37:04.800 --> 00:37:08.000
<v Speaker 4>Sure, but you would need to module preload the entire

487
00:37:08.360 --> 00:37:17.440
<v Speaker 4>tree in order for in order to solve this discoverability,

488
00:37:17.440 --> 00:37:20.559
<v Speaker 4>you would need to module preload the entire tree. And

489
00:37:22.760 --> 00:37:26.519
<v Speaker 4>one more thing that I was surprised with when poking

490
00:37:26.719 --> 00:37:37.800
<v Speaker 4>at Yes modules from like slightly closer, import maps are

491
00:37:38.280 --> 00:37:41.760
<v Speaker 4>which are maybe I should first start by talking about

492
00:37:41.800 --> 00:37:49.360
<v Speaker 4>import maps. So essentially, import maps enable us to map

493
00:37:51.519 --> 00:37:56.360
<v Speaker 4>module specifiers to URLs, and that has a very strong

494
00:37:58.639 --> 00:38:08.360
<v Speaker 4>attribute of enabling us to avoid invalidating entire trees if

495
00:38:08.480 --> 00:38:13.159
<v Speaker 4>a single module has changed. So if we have a

496
00:38:13.280 --> 00:38:24.280
<v Speaker 4>module that is changed, typically when bundling modules, we are

497
00:38:24.599 --> 00:38:28.360
<v Speaker 4>maintaining a hash or a version of that of that

498
00:38:28.480 --> 00:38:34.920
<v Speaker 4>module in the URL itself, and those hash invalidations because

499
00:38:35.199 --> 00:38:39.719
<v Speaker 4>it essentially if one of the leaf modules have changed,

500
00:38:41.400 --> 00:38:46.599
<v Speaker 4>that it's URL has changed as well. That means that

501
00:38:46.639 --> 00:38:51.039
<v Speaker 4>the module that refers to it also has a content

502
00:38:51.119 --> 00:38:56.000
<v Speaker 4>change that changes its hash, which then propagates up all

503
00:38:56.039 --> 00:38:58.519
<v Speaker 4>the way up the module tree.

504
00:38:58.960 --> 00:39:01.639
<v Speaker 3>Oh so kind of bubble up the module tree if

505
00:39:01.719 --> 00:39:04.920
<v Speaker 3>any leaf kind of changed exactly.

506
00:39:05.719 --> 00:39:09.039
<v Speaker 1>Incidentally, I'm just going to point out that import maps

507
00:39:09.119 --> 00:39:10.920
<v Speaker 1>is what Rails uses now.

508
00:39:10.800 --> 00:39:11.239
<v Speaker 6>Is it's.

509
00:39:12.639 --> 00:39:15.559
<v Speaker 3>Yeah, the whole it's kind of the whole DJH thing

510
00:39:15.639 --> 00:39:20.039
<v Speaker 3>I think is avoiding bundlers and relying on the built

511
00:39:20.039 --> 00:39:24.679
<v Speaker 3>in browser capabilities, which means yes modules, the built in

512
00:39:24.920 --> 00:39:27.280
<v Speaker 3>es modules and import maps.

513
00:39:28.360 --> 00:39:35.559
<v Speaker 4>Yeah, so import maps are great for that purpose, but

514
00:39:36.039 --> 00:39:42.280
<v Speaker 4>they are also, at least today, are rather fragile, and

515
00:39:42.840 --> 00:39:45.679
<v Speaker 4>there can only be a single import map in a document,

516
00:39:46.800 --> 00:39:49.320
<v Speaker 4>and it has to be the first bank that loads

517
00:39:50.519 --> 00:39:56.480
<v Speaker 4>inside of that document. So if you have any module

518
00:39:56.519 --> 00:40:01.400
<v Speaker 4>script that loads before an import map, import map throws,

519
00:40:01.440 --> 00:40:08.239
<v Speaker 4>and nothing of what it does is valid. And if

520
00:40:08.280 --> 00:40:13.800
<v Speaker 4>you have a very large JavaScript app that has let's

521
00:40:13.800 --> 00:40:19.440
<v Speaker 4>say a few thousand modules, which I've now heard multiple

522
00:40:19.559 --> 00:40:24.280
<v Speaker 4>real life examples of in multiple companies, you would have

523
00:40:24.400 --> 00:40:29.960
<v Speaker 4>to load all of these thousands of modules into your

524
00:40:30.079 --> 00:40:32.519
<v Speaker 4>like the mapping for all of those modules will have

525
00:40:32.599 --> 00:40:35.599
<v Speaker 4>to be part of your initial import map, which is

526
00:40:35.639 --> 00:40:38.239
<v Speaker 4>the very first thing that your h email should contain

527
00:40:39.639 --> 00:40:46.079
<v Speaker 4>in line, So there are, yes, there are no ext

528
00:40:46.519 --> 00:40:50.840
<v Speaker 4>no support for external module, external import maps.

529
00:40:52.159 --> 00:40:58.000
<v Speaker 3>And external life better and better. Yeah, I guess, I

530
00:40:58.000 --> 00:41:00.719
<v Speaker 3>guess I see the reason. I mean, given that it's

531
00:41:00.760 --> 00:41:05.079
<v Speaker 3>so urgent and so so fragile, you don't want it

532
00:41:05.119 --> 00:41:08.519
<v Speaker 3>as a separate document that you need to go and

533
00:41:08.519 --> 00:41:13.800
<v Speaker 3>and and download on the side. But but still it's

534
00:41:13.840 --> 00:41:19.440
<v Speaker 3>it's not wonderful too to have this huge thing stuck

535
00:41:19.480 --> 00:41:22.719
<v Speaker 3>at the very beginning of your lovely semantic document.

536
00:41:23.840 --> 00:41:27.559
<v Speaker 4>Uh. Yeah, so I tend to agree. I think that

537
00:41:27.639 --> 00:41:34.719
<v Speaker 4>we like. Basically, what I've spent a large chunk of

538
00:41:34.960 --> 00:41:38.119
<v Speaker 4>my day to day on is trying to figure out

539
00:41:38.199 --> 00:41:45.159
<v Speaker 4>what a spec for having the ability to have multiple modules,

540
00:41:45.599 --> 00:41:49.280
<v Speaker 4>multiple import maps, and then merge them. What would that

541
00:41:49.320 --> 00:41:54.920
<v Speaker 4>look like? And yeah, so I'm I'm basically I think

542
00:41:54.960 --> 00:41:58.840
<v Speaker 4>this is one of the more urgent problems for both

543
00:41:59.719 --> 00:42:04.199
<v Speaker 4>there large JavaScript apps, but also for smaller ones that

544
00:42:04.280 --> 00:42:10.840
<v Speaker 4>don't necessarily have control over their entire content. I don't

545
00:42:10.880 --> 00:42:14.440
<v Speaker 4>know if you like then if you imagine your days

546
00:42:14.480 --> 00:42:17.679
<v Speaker 4>at Wix, like, there are a lot of CMSs that

547
00:42:18.000 --> 00:42:23.199
<v Speaker 4>integrate content from multiple places. Some content is, you know,

548
00:42:23.440 --> 00:42:28.480
<v Speaker 4>coming from the platform, some content is coming from your

549
00:42:29.760 --> 00:42:35.280
<v Speaker 4>customers and their third parties, and you integrate all that together.

550
00:42:35.440 --> 00:42:39.239
<v Speaker 4>And if any one of those folks is using an

551
00:42:39.280 --> 00:42:45.639
<v Speaker 4>import map and another was using modules before it, everything breaks.

552
00:42:46.320 --> 00:42:50.440
<v Speaker 3>Yeah. I'm also thinking of stuff like Google Tag Manager

553
00:42:50.679 --> 00:42:55.440
<v Speaker 3>or any other kind of pixel system which could theoretically

554
00:42:55.719 --> 00:43:00.119
<v Speaker 3>or ideally benefit from such a mechanism. But again, and

555
00:43:00.159 --> 00:43:05.559
<v Speaker 3>you're bringing in resources from multiple vendors, from multiple ur ls.

556
00:43:06.599 --> 00:43:10.960
<v Speaker 3>You know, it's it's it's having a single source of

557
00:43:11.039 --> 00:43:14.719
<v Speaker 3>truth and everything else ignored is a is a very

558
00:43:14.760 --> 00:43:15.800
<v Speaker 3>problematic motor.

559
00:43:18.559 --> 00:43:23.360
<v Speaker 4>I agree, and I think like the yeah, dynamic scriptloading

560
00:43:23.480 --> 00:43:26.199
<v Speaker 4>from third parties, I think that's a very interesting use

561
00:43:26.239 --> 00:43:32.519
<v Speaker 4>case here as well. And yeah, that's so so basically

562
00:43:33.480 --> 00:43:41.280
<v Speaker 4>I think, yeah that right now there are a bunch

563
00:43:41.320 --> 00:43:45.239
<v Speaker 4>of issues with ES modules and important maps and yeah,

564
00:43:45.440 --> 00:43:49.840
<v Speaker 4>I'm I'm on my you know, starting my path to

565
00:43:49.960 --> 00:43:50.559
<v Speaker 4>fixing them.

566
00:43:51.639 --> 00:43:54.559
<v Speaker 3>And it can get even more complicated if you throw

567
00:43:54.679 --> 00:43:57.000
<v Speaker 3>web workers into the mix, I would imagine.

568
00:43:58.840 --> 00:44:02.000
<v Speaker 4>To be honest, I haven't even thought a whole lot

569
00:44:02.039 --> 00:44:08.000
<v Speaker 4>about web workers in this context. I mean there are, yeah,

570
00:44:08.400 --> 00:44:11.559
<v Speaker 4>because right now they don't have a way to like

571
00:44:11.639 --> 00:44:13.519
<v Speaker 4>web workers don't have important.

572
00:44:13.119 --> 00:44:19.039
<v Speaker 3>Maps, and they need it because you can actually Okay,

573
00:44:19.199 --> 00:44:22.039
<v Speaker 3>so first of all, we talked about the various ways

574
00:44:22.119 --> 00:44:25.400
<v Speaker 3>to load scripts. So web workers are another way to

575
00:44:25.480 --> 00:44:29.079
<v Speaker 3>load scripts because if you do a new worker, the

576
00:44:29.159 --> 00:44:32.880
<v Speaker 3>parameter you specify is the script file that gets loaded

577
00:44:33.000 --> 00:44:37.079
<v Speaker 3>into that webworker. So effectively, here's another way to load scripts.

578
00:44:37.519 --> 00:44:41.320
<v Speaker 3>Not only that, there's a parameter that controls whether or

579
00:44:41.360 --> 00:44:43.880
<v Speaker 3>not the script that you load into the web workers

580
00:44:44.559 --> 00:44:47.639
<v Speaker 3>is ESM or not. It's ESM or Classic I think,

581
00:44:47.679 --> 00:44:51.280
<v Speaker 3>and the default is classic, but it might beesm so

582
00:44:51.360 --> 00:44:55.360
<v Speaker 3>you might be loading an ESM script into the webworker,

583
00:44:55.960 --> 00:44:59.480
<v Speaker 3>and then you definitely would need some sort of a

584
00:44:59.559 --> 00:45:04.039
<v Speaker 3>mapping mechanism to work with the worker. Yeah, pun intended

585
00:45:04.119 --> 00:45:05.199
<v Speaker 3>or pun not intended?

586
00:45:06.440 --> 00:45:11.239
<v Speaker 4>I agree? And right now, yeah, import maps are only

587
00:45:11.280 --> 00:45:17.320
<v Speaker 4>defined for documents and for worker. You don't really have

588
00:45:17.440 --> 00:45:19.719
<v Speaker 4>where to inline that import map today.

589
00:45:19.880 --> 00:45:22.400
<v Speaker 3>So would it use the do you again, I don't

590
00:45:22.400 --> 00:45:25.800
<v Speaker 3>know if you remember, but would it use the documents

591
00:45:26.199 --> 00:45:30.079
<v Speaker 3>the parent document? So it just doesn't have a map

592
00:45:30.079 --> 00:45:32.519
<v Speaker 3>at all, And that's it. I can kind of get

593
00:45:32.559 --> 00:45:34.679
<v Speaker 3>it because it might be a shared worker and then

594
00:45:34.719 --> 00:45:37.840
<v Speaker 3>where or or a service worker, and then where would

595
00:45:37.880 --> 00:45:42.480
<v Speaker 3>it take the map from? But the web worker I

596
00:45:42.480 --> 00:45:42.840
<v Speaker 3>don't know.

597
00:45:42.960 --> 00:45:47.679
<v Speaker 4>Maybe yeah, yeah, to be like, I think it's a

598
00:45:47.840 --> 00:45:55.559
<v Speaker 4>very valid case. And yes, yeah, module workers are the future,

599
00:45:55.719 --> 00:46:02.360
<v Speaker 4>especially because import scripts for classic work is also.

600
00:46:04.079 --> 00:46:09.440
<v Speaker 7>Very like that's it's a product. Yeah, yeah, it's bad.

601
00:46:10.400 --> 00:46:16.000
<v Speaker 7>I let's put it this way. I made Wicks significant

602
00:46:16.039 --> 00:46:21.000
<v Speaker 7>loaded scripts and sweat workers scripts significantly faster by hacking

603
00:46:21.039 --> 00:46:24.199
<v Speaker 7>around import scripts, which is yet another way of loading

604
00:46:24.239 --> 00:46:27.480
<v Speaker 7>scripts into the browser. And I won't even go there.

605
00:46:29.000 --> 00:46:31.440
<v Speaker 4>Because it's loading them like if you have a list

606
00:46:31.480 --> 00:46:34.760
<v Speaker 4>of scripts, they will load sequentially.

607
00:46:35.199 --> 00:46:37.559
<v Speaker 3>Synchronously and sequentially.

608
00:46:37.320 --> 00:46:42.559
<v Speaker 4>Secretly and sequentially. And yes, uh and that is like

609
00:46:42.920 --> 00:46:44.400
<v Speaker 4>without any good reason.

610
00:46:46.000 --> 00:46:51.079
<v Speaker 1>So yeah, so or it sounds like you're working on

611
00:46:51.239 --> 00:46:57.800
<v Speaker 1>a new standard, get to handle some of this, So

612
00:46:57.960 --> 00:47:02.440
<v Speaker 1>what what does what is that look like? And what

613
00:47:02.519 --> 00:47:04.639
<v Speaker 1>are kind of the hang ups getting there?

614
00:47:08.199 --> 00:47:13.159
<v Speaker 4>So yeah, So basically I've been like, I'm planning to

615
00:47:13.239 --> 00:47:21.800
<v Speaker 4>work on a bunch of standard improvements or web platform

616
00:47:21.840 --> 00:47:25.599
<v Speaker 4>improvements on that front. So the very first thing that

617
00:47:25.760 --> 00:47:32.400
<v Speaker 4>already shifted that was missing from my perspective for ES

618
00:47:32.559 --> 00:47:40.719
<v Speaker 4>modules is integrity sub resource integrity. So SRI if you're

619
00:47:41.039 --> 00:47:47.400
<v Speaker 4>familiar with that for regular for classic scripts, you have

620
00:47:47.559 --> 00:47:51.800
<v Speaker 4>an integrity attribute where you can say only execute this

621
00:47:51.920 --> 00:47:58.119
<v Speaker 4>script if it matches this hash. So if as part

622
00:47:58.159 --> 00:48:01.039
<v Speaker 4>of my build process, I like I have controls over

623
00:48:01.079 --> 00:48:06.239
<v Speaker 4>my built process, then I upload these assets somewhere and

624
00:48:06.280 --> 00:48:08.519
<v Speaker 4>then when the site loads, I want to make sure

625
00:48:08.599 --> 00:48:12.440
<v Speaker 4>that my assets match what I think they should be

626
00:48:13.239 --> 00:48:17.639
<v Speaker 4>and no one, no malicious actor has switched them up

627
00:48:17.639 --> 00:48:18.199
<v Speaker 4>in between.

628
00:48:20.480 --> 00:48:21.920
<v Speaker 3>Been in the middle kind of attack.

629
00:48:22.559 --> 00:48:27.519
<v Speaker 4>It's not really men in the middle. It's more of

630
00:48:27.559 --> 00:48:31.519
<v Speaker 4>a like you know, I don't know if there is

631
00:48:31.559 --> 00:48:35.159
<v Speaker 4>a fancy name for it, but basically the content swap

632
00:48:35.280 --> 00:48:38.639
<v Speaker 4>at rest, so the content is uploaded to your hosting

633
00:48:38.679 --> 00:48:43.719
<v Speaker 4>provider and then someone with the keys can swap it

634
00:48:43.880 --> 00:48:48.679
<v Speaker 4>to add malicious payload. You want to avoid that scenario.

635
00:48:48.760 --> 00:48:52.760
<v Speaker 4>You want to have integrity checks in place in the browser.

636
00:48:53.519 --> 00:48:56.039
<v Speaker 3>So you can actually put an attribute on the script

637
00:48:56.079 --> 00:48:59.079
<v Speaker 3>tag that says this is the check sum that my

638
00:48:59.199 --> 00:49:03.920
<v Speaker 3>script should have and if it doesn't, then just no digit.

639
00:49:04.639 --> 00:49:10.639
<v Speaker 4>Yes, same for CSS and preloads, and that's it. You

640
00:49:10.679 --> 00:49:13.440
<v Speaker 4>can't do that for any other type. But that is

641
00:49:14.400 --> 00:49:20.000
<v Speaker 4>sufficient because images are presumably not very important, and at

642
00:49:20.000 --> 00:49:23.079
<v Speaker 4>the same time they are also harder to pull off,

643
00:49:23.199 --> 00:49:27.039
<v Speaker 4>like harder to do that integrity check without slowing them down.

644
00:49:28.440 --> 00:49:34.960
<v Speaker 4>But this piece was missing from module imports. So if

645
00:49:35.000 --> 00:49:40.280
<v Speaker 4>you have dynamic imports for modules where you want to

646
00:49:42.320 --> 00:49:48.280
<v Speaker 4>load the critical scripts upfront and then dynamically load stuff

647
00:49:48.280 --> 00:49:51.760
<v Speaker 4>you need for later once things calm down or once

648
00:49:51.800 --> 00:49:56.719
<v Speaker 4>the user did something, those scripts didn't have any way

649
00:49:56.960 --> 00:50:05.360
<v Speaker 4>to get an integrity check without jumping through many hoops

650
00:50:05.719 --> 00:50:08.400
<v Speaker 4>because it didn't have like there was no native support

651
00:50:08.519 --> 00:50:12.440
<v Speaker 4>for is modules and integrity checks, so the first step

652
00:50:12.760 --> 00:50:20.199
<v Speaker 4>I took in that potentially long path to making U

653
00:50:20.920 --> 00:50:24.920
<v Speaker 4>script loading better is to add that kind of that

654
00:50:25.039 --> 00:50:28.480
<v Speaker 4>kind of support with an integrity section as part of

655
00:50:28.480 --> 00:50:37.519
<v Speaker 4>the important map. So that has lended in Chrome last week,

656
00:50:38.039 --> 00:50:41.000
<v Speaker 4>hitting stable last week, and it's on its way to

657
00:50:42.119 --> 00:50:48.840
<v Speaker 4>Safari eighteen, which is presumably gonna hit users sometimes this fall.

658
00:50:50.960 --> 00:50:51.800
<v Speaker 3>So that.

659
00:50:53.599 --> 00:51:04.639
<v Speaker 4>Yeah, yeah, I'm it was a relatively relatively fast project. Basically,

660
00:51:04.800 --> 00:51:10.800
<v Speaker 4>I during a flight put together initial prototype, initial spec

661
00:51:10.960 --> 00:51:16.519
<v Speaker 4>and uh rudimentary tests and then like the whole thing

662
00:51:16.599 --> 00:51:18.639
<v Speaker 4>took roughly two weeks.

663
00:51:18.320 --> 00:51:23.079
<v Speaker 3>To you built Chrome while on the flight.

664
00:51:23.639 --> 00:51:25.920
<v Speaker 4>Yes, this is what.

665
00:51:26.039 --> 00:51:26.840
<v Speaker 6>I fight.

666
00:51:32.159 --> 00:51:35.440
<v Speaker 3>Interesting, Yeah to each I guess.

667
00:51:35.599 --> 00:51:37.239
<v Speaker 1>So you've got the integrity check.

668
00:51:42.440 --> 00:51:45.480
<v Speaker 4>Yeah, that was the first step. I think that the

669
00:51:45.519 --> 00:51:53.440
<v Speaker 4>next step is probably the multiple important maps and dynamic

670
00:51:53.480 --> 00:51:57.880
<v Speaker 4>important maps. Okay, I think that that's the the next

671
00:51:57.920 --> 00:52:06.119
<v Speaker 4>thing to reduce fragility and and and generally, yeah, make

672
00:52:06.199 --> 00:52:10.079
<v Speaker 4>it more more feasible for large apps to use import

673
00:52:10.079 --> 00:52:15.880
<v Speaker 4>maps because the cash testcade problems that they solve are real.

674
00:52:16.159 --> 00:52:19.760
<v Speaker 4>But yeah, that the blocking nature is blocking.

675
00:52:20.000 --> 00:52:26.760
<v Speaker 3>Yeah, but that opens interesting questions like unless I'm I'm

676
00:52:26.800 --> 00:52:31.480
<v Speaker 3>overthinking at maybe, which is possible. I do that, but

677
00:52:31.719 --> 00:52:36.880
<v Speaker 3>it for example, it means that script A can control

678
00:52:36.920 --> 00:52:43.480
<v Speaker 3>where unrelated script B loads from. I'm kind of kind

679
00:52:43.480 --> 00:52:45.800
<v Speaker 3>of it's kind of like what I would do with

680
00:52:45.920 --> 00:52:49.480
<v Speaker 3>a service worker in a sense, like I can tell

681
00:52:49.519 --> 00:52:54.559
<v Speaker 3>it it says this RL, but actually downloaded from that URL.

682
00:52:55.760 --> 00:52:59.480
<v Speaker 3>So with dynamic import maps.

683
00:52:59.599 --> 00:53:07.800
<v Speaker 4>So with dynamic import maps, essentially you would have like

684
00:53:07.960 --> 00:53:12.320
<v Speaker 4>you wouldn't have the ability to redefine a script that

685
00:53:12.480 --> 00:53:19.760
<v Speaker 4>was already loaded or a script that was already defined

686
00:53:19.800 --> 00:53:23.079
<v Speaker 4>in another import map. So you wouldn't be able to

687
00:53:23.159 --> 00:53:24.400
<v Speaker 4>redefine specifier.

688
00:53:24.679 --> 00:53:29.360
<v Speaker 3>So it's not like cascading. It's kind of like a

689
00:53:29.480 --> 00:53:31.480
<v Speaker 3>join sort of a thing, a.

690
00:53:31.599 --> 00:53:39.039
<v Speaker 4>Join where you know first in stays kind of yeah,

691
00:53:39.199 --> 00:53:43.719
<v Speaker 4>no variety, Yeah, and that is still up for grabs.

692
00:53:43.719 --> 00:53:47.199
<v Speaker 4>Like I have an algorithm in mind, I will like,

693
00:53:48.840 --> 00:53:53.639
<v Speaker 4>once I have a pr up, I will definitely share

694
00:53:53.679 --> 00:53:56.400
<v Speaker 4>it with the world as well as with you. And yeah,

695
00:53:56.519 --> 00:53:59.119
<v Speaker 4>I'm happy to get feedback on that. But I think

696
00:53:59.159 --> 00:54:06.559
<v Speaker 4>it's Yeah, I think that the model where you can't, yeah,

697
00:54:06.880 --> 00:54:10.239
<v Speaker 4>you can't override something that was already defined gives us

698
00:54:10.360 --> 00:54:16.199
<v Speaker 4>enough safety for some definition of safety. I mean theoretically,

699
00:54:17.519 --> 00:54:21.679
<v Speaker 4>like it, import maps are essentially scripts that are running

700
00:54:21.679 --> 00:54:26.800
<v Speaker 4>in the top level documents context, so they can like

701
00:54:27.039 --> 00:54:31.920
<v Speaker 4>the fact that they can override things is not a

702
00:54:32.000 --> 00:54:36.239
<v Speaker 4>security risk because you already like you introduced the vampire

703
00:54:36.239 --> 00:54:42.280
<v Speaker 4>into your home kind of kind of scenario. But at

704
00:54:42.280 --> 00:54:45.800
<v Speaker 4>the same time, we don't want developers to be surprised,

705
00:54:45.800 --> 00:54:49.239
<v Speaker 4>and we don't want import maps that are coming from

706
00:54:49.280 --> 00:54:52.960
<v Speaker 4>different sources to collide. So yeah, we want this to

707
00:54:53.000 --> 00:54:54.400
<v Speaker 4>be as predictable as possible.

708
00:54:56.679 --> 00:55:03.480
<v Speaker 1>There's a question on Twitter from Gall Weiseman. I'm sorry

709
00:55:03.480 --> 00:55:04.679
<v Speaker 1>if I say your name wrong.

710
00:55:04.880 --> 00:55:06.880
<v Speaker 3>My friend as a guest.

711
00:55:06.840 --> 00:55:12.840
<v Speaker 8>I think yeah, but he asked about a compromise script

712
00:55:12.840 --> 00:55:15.440
<v Speaker 8>can potentially leverage an I frame to bypass the SRI

713
00:55:15.719 --> 00:55:20.480
<v Speaker 8>checks dictated by the top document and thus load a

714
00:55:20.599 --> 00:55:23.559
<v Speaker 8>remote third party script that's not allowed to load.

715
00:55:24.079 --> 00:55:27.440
<v Speaker 1>I think the I think is in parentheses. Is that

716
00:55:27.519 --> 00:55:30.559
<v Speaker 1>being taken into consideration? So this is back on the SRI.

717
00:55:35.000 --> 00:55:40.599
<v Speaker 4>So knowing Gall, I'm sure he has a scenarian mind

718
00:55:40.599 --> 00:55:49.519
<v Speaker 4>that I don't, but I think that that non verifiable.

719
00:55:51.360 --> 00:55:56.000
<v Speaker 4>Like an I frame we're talking like, does he mention

720
00:55:56.119 --> 00:55:58.360
<v Speaker 4>like same origin cross origin because.

721
00:55:58.239 --> 00:56:01.079
<v Speaker 3>It would have to be the same origin otherwise.

722
00:56:00.559 --> 00:56:04.960
<v Speaker 4>It because otherwise it's irrelevant. Yeah, the same origin I frame.

723
00:56:06.079 --> 00:56:11.039
<v Speaker 4>If it's compromised, then yeah, it would have a different

724
00:56:11.400 --> 00:56:17.920
<v Speaker 4>as like it would have a different integrity Like the

725
00:56:18.079 --> 00:56:21.400
<v Speaker 4>import map doesn't apply to same origin I frames, so

726
00:56:21.480 --> 00:56:26.119
<v Speaker 4>it would be able to load that script at the

727
00:56:26.159 --> 00:56:31.719
<v Speaker 4>same time. I wouldn't expect the cash to Like if

728
00:56:31.800 --> 00:56:35.239
<v Speaker 4>that script is cashed from the same origin I frame,

729
00:56:35.320 --> 00:56:38.360
<v Speaker 4>I wouldn't expect it to be loaded at the top

730
00:56:38.480 --> 00:56:44.480
<v Speaker 4>level without failing, like because one has integrity checks and

731
00:56:44.519 --> 00:56:48.159
<v Speaker 4>one doesn't. So I would expect the browser to fail

732
00:56:48.199 --> 00:56:50.480
<v Speaker 4>that load at the top level frame.

733
00:56:53.119 --> 00:56:56.559
<v Speaker 3>I also actually have a question like looking at all

734
00:56:56.599 --> 00:57:03.519
<v Speaker 3>the stuff that you're doing, so the sr EY, the

735
00:57:03.519 --> 00:57:08.239
<v Speaker 3>the the module maps, also the work on compression dictionaries.

736
00:57:08.280 --> 00:57:10.559
<v Speaker 3>I think we had Patrick Meaning on the show to

737
00:57:10.639 --> 00:57:14.519
<v Speaker 3>talk about it. All this stuff is about how to

738
00:57:14.760 --> 00:57:19.880
<v Speaker 3>better load JavaScript into the browser so that we don't

739
00:57:20.079 --> 00:57:25.039
<v Speaker 3>need bundlers as much, or that bundlers can be maybe

740
00:57:25.159 --> 00:57:29.039
<v Speaker 3>less heavy handed than they are. You're you're shaking your head.

741
00:57:29.679 --> 00:57:32.920
<v Speaker 4>That's not so I think we need butlers. I think

742
00:57:32.960 --> 00:57:40.000
<v Speaker 4>that there are some issues with like physics when it

743
00:57:40.119 --> 00:57:45.920
<v Speaker 4>comes to loading a lot of small modules into the browser.

744
00:57:46.400 --> 00:57:52.960
<v Speaker 4>Browsers have overhead like per request overhead, that overhead is unlikely.

745
00:57:54.199 --> 00:57:59.800
<v Speaker 3>Mhm, just cookie, look up inter process communication.

746
00:58:00.239 --> 00:58:06.280
<v Speaker 4>Yes, foundations all that. Like that takes time and it

747
00:58:07.159 --> 00:58:10.039
<v Speaker 4>I think at the time we looked at Chrome and

748
00:58:10.079 --> 00:58:16.119
<v Speaker 4>it was around like one to two millisecond per a resource,

749
00:58:16.480 --> 00:58:21.440
<v Speaker 4>which is not awful unless you're loading five thousand resources.

750
00:58:22.599 --> 00:58:25.400
<v Speaker 4>And in that case, you're talking about like ten seconds

751
00:58:25.480 --> 00:58:28.639
<v Speaker 4>just to get the thing. Like even if it's on

752
00:58:28.840 --> 00:58:34.079
<v Speaker 4>disc and if it's like zero RTT on the network,

753
00:58:34.239 --> 00:58:37.480
<v Speaker 4>it still takes a long time to load these assets.

754
00:58:39.159 --> 00:58:43.199
<v Speaker 4>If you so, then those are is unlikely to go away,

755
00:58:44.280 --> 00:58:45.360
<v Speaker 4>go ahead.

756
00:58:45.400 --> 00:58:50.519
<v Speaker 6>In those cases. Isn't the problem somewhere else? I mean,

757
00:58:50.719 --> 00:58:54.119
<v Speaker 6>if your applications designed in such a way that you

758
00:58:54.159 --> 00:58:58.800
<v Speaker 6>don't have any sort of segmentation and you're loading five

759
00:58:58.840 --> 00:59:03.519
<v Speaker 6>thousand assets, it just it just kind of seems disproportionate,

760
00:59:03.599 --> 00:59:06.159
<v Speaker 6>you know, like is this really the problem over here?

761
00:59:07.400 --> 00:59:10.400
<v Speaker 3>But but AJ, this is kind of the DHH model.

762
00:59:10.559 --> 00:59:15.320
<v Speaker 3>I mean DJH basically said, and I'm kind of paraphrasing,

763
00:59:17.280 --> 00:59:20.519
<v Speaker 3>like let's not bundle at all, which means that the

764
00:59:20.559 --> 00:59:24.960
<v Speaker 3>structure of your code in your code base is the

765
00:59:25.199 --> 00:59:28.800
<v Speaker 3>also the structure in which the code loads. Now if

766
00:59:28.840 --> 00:59:31.719
<v Speaker 3>you're one of those people who likes to put every

767
00:59:31.840 --> 00:59:37.519
<v Speaker 3>function or every component in their own separate file, then

768
00:59:37.559 --> 00:59:41.079
<v Speaker 3>you can end up with and it's a large enough project,

769
00:59:41.199 --> 00:59:44.000
<v Speaker 3>you will end up with thousands of resources.

770
00:59:44.360 --> 00:59:46.840
<v Speaker 6>Well, maybe you shouldn't do that. Maybe that should be

771
00:59:46.840 --> 00:59:50.480
<v Speaker 6>a signal that's a bad way to code. Stop doing it.

772
00:59:50.199 --> 00:59:57.039
<v Speaker 4>So very large. If you have a very large team

773
00:59:57.079 --> 01:00:01.039
<v Speaker 4>that's building a very large web app. Let's say you

774
01:00:01.119 --> 01:00:07.519
<v Speaker 4>know Facebook, they have a lot of people working on

775
01:00:07.559 --> 01:00:10.880
<v Speaker 4>different parts of the app. They share code, there are

776
01:00:10.960 --> 01:00:12.360
<v Speaker 4>a lot of modules involved.

777
01:00:14.400 --> 01:00:19.760
<v Speaker 6>So well, but that's more for the benefit of investors,

778
01:00:19.800 --> 01:00:24.079
<v Speaker 6>like trying to show continual growth by continually hiring more people,

779
01:00:24.639 --> 01:00:27.920
<v Speaker 6>not because people are needed. Like Twitter fied seventy percent

780
01:00:27.960 --> 01:00:29.719
<v Speaker 6>of their workforce and Twitter got better.

781
01:00:31.360 --> 01:00:34.760
<v Speaker 4>I would argue that got better part, but.

782
01:00:36.280 --> 01:00:39.880
<v Speaker 6>Yeah, it didn't get worse. It's not slower, it's not

783
01:00:40.000 --> 01:00:40.800
<v Speaker 6>less reliable.

784
01:00:41.800 --> 01:00:46.360
<v Speaker 1>I think the point is is you've got you've got

785
01:00:46.559 --> 01:00:48.800
<v Speaker 1>so so let's say that you've got things broken up

786
01:00:48.800 --> 01:00:50.960
<v Speaker 1>by components, and you've got the components of different files,

787
01:00:50.960 --> 01:00:54.079
<v Speaker 1>like we're talking about that. There are a lot of

788
01:00:54.079 --> 01:00:56.960
<v Speaker 1>things that are really convenient as far as like developer

789
01:00:57.079 --> 01:00:59.119
<v Speaker 1>ergonomics that come from that, and that's why we do

790
01:00:59.239 --> 01:01:01.719
<v Speaker 1>it right. But at the end of the day when

791
01:01:01.719 --> 01:01:04.800
<v Speaker 1>we deliver it to the browser, the point is is

792
01:01:04.880 --> 01:01:08.559
<v Speaker 1>that you can pull all of that together with a

793
01:01:08.599 --> 01:01:13.480
<v Speaker 1>bundler and deliver one deliverable and reduce a lot of

794
01:01:13.480 --> 01:01:16.119
<v Speaker 1>that overhead, which also makes sense. And I'm a big

795
01:01:16.199 --> 01:01:19.639
<v Speaker 1>fan of having tools that solve the different problems in

796
01:01:19.679 --> 01:01:23.679
<v Speaker 1>the right way. And so that's where I'm I'm sitting

797
01:01:23.719 --> 01:01:26.599
<v Speaker 1>here and agreeing with Yoev on this, even though I

798
01:01:26.679 --> 01:01:29.920
<v Speaker 1>am you know, I generally agree in a lot of

799
01:01:29.920 --> 01:01:32.480
<v Speaker 1>cases with the AGEH. In this case, it makes a

800
01:01:32.480 --> 01:01:34.920
<v Speaker 1>lot of sense to have that bundler pick up those things,

801
01:01:35.360 --> 01:01:37.679
<v Speaker 1>and you know, any of the other tiny bits that

802
01:01:37.800 --> 01:01:42.199
<v Speaker 1>kind of have similar responsibilities, and then something like import

803
01:01:42.239 --> 01:01:44.639
<v Speaker 1>maps solve some of the other issues where I'm pulling

804
01:01:44.639 --> 01:01:47.199
<v Speaker 1>in a bunch of third party stuff and saying, Okay,

805
01:01:47.199 --> 01:01:48.559
<v Speaker 1>I need this, and I need this, and I need

806
01:01:48.599 --> 01:01:51.199
<v Speaker 1>this and I need this, but I'm not necessarily fiddling

807
01:01:51.239 --> 01:01:52.239
<v Speaker 1>with that stuff.

808
01:01:52.519 --> 01:01:54.480
<v Speaker 3>And I'll put it and I'll also phrase it in

809
01:01:54.519 --> 01:01:57.840
<v Speaker 3>a different way. If I'm using a compound language like

810
01:01:58.159 --> 01:02:01.239
<v Speaker 3>I don't know, like a se or raw or whatever.

811
01:02:01.800 --> 01:02:02.280
<v Speaker 4>There is a.

812
01:02:02.280 --> 01:02:07.920
<v Speaker 3>Separation between how the code is organized and how the

813
01:02:08.159 --> 01:02:13.719
<v Speaker 3>bytes are delivered for execution and unless and and the

814
01:02:13.880 --> 01:02:20.480
<v Speaker 3>D model for better and worse cancels this separation. If

815
01:02:20.599 --> 01:02:24.480
<v Speaker 3>I prefer using a lot of small files, it's a choice,

816
01:02:24.519 --> 01:02:26.719
<v Speaker 3>a choice that you might not agree with, but it's

817
01:02:26.760 --> 01:02:31.039
<v Speaker 3>a legitimate choice for some organizations. It means that I

818
01:02:31.199 --> 01:02:36.360
<v Speaker 3>can't use the D model or the D approach without

819
01:02:37.000 --> 01:02:39.480
<v Speaker 3>paying a potentially hefty price for it.

820
01:02:41.079 --> 01:02:44.480
<v Speaker 6>Fair, I mean, I I agree with that. I just

821
01:02:45.880 --> 01:02:48.920
<v Speaker 6>I've seen code bases where it's one function profile. It

822
01:02:48.960 --> 01:02:52.079
<v Speaker 6>seems it's almost like a meme. It's so popular, but

823
01:02:52.199 --> 01:02:56.440
<v Speaker 6>it's just it's it's silly. I mean, you can't even

824
01:02:56.880 --> 01:02:59.480
<v Speaker 6>understand the context of how a button fits into something

825
01:02:59.480 --> 01:03:01.960
<v Speaker 6>because you got look at ten files to figure out.

826
01:03:03.320 --> 01:03:03.440
<v Speaker 1>That.

827
01:03:03.920 --> 01:03:09.679
<v Speaker 6>Yeah, I'm thinking, I'm thinking, I don't know. I was thinking,

828
01:03:09.719 --> 01:03:12.440
<v Speaker 6>why would something have five thousand files. I wasn't even

829
01:03:12.480 --> 01:03:15.320
<v Speaker 6>thinking of the like one function per file, because I

830
01:03:15.320 --> 01:03:17.119
<v Speaker 6>wouldn't think a serious business would do that.

831
01:03:17.280 --> 01:03:21.119
<v Speaker 4>I don't know that. Yeah, I don't think it's a

832
01:03:21.159 --> 01:03:25.039
<v Speaker 4>one function profile, but I think it does like it

833
01:03:25.079 --> 01:03:30.440
<v Speaker 4>does result like code sharing between teams does result in

834
01:03:30.480 --> 01:03:33.840
<v Speaker 4>a lot of small modules. They're not necessarily a single

835
01:03:33.920 --> 01:03:39.599
<v Speaker 4>function but they are a single functionality. And I don't

836
01:03:40.039 --> 01:03:43.119
<v Speaker 4>know if this is the like, the best way to

837
01:03:43.199 --> 01:03:46.000
<v Speaker 4>develop or the west or the worst way to develop.

838
01:03:46.480 --> 01:03:48.440
<v Speaker 4>Like I said in the beginning, I'm not really a

839
01:03:48.480 --> 01:03:51.960
<v Speaker 4>web developer. I pretend to be one once in a while,

840
01:03:52.000 --> 01:03:54.800
<v Speaker 4>but I'm not doing that in like in my day

841
01:03:54.840 --> 01:04:01.039
<v Speaker 4>to day, I'm mostly hanging on browsers. But it is

842
01:04:01.079 --> 01:04:05.480
<v Speaker 4>a legitimate way to deliver software on the web, and

843
01:04:05.760 --> 01:04:11.400
<v Speaker 4>we should like and I think that bundlers are essential

844
01:04:11.480 --> 01:04:15.239
<v Speaker 4>for that part, both for the browser overhead as well

845
01:04:15.280 --> 01:04:19.119
<v Speaker 4>as for compression ratios, because if you're compressing very small files,

846
01:04:19.440 --> 01:04:22.719
<v Speaker 4>you will compress them very poorly compared to large files.

847
01:04:22.719 --> 01:04:23.760
<v Speaker 4>That's impressed very well.

848
01:04:24.239 --> 01:04:28.440
<v Speaker 3>So yeah, but then we have the compression dictionaries, which

849
01:04:28.679 --> 01:04:29.719
<v Speaker 3>mostly solves that.

850
01:04:30.880 --> 01:04:33.840
<v Speaker 4>I don't think they will solve it for very small

851
01:04:35.239 --> 01:04:37.800
<v Speaker 4>like you would still have to deliver the very small

852
01:04:37.840 --> 01:04:41.719
<v Speaker 4>files once and you would still have a very like

853
01:04:42.159 --> 01:04:46.079
<v Speaker 4>I think compression dictionaries solve a different problem with bundlers,

854
01:04:46.960 --> 01:04:49.960
<v Speaker 4>or at least in my view, like they could solve

855
01:04:50.000 --> 01:04:56.119
<v Speaker 4>it as well to some extent, but they in my

856
01:04:56.320 --> 01:05:00.000
<v Speaker 4>view with bundlers. One of the issues with a large bundle.

857
01:05:00.079 --> 01:05:03.480
<v Speaker 4>One of the issues is you're losing caching granularity. If

858
01:05:03.559 --> 01:05:10.039
<v Speaker 4>any single function, a single character inside that bundle changes,

859
01:05:10.199 --> 01:05:12.840
<v Speaker 4>you have to download the whole thing back again, And

860
01:05:12.880 --> 01:05:16.559
<v Speaker 4>compression dictionaries will help us avoid that, at least on

861
01:05:16.800 --> 01:05:18.920
<v Speaker 4>the network.

862
01:05:20.320 --> 01:05:24.000
<v Speaker 3>Yeah. So, but my initial point was kind of different.

863
01:05:24.079 --> 01:05:28.400
<v Speaker 3>We're doing a lot of things that impacts the platform

864
01:05:28.599 --> 01:05:35.960
<v Speaker 3>in a way that certainly affects how bundlers work or

865
01:05:36.000 --> 01:05:41.760
<v Speaker 3>should work. How much corporation are you guys getting from

866
01:05:41.800 --> 01:05:45.679
<v Speaker 3>the bundle makers, because it seems that they should be

867
01:05:46.199 --> 01:05:48.440
<v Speaker 3>significantly involved in all this effort.

868
01:05:49.760 --> 01:05:56.239
<v Speaker 4>So at the time, I think maybe on the podcast

869
01:05:56.280 --> 01:06:00.360
<v Speaker 4>we were talking about like web bundles and a long

870
01:06:00.400 --> 01:06:06.119
<v Speaker 4>while ago, and bundlers were very much part of the

871
01:06:06.159 --> 01:06:13.840
<v Speaker 4>loop on this. And Daniel Ehrenberg from Yeah, I don't

872
01:06:14.000 --> 01:06:15.960
<v Speaker 4>like he may have been at the Gallia, he's now

873
01:06:16.000 --> 01:06:20.679
<v Speaker 4>there's at Bloomberg. He was super involved in bringing the

874
01:06:20.760 --> 01:06:25.199
<v Speaker 4>bundler community into the room. And there's a TC thirty

875
01:06:25.280 --> 01:06:31.960
<v Speaker 4>nine tooling meeting that we talked about multiple times at

876
01:06:31.960 --> 01:06:35.719
<v Speaker 4>the time about web bundles, and I think that they

877
01:06:35.880 --> 01:06:40.239
<v Speaker 4>are like they were super supportive. I think that once

878
01:06:40.360 --> 01:06:45.840
<v Speaker 4>this what I'm talking about will reach a more mature level,

879
01:06:46.280 --> 01:06:48.280
<v Speaker 4>I would be very happy to talk to them, and

880
01:06:48.440 --> 01:06:53.239
<v Speaker 4>I'm assuming that they will be similarly supportive, because none

881
01:06:53.280 --> 01:06:58.559
<v Speaker 4>of them like essentially this is all not like talking

882
01:06:58.559 --> 01:07:02.679
<v Speaker 4>about maybe like improved bundlers and improving the output of

883
01:07:02.800 --> 01:07:06.800
<v Speaker 4>bundlers to deliver better experiences. So I think it aligns

884
01:07:06.840 --> 01:07:15.519
<v Speaker 4>well with everyone's goals and intentions. In the meantime, a

885
01:07:15.559 --> 01:07:22.840
<v Speaker 4>lot of the bundlers are very configurable, and you can

886
01:07:25.239 --> 01:07:27.920
<v Speaker 4>you can go a long way just by mucking around

887
01:07:27.960 --> 01:07:34.320
<v Speaker 4>with roller plugins. And that is at least the approach

888
01:07:34.320 --> 01:07:37.000
<v Speaker 4>that I'm taking now with the various prototypes that I'm

889
01:07:37.039 --> 01:07:37.639
<v Speaker 4>working on.

890
01:07:38.840 --> 01:07:42.679
<v Speaker 3>Which means that you're effectively compatible with is built, which

891
01:07:42.719 --> 01:07:44.800
<v Speaker 3>means that you're effectively compatible with VAT.

892
01:07:45.719 --> 01:07:52.920
<v Speaker 1>Yeah, I love VAT any same So sorry just came

893
01:07:52.960 --> 01:07:56.639
<v Speaker 1>out anyway. Yeah, because like I said, you know, I

894
01:07:56.679 --> 01:07:59.280
<v Speaker 1>follow along with rails and DHH. I mean that's kind

895
01:07:59.320 --> 01:08:02.679
<v Speaker 1>of where I live my programming life. But I'm using

896
01:08:02.719 --> 01:08:05.639
<v Speaker 1>deep on my RAILS projects. I'm not using import maps,

897
01:08:09.199 --> 01:08:11.679
<v Speaker 1>so but but I kind of want to jump back

898
01:08:11.719 --> 01:08:16.399
<v Speaker 1>over so you so far we've got compression dictionaries we've

899
01:08:16.399 --> 01:08:20.079
<v Speaker 1>got import maps, doing multiple import maps, We've got SRI.

900
01:08:20.119 --> 01:08:23.880
<v Speaker 1>I mean, what other things are you proposing to fix

901
01:08:23.960 --> 01:08:24.399
<v Speaker 1>this stuff?

902
01:08:24.960 --> 01:08:29.920
<v Speaker 4>So proposing is a bit of a like, you know,

903
01:08:30.279 --> 01:08:33.239
<v Speaker 4>a big word. I have ideas that I want to

904
01:08:33.239 --> 01:08:38.800
<v Speaker 4>play around with. One of them is defining different controls

905
01:08:39.159 --> 01:08:42.920
<v Speaker 4>as to when the scripts are loaded versus when they're executed,

906
01:08:42.960 --> 01:08:50.279
<v Speaker 4>and defining more milestones for the browser to execute deferred

907
01:08:50.439 --> 01:08:56.319
<v Speaker 4>semantic scripts other than just dumb content loaded. So maybe

908
01:08:56.439 --> 01:09:02.239
<v Speaker 4>adds more milestones around first render like FCP fired, Now

909
01:09:02.479 --> 01:09:08.560
<v Speaker 4>execute these other scripts, unload fired, execute these other scripts

910
01:09:08.600 --> 01:09:13.760
<v Speaker 4>after onload. Things along those lines are things that I'm

911
01:09:13.960 --> 01:09:17.960
<v Speaker 4>planning to play around with. I'm I guess what you mean.

912
01:09:18.359 --> 01:09:23.079
<v Speaker 3>What you mean is like declarative support, because programmatic support

913
01:09:23.159 --> 01:09:26.920
<v Speaker 3>already exists. For example, obviously for onload, I can do

914
01:09:27.000 --> 01:09:32.760
<v Speaker 3>windowload equals sure, and I can specify god to execute

915
01:09:32.800 --> 01:09:33.479
<v Speaker 3>on the onload.

916
01:09:35.039 --> 01:09:38.720
<v Speaker 4>Yeah, So I would love to play around with a

917
01:09:38.840 --> 01:09:44.039
<v Speaker 4>polyphyll of what declarative support for that would look like

918
01:09:44.800 --> 01:09:49.560
<v Speaker 4>and see if this these kind of models give us

919
01:09:49.600 --> 01:09:55.560
<v Speaker 4>any benefits in terms of execution, and then if they are,

920
01:09:55.760 --> 01:10:02.880
<v Speaker 4>then this would be potentially something to to propose as

921
01:10:03.239 --> 01:10:07.119
<v Speaker 4>new keywords that will enable us to better load scripts

922
01:10:07.199 --> 01:10:12.159
<v Speaker 4>without the you know hacking through like preloading the assets

923
01:10:12.199 --> 01:10:19.119
<v Speaker 4>and then executing the the script manually in different midlstones. Yeah,

924
01:10:19.159 --> 01:10:23.399
<v Speaker 4>so this is one thing I'm thinking I'm playing around with.

925
01:10:23.840 --> 01:10:31.520
<v Speaker 4>Another is with stream execution of bundles. So we talked

926
01:10:31.520 --> 01:10:37.119
<v Speaker 4>about the fact that bundles are you know, if anything

927
01:10:37.279 --> 01:10:42.479
<v Speaker 4>changes inside the bundle, then the entire bundle gets invalued

928
01:10:42.520 --> 01:10:44.880
<v Speaker 4>in the cash and you need to download a new one.

929
01:10:45.119 --> 01:10:50.880
<v Speaker 4>But besides that, bundles also delay execution because you have

930
01:10:50.920 --> 01:10:54.640
<v Speaker 4>to download the entire bundle before you can start executing anything.

931
01:10:55.960 --> 01:11:01.960
<v Speaker 4>But because we are starting off from ESM, we could

932
01:11:02.159 --> 01:11:07.079
<v Speaker 4>maintain those module boundaries and then recreate them in the

933
01:11:07.159 --> 01:11:11.439
<v Speaker 4>browser in ways that enable the browser to execute the

934
01:11:11.520 --> 01:11:17.239
<v Speaker 4>modules separately. And there's a TC thirty nine proposal around

935
01:11:17.399 --> 01:11:22.760
<v Speaker 4>module declarations again from Daniel Ehrenberg that I mentioned earlier.

936
01:11:25.000 --> 01:11:30.199
<v Speaker 4>I am playing around with the userland prototype to see

937
01:11:30.199 --> 01:11:34.079
<v Speaker 4>what that gives. It requires a lot of hats, both

938
01:11:34.199 --> 01:11:37.079
<v Speaker 4>on the butler side as well as on the browser side,

939
01:11:37.199 --> 01:11:42.199
<v Speaker 4>but we'll see where that gets me. I still haven't

940
01:11:42.239 --> 01:11:48.560
<v Speaker 4>seen it working yet, but you know, yeah, I'm hopeful

941
01:11:48.600 --> 01:11:53.880
<v Speaker 4>that this would be a successful module to start executing earlier.

942
01:11:56.239 --> 01:11:59.039
<v Speaker 3>An interesting idea that just occurred to me while we

943
01:11:59.039 --> 01:12:03.439
<v Speaker 3>were speaking is you were talking about declaratively controlling when

944
01:12:03.520 --> 01:12:08.840
<v Speaker 3>scripts execute. It might be worthwhile to also have declared

945
01:12:09.079 --> 01:12:13.560
<v Speaker 3>or to try out declarative ways of controlling when resources

946
01:12:13.600 --> 01:12:19.239
<v Speaker 3>or scripts start downloading. Like I want to download something synchronously,

947
01:12:19.960 --> 01:12:23.159
<v Speaker 3>but I don't want to for to start downloading before

948
01:12:23.199 --> 01:12:25.680
<v Speaker 3>the LCP because I don't want it to get in

949
01:12:25.720 --> 01:12:27.680
<v Speaker 3>the way in the way of the LCP in any

950
01:12:27.720 --> 01:12:35.399
<v Speaker 3>shape or form. Yeah, but by the way, another and

951
01:12:35.760 --> 01:12:39.079
<v Speaker 3>it's worth mentioning that if people who are listening to

952
01:12:39.159 --> 01:12:42.600
<v Speaker 3>us find all this stuff interesting and have their own ideas,

953
01:12:42.920 --> 01:12:48.800
<v Speaker 3>they can basically, you know, participate in the W three

954
01:12:48.960 --> 01:12:52.199
<v Speaker 3>C Where Performance Working Group and make their thoughts hurt.

955
01:12:53.359 --> 01:12:59.760
<v Speaker 4>Yeah, for sure, that's so. Some of these things are like,

956
01:13:00.119 --> 01:13:03.760
<v Speaker 4>some of these things are hacky projects that haven't gotten

957
01:13:03.800 --> 01:13:09.680
<v Speaker 4>anywhere just yet. Some are going to probably live mostly

958
01:13:09.800 --> 01:13:16.399
<v Speaker 4>as what wg prs against the htmlspec. But all of

959
01:13:16.439 --> 01:13:19.640
<v Speaker 4>this is something that we can and should discuss in

960
01:13:19.680 --> 01:13:23.079
<v Speaker 4>the Web Performance Working Group. So yes, if folks are interested,

961
01:13:23.760 --> 01:13:27.000
<v Speaker 4>feel free to hit me up. I can like, yeah,

962
01:13:27.600 --> 01:13:33.279
<v Speaker 4>join the calls and yeah, make your horses hard.

963
01:13:33.760 --> 01:13:36.000
<v Speaker 1>Yeah, it just sounds like a good place to kind

964
01:13:36.000 --> 01:13:38.159
<v Speaker 1>of start to wrap up to it. Is there a

965
01:13:38.279 --> 01:13:42.800
<v Speaker 1>list of these proposals or these ideas somewhere that you

966
01:13:42.920 --> 01:13:46.560
<v Speaker 1>have your or are we kind of it right now?

967
01:13:46.600 --> 01:13:50.439
<v Speaker 4>I need to write it down. This is all like

968
01:13:51.079 --> 01:13:55.119
<v Speaker 4>there's a list of things I put together for this

969
01:13:56.439 --> 01:13:59.800
<v Speaker 4>for this podcast, but it's like not something I can

970
01:13:59.800 --> 01:14:05.399
<v Speaker 4>call but yeah, I need to write down this as

971
01:14:05.439 --> 01:14:12.640
<v Speaker 4>a master plan to improve script loading and and then yeah,

972
01:14:12.800 --> 01:14:14.319
<v Speaker 4>I need to publish something on that front.

973
01:14:17.279 --> 01:14:19.760
<v Speaker 1>Cool. Well, if people have ideas, how do they join

974
01:14:19.800 --> 01:14:22.079
<v Speaker 1>that working group? I think that might be an interesting

975
01:14:22.119 --> 01:14:22.640
<v Speaker 1>place to go.

976
01:14:24.640 --> 01:14:30.720
<v Speaker 4>Yeah, basically the main path. So if they work for

977
01:14:30.880 --> 01:14:36.960
<v Speaker 4>a W three C member, then they can just join

978
01:14:37.800 --> 01:14:46.720
<v Speaker 4>and ask their AC representatives to to join the working

979
01:14:46.760 --> 01:14:53.039
<v Speaker 4>group and yeah, and that's it. Otherwise they can pin

980
01:14:53.239 --> 01:15:00.840
<v Speaker 4>me or or the yeah or Nick Jansma, who's the

981
01:15:00.880 --> 01:15:08.359
<v Speaker 4>other chair at AKAMAI, uh, and yeah, we can you know,

982
01:15:08.520 --> 01:15:12.439
<v Speaker 4>talk through the issue with them. Yeah, I'm pasting a

983
01:15:12.560 --> 01:15:18.039
<v Speaker 4>link to the web performance to the working groups page

984
01:15:18.079 --> 01:15:22.479
<v Speaker 4>where you can you know, if you're double member, you

985
01:15:22.520 --> 01:15:27.640
<v Speaker 4>can join through there and otherwise, yeah, just email me

986
01:15:29.319 --> 01:15:31.960
<v Speaker 4>or Nick Jansma and we can.

987
01:15:33.279 --> 01:15:33.840
<v Speaker 3>Set you up.

988
01:15:34.800 --> 01:15:38.880
<v Speaker 4>They're like, we're available over email, over there's the web

989
01:15:38.880 --> 01:15:42.840
<v Speaker 4>performance slack group that a lot of people are on,

990
01:15:43.840 --> 01:15:47.720
<v Speaker 4>and yeah, otherwise you know on the internets.

991
01:15:48.279 --> 01:15:51.439
<v Speaker 1>Good deal. All right, Well, I'm gonna go ahead and

992
01:15:51.479 --> 01:15:57.399
<v Speaker 1>slide us into our picks. But this has been really fascinating.

993
01:15:59.760 --> 01:16:02.920
<v Speaker 1>But yeah, let's do our picks a j do you

994
01:16:02.960 --> 01:16:04.159
<v Speaker 1>want to start us off picks?

995
01:16:04.560 --> 01:16:10.479
<v Speaker 6>Let's see what have I got. My wife and I

996
01:16:10.520 --> 01:16:17.199
<v Speaker 6>recently watched the Jason Well we start. We've started watching

997
01:16:17.199 --> 01:16:19.960
<v Speaker 6>the Jason Bourne trilogy, but we started with the best one,

998
01:16:20.000 --> 01:16:23.359
<v Speaker 6>which is Born Supremacy, and she liked that, so we're

999
01:16:23.399 --> 01:16:27.840
<v Speaker 6>probably gonna watch the others as well. So I will

1000
01:16:28.319 --> 01:16:33.640
<v Speaker 6>I will pick the Born trilogy because it's kind of

1001
01:16:33.640 --> 01:16:37.079
<v Speaker 6>a kind of a cool movie and.

1002
01:16:36.800 --> 01:16:39.079
<v Speaker 3>She has a sufficient context.

1003
01:16:40.439 --> 01:16:45.319
<v Speaker 6>I well, I when the movie started, I told her,

1004
01:16:46.039 --> 01:16:49.920
<v Speaker 6>okay that the thing is, this guy is basically James Bond,

1005
01:16:49.920 --> 01:16:52.199
<v Speaker 6>except he wakes up one day with amnesia and is

1006
01:16:52.239 --> 01:16:55.000
<v Speaker 6>trying to figure out what he's doing. And this is

1007
01:16:55.000 --> 01:16:57.000
<v Speaker 6>the second movie, and we're starting with this one because

1008
01:16:57.039 --> 01:16:59.680
<v Speaker 6>it's it's better. And if we started with the first one,

1009
01:16:59.800 --> 01:17:02.479
<v Speaker 6>you like it, You might not want to watch the

1010
01:17:02.520 --> 01:17:05.319
<v Speaker 6>rest of them, but they yeah, you know, they're they're

1011
01:17:05.359 --> 01:17:07.159
<v Speaker 6>all the kind of the same movie. It's kind of

1012
01:17:07.159 --> 01:17:09.800
<v Speaker 6>like Terminator and Terminator too. It's the same movie. It's

1013
01:17:09.840 --> 01:17:11.600
<v Speaker 6>just way better production.

1014
01:17:11.720 --> 01:17:13.880
<v Speaker 3>By the way. By the way, I'm one of the

1015
01:17:13.960 --> 01:17:17.920
<v Speaker 3>few people, I imagine who've actually read the Ludlam book before

1016
01:17:17.960 --> 01:17:19.560
<v Speaker 3>they even watched the first movie.

1017
01:17:20.560 --> 01:17:25.319
<v Speaker 6>So there's there's like ten books, aren't there to be honest.

1018
01:17:25.000 --> 01:17:27.880
<v Speaker 3>I don't remember the problem with Ludlam is that all

1019
01:17:27.960 --> 01:17:30.199
<v Speaker 3>his books kind of are the same book.

1020
01:17:31.359 --> 01:17:34.840
<v Speaker 6>Uh, well the movies are the same movie, so that tracks.

1021
01:17:35.680 --> 01:17:39.600
<v Speaker 6>But I mean the same thing with James Bond, right, yeah,

1022
01:17:39.640 --> 01:17:43.680
<v Speaker 6>I guess. Yeah, So there's that. I'm still motorcycling, still

1023
01:17:43.680 --> 01:17:49.479
<v Speaker 6>absolutely love it. And ah, I'm trying to think if

1024
01:17:49.479 --> 01:17:53.399
<v Speaker 6>there's there's anything else worth worth picking I do. I

1025
01:17:53.479 --> 01:17:56.840
<v Speaker 6>do have to rescind a pick from earlier. I at

1026
01:17:56.840 --> 01:18:00.279
<v Speaker 6>one point i'd picked Silicon Power drives. I've I love

1027
01:18:00.359 --> 01:18:06.159
<v Speaker 6>Silicon Power for micro SD cards. They have been amazing. However,

1028
01:18:06.479 --> 01:18:11.800
<v Speaker 6>I had ordered about sixteen of the Silicon Power SSDs.

1029
01:18:12.119 --> 01:18:14.079
<v Speaker 6>Actually I don't think it was that many. Yeah, well

1030
01:18:14.079 --> 01:18:16.159
<v Speaker 6>it was about that many. Four of them have failed

1031
01:18:16.359 --> 01:18:18.319
<v Speaker 6>over the course of the last year and a half.

1032
01:18:19.279 --> 01:18:21.800
<v Speaker 6>And this is in a server environment. And they told me,

1033
01:18:22.119 --> 01:18:23.800
<v Speaker 6>you know, I got a business account with them. They

1034
01:18:23.800 --> 01:18:26.520
<v Speaker 6>told me they would, you know, warranty them for the server.

1035
01:18:26.640 --> 01:18:30.399
<v Speaker 6>They'll warranty them, but they fail. And we've also got

1036
01:18:30.439 --> 01:18:33.520
<v Speaker 6>sixteen Crucial MS five hundreds and not a single one

1037
01:18:33.560 --> 01:18:35.920
<v Speaker 6>of them has had a hiccup. So I guess my

1038
01:18:36.319 --> 01:18:39.399
<v Speaker 6>pick would be Crucial m X five hundreds. If you

1039
01:18:39.479 --> 01:18:41.600
<v Speaker 6>are if you're putting together a server and you want

1040
01:18:41.680 --> 01:18:44.000
<v Speaker 6>the best value drives, I have to switch my pick

1041
01:18:44.039 --> 01:18:48.600
<v Speaker 6>on that to being Crucial. Silicon power is like half

1042
01:18:48.640 --> 01:18:51.760
<v Speaker 6>the price. But you don't want to be going to

1043
01:18:51.800 --> 01:18:54.439
<v Speaker 6>your data center replacing drives except for when you have to,

1044
01:18:54.920 --> 01:18:59.720
<v Speaker 6>So I'll pick those my picks. Steve, what are your picks?

1045
01:19:02.279 --> 01:19:05.479
<v Speaker 2>Well, before we get to the high point of every episode,

1046
01:19:06.239 --> 01:19:10.920
<v Speaker 2>I came across an interesting blog post or article whatever

1047
01:19:10.960 --> 01:19:13.800
<v Speaker 2>you want to call it, on how can news about

1048
01:19:13.800 --> 01:19:19.119
<v Speaker 2>open Ai? And you know, we've been using AI more

1049
01:19:19.119 --> 01:19:21.800
<v Speaker 2>and more in my work, but in a you know,

1050
01:19:21.800 --> 01:19:24.319
<v Speaker 2>in a scope limited sort of capacity based on our

1051
01:19:24.319 --> 01:19:28.319
<v Speaker 2>own data. But the title is how does open ai Survive?

1052
01:19:29.560 --> 01:19:33.920
<v Speaker 2>And it's a pretty detailed walk through the business model

1053
01:19:34.159 --> 01:19:38.880
<v Speaker 2>and what open ai would need in terms of huge

1054
01:19:38.880 --> 01:19:42.199
<v Speaker 2>growth of money and just a bunch of unprecedented things

1055
01:19:42.199 --> 01:19:44.359
<v Speaker 2>to happen in order of them to survive over the

1056
01:19:44.359 --> 01:19:47.399
<v Speaker 2>next couple of years. So if you want something as

1057
01:19:47.439 --> 01:19:49.600
<v Speaker 2>a cure for insomnia, it's pretty good, I think. But

1058
01:19:49.640 --> 01:19:54.600
<v Speaker 2>it's also pretty interesting if you're into reading about open ai.

1059
01:19:55.039 --> 01:19:57.920
<v Speaker 2>Says they seem to be on a lot of tips

1060
01:19:57.920 --> 01:19:59.319
<v Speaker 2>of everybody's tongues these days.

1061
01:20:00.520 --> 01:20:03.960
<v Speaker 3>We kind of spoke about this subject when Steve Sowell

1062
01:20:04.159 --> 01:20:07.520
<v Speaker 3>was on the show. I think I I kind of

1063
01:20:07.800 --> 01:20:10.720
<v Speaker 3>have tongue in cheeks, said that, like the only company

1064
01:20:10.760 --> 01:20:14.680
<v Speaker 3>actually making money off of the AI revolution is Nvidia.

1065
01:20:15.279 --> 01:20:16.960
<v Speaker 9>Right because of the chips. Right.

1066
01:20:17.039 --> 01:20:19.479
<v Speaker 6>Yeah, Well, I'm looking forward to where we can just

1067
01:20:19.560 --> 01:20:22.640
<v Speaker 6>download the model on you know, when when open eye

1068
01:20:22.760 --> 01:20:25.119
<v Speaker 6>goes out of business and they and they open source

1069
01:20:25.199 --> 01:20:28.439
<v Speaker 6>the model. I'm happy to download that, you know, forty

1070
01:20:28.439 --> 01:20:31.000
<v Speaker 6>gigabytes on my computer and run it off the power

1071
01:20:31.000 --> 01:20:31.640
<v Speaker 6>of my mag book.

1072
01:20:32.560 --> 01:20:35.920
<v Speaker 3>I think there's the Olama model model that you can

1073
01:20:36.079 --> 01:20:39.479
<v Speaker 3>from Facebook. I think we are, which you can already download.

1074
01:20:39.880 --> 01:20:43.560
<v Speaker 6>It's that's true, and it's it's better in some ways

1075
01:20:43.600 --> 01:20:47.039
<v Speaker 6>than chat GPT three, but it's not better than chat

1076
01:20:47.119 --> 01:20:47.880
<v Speaker 6>GPT four.

1077
01:20:47.960 --> 01:20:51.760
<v Speaker 1>Oh yeah, the way the way that I understand it,

1078
01:20:51.800 --> 01:20:58.239
<v Speaker 1>and I'm still learning about this stuff, but yeah, it's

1079
01:20:58.319 --> 01:21:00.520
<v Speaker 1>good for a baseline if you're going to train your

1080
01:21:00.560 --> 01:21:04.920
<v Speaker 1>own stuff on top of it, right, to give it

1081
01:21:04.960 --> 01:21:11.640
<v Speaker 1>better context. But yeah, the GPT four models are much

1082
01:21:11.760 --> 01:21:15.119
<v Speaker 1>more comprehensive and give better answers.

1083
01:21:16.439 --> 01:21:20.760
<v Speaker 6>I mean, they do have access to every book that's

1084
01:21:20.760 --> 01:21:24.039
<v Speaker 6>ever been made in every journal, and because they get

1085
01:21:24.039 --> 01:21:28.680
<v Speaker 6>asked questions like, so are you using copyrighted content that's

1086
01:21:28.840 --> 01:21:31.399
<v Speaker 6>you know, like paid content that you're just putting into

1087
01:21:31.399 --> 01:21:33.840
<v Speaker 6>the model and making available to everyone, and you're gonna

1088
01:21:33.840 --> 01:21:37.239
<v Speaker 6>face major lawsuits And they're like, oh, well, you know,

1089
01:21:37.319 --> 01:21:40.960
<v Speaker 6>it's hard to say cause I don't know exactly where

1090
01:21:41.000 --> 01:21:43.680
<v Speaker 6>all the data comes from, but it's definitely data that's

1091
01:21:43.720 --> 01:21:50.720
<v Speaker 6>available online. So you know, your your olama is like

1092
01:21:50.800 --> 01:21:55.680
<v Speaker 6>basically Wikipedia, stack Overflow, you know, it's it's the big sites.

1093
01:21:56.199 --> 01:21:59.920
<v Speaker 6>But GPT four to zero is all of the content

1094
01:22:00.119 --> 01:22:02.119
<v Speaker 6>the humanity has ever created. There's not going to be

1095
01:22:02.119 --> 01:22:04.000
<v Speaker 6>a GPT five because there's no more data.

1096
01:22:03.880 --> 01:22:11.840
<v Speaker 9>Left, all right, And then moving on to the highlighted.

1097
01:22:12.000 --> 01:22:14.760
<v Speaker 3>Unless they just to say, unless they start putting in

1098
01:22:14.880 --> 01:22:19.079
<v Speaker 3>pictures of cats, because there are always new pictures of cats,

1099
01:22:19.119 --> 01:22:20.800
<v Speaker 3>always always.

1100
01:22:20.800 --> 01:22:22.720
<v Speaker 1>Some of those are gonna be AI generated too.

1101
01:22:23.159 --> 01:22:24.840
<v Speaker 6>That's why I'm paying the twenty bucks a month. And

1102
01:22:25.439 --> 01:22:27.199
<v Speaker 6>best cats, the best.

1103
01:22:26.920 --> 01:22:29.199
<v Speaker 3>Cats, the cats with six fingers.

1104
01:22:31.159 --> 01:22:36.079
<v Speaker 2>So I am suing the doctor who delivered my baby.

1105
01:22:36.319 --> 01:22:38.840
<v Speaker 2>My son now has to grow up without a liver.

1106
01:22:41.880 --> 01:22:43.319
<v Speaker 9>Delivered anyway.

1107
01:22:43.520 --> 01:22:48.800
<v Speaker 2>Sorry, sometimes you got to explain him. I was attacked

1108
01:22:48.800 --> 01:22:51.279
<v Speaker 2>by a flock of sheep yesterday, but luckily I was

1109
01:22:51.359 --> 01:22:51.920
<v Speaker 2>only grays.

1110
01:22:55.079 --> 01:22:56.439
<v Speaker 9>That one's sort of bad.

1111
01:22:56.560 --> 01:22:58.840
<v Speaker 6>We can see that there. We can see that.

1112
01:23:00.079 --> 01:23:04.600
<v Speaker 9>Right there, right there. They raised and then I love

1113
01:23:04.680 --> 01:23:06.680
<v Speaker 9>this one I got. I thought for sure I'd get

1114
01:23:06.680 --> 01:23:08.319
<v Speaker 9>shot down on this next month of people loved it.

1115
01:23:08.399 --> 01:23:08.800
<v Speaker 9>I was.

1116
01:23:09.760 --> 01:23:12.880
<v Speaker 2>I was gassing out my Honda Accord the other day

1117
01:23:12.920 --> 01:23:16.199
<v Speaker 2>at a gas station and a snarky Tesla owner asked

1118
01:23:16.239 --> 01:23:17.600
<v Speaker 2>me how much I spend on gas.

1119
01:23:18.359 --> 01:23:19.880
<v Speaker 9>I said about five minutes.

1120
01:23:23.399 --> 01:23:25.439
<v Speaker 6>That was That was well done, And I need to

1121
01:23:25.439 --> 01:23:28.960
<v Speaker 6>make a remark on Tesla. By the way, they are

1122
01:23:29.039 --> 01:23:32.279
<v Speaker 6>the number two per capita, as in per Tesla owner

1123
01:23:32.640 --> 01:23:36.680
<v Speaker 6>versus per other car owner. They are number two and

1124
01:23:36.800 --> 01:23:38.800
<v Speaker 6>most likely to get into a wreck and they are

1125
01:23:38.840 --> 01:23:43.760
<v Speaker 6>the number one motorcyclist killers. So if you own a tesla,

1126
01:23:44.199 --> 01:23:46.880
<v Speaker 6>wake up, get your hands on the steering wheel, watch

1127
01:23:46.920 --> 01:23:51.399
<v Speaker 6>what's in front of you. Don't run over people. Okay, thanks.

1128
01:23:52.000 --> 01:23:54.720
<v Speaker 3>By the way, about the delivered, it kind of reminded me.

1129
01:23:54.800 --> 01:23:57.600
<v Speaker 3>There was this scene from Monty Python The Meaning of

1130
01:23:57.720 --> 01:24:01.279
<v Speaker 3>Life movie where they not on his door and they said,

1131
01:24:01.439 --> 01:24:05.640
<v Speaker 3>you're you're registered organ donors. Yes that we've come to collect.

1132
01:24:10.079 --> 01:24:11.359
<v Speaker 9>Oh boy, yes that.

1133
01:24:11.760 --> 01:24:14.439
<v Speaker 2>My favorite scene from that particular movie is the guy

1134
01:24:14.439 --> 01:24:15.119
<v Speaker 2>in the restaurant.

1135
01:24:15.760 --> 01:24:18.880
<v Speaker 9>Oh, just midir, that's all.

1136
01:24:19.800 --> 01:24:22.680
<v Speaker 3>No. I think my best one and my favorite one

1137
01:24:22.720 --> 01:24:26.720
<v Speaker 3>is that every sperm is sacred song and dense routine.

1138
01:24:27.399 --> 01:24:27.840
<v Speaker 3>Mm hm.

1139
01:24:28.760 --> 01:24:31.800
<v Speaker 9>Anyway, those are my picks, Dan, Why don't you just

1140
01:24:31.880 --> 01:24:32.399
<v Speaker 9>keep us going?

1141
01:24:32.439 --> 01:24:33.119
<v Speaker 6>Where are you picked?

1142
01:24:34.880 --> 01:24:37.960
<v Speaker 3>Not exactly a pick. The twenty twenties have sucked so far,

1143
01:24:38.319 --> 01:24:42.680
<v Speaker 3>and this year has not been different in any way,

1144
01:24:42.720 --> 01:24:46.479
<v Speaker 3>shape or form. And a week and a half ago,

1145
01:24:46.880 --> 01:24:50.600
<v Speaker 3>are Lovely and Beloved My mother, lovely and beloved mother

1146
01:24:50.640 --> 01:24:56.399
<v Speaker 3>in law passed away. So it's been really tough week

1147
01:24:56.479 --> 01:25:02.760
<v Speaker 3>for us. So I would like to dedicate my part

1148
01:25:02.800 --> 01:25:05.960
<v Speaker 3>of this show to her memory. I miss you, deary.

1149
01:25:06.039 --> 01:25:08.560
<v Speaker 3>We all do and that's all I have.

1150
01:25:11.159 --> 01:25:19.399
<v Speaker 1>Yeah, yeah, losing people's hard Yep, all right, I'm gonna

1151
01:25:19.680 --> 01:25:22.840
<v Speaker 1>jump in with some picks. I usually do a board game,

1152
01:25:23.039 --> 01:25:24.840
<v Speaker 1>and so I'm gonna do a board game. We played

1153
01:25:24.880 --> 01:25:28.720
<v Speaker 1>this yesterday. What we've been doing with my family is

1154
01:25:31.800 --> 01:25:35.760
<v Speaker 1>we we've been picking a game that we haven't played

1155
01:25:35.760 --> 01:25:39.079
<v Speaker 1>in a while out of our collection and then, you know,

1156
01:25:39.119 --> 01:25:40.960
<v Speaker 1>we play it and we decide if we want to keep.

1157
01:25:40.840 --> 01:25:41.199
<v Speaker 6>It or not.

1158
01:25:42.000 --> 01:25:45.399
<v Speaker 1>And the one that we picked up was Imagine If.

1159
01:25:46.000 --> 01:25:49.399
<v Speaker 1>And this is more of a party game, which I

1160
01:25:49.439 --> 01:25:53.039
<v Speaker 1>have to say generally are not my favorite games. I mean,

1161
01:25:53.079 --> 01:25:57.119
<v Speaker 1>this one's fun. I just sometimes when I'm in the

1162
01:25:57.159 --> 01:25:58.720
<v Speaker 1>mood for a board game, I usually want something that's

1163
01:25:58.760 --> 01:26:01.880
<v Speaker 1>gonna make me kind of think and strategize the stuff.

1164
01:26:02.880 --> 01:26:04.600
<v Speaker 1>You know. The party games aren't that way. But this

1165
01:26:04.680 --> 01:26:09.479
<v Speaker 1>one's a fun one, especially if you're all part of

1166
01:26:09.520 --> 01:26:11.479
<v Speaker 1>the same group that know the same set of people.

1167
01:26:11.560 --> 01:26:13.880
<v Speaker 1>You just you write down names around the outside of

1168
01:26:13.920 --> 01:26:16.560
<v Speaker 1>the board. There's a marker, you roll the die, you

1169
01:26:16.600 --> 01:26:20.319
<v Speaker 1>move it that many spaces, You pull a card and

1170
01:26:20.359 --> 01:26:24.359
<v Speaker 1>you read the card and it's imagined if Betty were

1171
01:26:24.399 --> 01:26:27.239
<v Speaker 1>a type of shoe, which one would she be right,

1172
01:26:27.279 --> 01:26:30.159
<v Speaker 1>and then it's like a stiletto, a hiking boot you know,

1173
01:26:30.760 --> 01:26:35.640
<v Speaker 1>a baby booty, right, And so then you everybody has

1174
01:26:35.840 --> 01:26:39.199
<v Speaker 1>one through cards numbered one through six in their hand.

1175
01:26:39.560 --> 01:26:41.520
<v Speaker 1>They put one face down, you flip them over. If

1176
01:26:41.560 --> 01:26:45.479
<v Speaker 1>you're in the majority then or if you're in the

1177
01:26:45.479 --> 01:26:47.319
<v Speaker 1>group that has the most I guess that doesn't mean

1178
01:26:47.319 --> 01:26:50.880
<v Speaker 1>you're in the majority, then you move up one. If

1179
01:26:50.880 --> 01:26:52.680
<v Speaker 1>you're the person who read the card, you move up two.

1180
01:26:52.800 --> 01:26:56.000
<v Speaker 1>And then you do it again. There's a space for challenge,

1181
01:26:56.479 --> 01:26:59.399
<v Speaker 1>and that one you pick another person that you think

1182
01:26:59.399 --> 01:27:02.239
<v Speaker 1>you're gonna match with. You roll the die again, you

1183
01:27:02.279 --> 01:27:04.680
<v Speaker 1>move the marker, you read the card. The two of

1184
01:27:04.720 --> 01:27:07.000
<v Speaker 1>you put down your numbers, and if your numbers match,

1185
01:27:07.039 --> 01:27:10.039
<v Speaker 1>you move for and if you don't, then you move

1186
01:27:10.079 --> 01:27:15.319
<v Speaker 1>back to And my eight year old sabotaged me by

1187
01:27:15.439 --> 01:27:18.039
<v Speaker 1>challenging me and then picking a number that she knew

1188
01:27:18.039 --> 01:27:21.479
<v Speaker 1>I wouldn't pick so that I wouldn't win. That's the

1189
01:27:21.560 --> 01:27:25.439
<v Speaker 1>way that game went last night. But overall, it's fun game.

1190
01:27:25.479 --> 01:27:27.520
<v Speaker 1>Board game. Geek weights it at one point two two,

1191
01:27:27.680 --> 01:27:30.319
<v Speaker 1>which means super simple. I mean I basically explained all

1192
01:27:30.319 --> 01:27:33.640
<v Speaker 1>the rules to you in less than a minute. But

1193
01:27:33.760 --> 01:27:35.880
<v Speaker 1>it is kind of a fun party game, and so

1194
01:27:36.560 --> 01:27:38.359
<v Speaker 1>you know, we had all of our family members and

1195
01:27:38.399 --> 01:27:45.800
<v Speaker 1>then you know Grandpa who wasn't there. So anyway, I'll

1196
01:27:45.800 --> 01:27:51.199
<v Speaker 1>go ahead and link to the board game. Geek listing

1197
01:27:51.479 --> 01:27:56.880
<v Speaker 1>in the comments only show up on Twitch, YouTube, and Facebook,

1198
01:27:56.920 --> 01:27:59.319
<v Speaker 1>so if you're watching on Twitter, which is where most

1199
01:27:59.359 --> 01:28:01.439
<v Speaker 1>people are watching, you just have to go look it up.

1200
01:28:01.520 --> 01:28:05.520
<v Speaker 1>It's Imagine. If drop the e at the end of Imagine,

1201
01:28:05.640 --> 01:28:10.279
<v Speaker 1>put iff at the end, you'll find it and then

1202
01:28:11.039 --> 01:28:16.119
<v Speaker 1>other picks. So my my oldest son is eighteen and

1203
01:28:16.199 --> 01:28:19.199
<v Speaker 1>his favorite movie is A Quiet Place, and so we

1204
01:28:19.279 --> 01:28:23.239
<v Speaker 1>went and saw A Quiet Place Day one. I mean,

1205
01:28:23.279 --> 01:28:26.279
<v Speaker 1>no spoilers. He said that some of the people are

1206
01:28:26.319 --> 01:28:29.000
<v Speaker 1>in the that are in A Quiet Place Day one

1207
01:28:29.119 --> 01:28:31.560
<v Speaker 1>are in a Quiet Place Part two, which I haven't seen,

1208
01:28:33.640 --> 01:28:37.600
<v Speaker 1>but they're pretty minor characters, so I guess it is

1209
01:28:37.680 --> 01:28:39.800
<v Speaker 1>kind of an origin story for that group of people

1210
01:28:39.800 --> 01:28:42.880
<v Speaker 1>that you'll see in a Quiet Place Part two. But

1211
01:28:43.000 --> 01:28:45.439
<v Speaker 1>it it was good.

1212
01:28:45.920 --> 01:28:46.880
<v Speaker 4>You know, it's not.

1213
01:28:47.199 --> 01:28:49.159
<v Speaker 1>It's not the best movie I've ever seen, but it

1214
01:28:49.239 --> 01:28:51.479
<v Speaker 1>wasn't something I regretted going to see in the theater.

1215
01:28:52.880 --> 01:28:53.960
<v Speaker 1>So I'm gonna pick that.

1216
01:28:55.359 --> 01:28:58.439
<v Speaker 6>And there's A Quiet Place Day one. Then there's a

1217
01:28:58.520 --> 01:29:03.000
<v Speaker 6>Quiet Place, and then there's like still a Quiet Place.

1218
01:29:03.800 --> 01:29:06.520
<v Speaker 1>So A Quiet Place is the first movie they made,

1219
01:29:06.560 --> 01:29:09.039
<v Speaker 1>and then A Quiet Place Part two apparent is a

1220
01:29:09.079 --> 01:29:12.199
<v Speaker 1>second movie, and then this one a prequel that they made.

1221
01:29:13.640 --> 01:29:16.600
<v Speaker 3>It's like the Star Wars prequels that came out.

1222
01:29:16.720 --> 01:29:20.239
<v Speaker 6>Yeah, that's that doesn't sound like good?

1223
01:29:21.000 --> 01:29:26.720
<v Speaker 1>Yeah? Well yeah, anyway, so I enjoyed those, so Mike,

1224
01:29:27.359 --> 01:29:28.800
<v Speaker 1>I'm gonna pick that. And then.

1225
01:29:31.079 --> 01:29:33.880
<v Speaker 6>Okay, yeah I was. I was just confused about it.

1226
01:29:33.880 --> 01:29:36.920
<v Speaker 6>It actually is called part two because I did see those, yes,

1227
01:29:37.279 --> 01:29:39.000
<v Speaker 6>but I didn't remember what the name of the second one.

1228
01:29:39.000 --> 01:29:40.720
<v Speaker 6>It literally is called part two, got it?

1229
01:29:40.960 --> 01:29:41.239
<v Speaker 3>Yep?

1230
01:29:41.680 --> 01:29:41.880
<v Speaker 6>Yep.

1231
01:29:43.119 --> 01:29:46.800
<v Speaker 1>So yeah, so I'm enjoying those. And then one other

1232
01:29:46.840 --> 01:29:50.560
<v Speaker 1>TV show, so I'm picking nothing technical, I guess is.

1233
01:29:50.600 --> 01:29:54.399
<v Speaker 1>I was browsing through Netflix and I saw that they

1234
01:29:54.439 --> 01:29:58.880
<v Speaker 1>did a live action Avatar The Last Airbender, and so

1235
01:29:58.920 --> 01:30:01.560
<v Speaker 1>I watched a few episodes to that with my same

1236
01:30:01.840 --> 01:30:04.479
<v Speaker 1>my eighteen year old son, and we enjoyed those. So

1237
01:30:04.479 --> 01:30:08.279
<v Speaker 1>I'm gonna pick those. That's that's it. That's it for

1238
01:30:08.359 --> 01:30:10.960
<v Speaker 1>my picks. You have, Do you have some picks for us?

1239
01:30:12.279 --> 01:30:18.640
<v Speaker 4>Sure? So the first one I guess is hiking or

1240
01:30:18.800 --> 01:30:21.680
<v Speaker 4>I don't know if I had more than that, but like, basically,

1241
01:30:21.800 --> 01:30:27.720
<v Speaker 4>it took me way too long to realize that I

1242
01:30:27.760 --> 01:30:30.560
<v Speaker 4>practically live an hour and a half from the Alps

1243
01:30:30.600 --> 01:30:34.039
<v Speaker 4>and I should go up a mountain every time I

1244
01:30:34.079 --> 01:30:38.520
<v Speaker 4>get an opportunity to do that. And yeah, so it's

1245
01:30:38.520 --> 01:30:42.479
<v Speaker 4>like hiking is the best. Almost everyone can do that,

1246
01:30:42.960 --> 01:30:47.279
<v Speaker 4>and even if you second it at first, you get better.

1247
01:30:47.560 --> 01:30:50.520
<v Speaker 4>And yeah, it's great for your health, it's great for

1248
01:30:50.600 --> 01:30:53.960
<v Speaker 4>your mind, and yeah, everyone should hike more.

1249
01:30:54.760 --> 01:30:57.159
<v Speaker 3>I can confirm in a test that you do live

1250
01:30:57.199 --> 01:30:59.920
<v Speaker 3>in a beautiful area, but given that you live in

1251
01:31:00.159 --> 01:31:03.920
<v Speaker 3>southern Fronts, that's not really surprising. Yeah.

1252
01:31:04.000 --> 01:31:08.199
<v Speaker 4>Yeah, but at the same time I think everyone, not everyone,

1253
01:31:08.279 --> 01:31:13.439
<v Speaker 4>but if you live next to a mountain of some sort,

1254
01:31:13.600 --> 01:31:15.680
<v Speaker 4>you should go up at once in a while. That's

1255
01:31:17.159 --> 01:31:17.880
<v Speaker 4>that's what I say.

1256
01:31:20.039 --> 01:31:22.800
<v Speaker 1>Yeah, it's it's interesting you bring that up because.

1257
01:31:24.079 --> 01:31:24.119
<v Speaker 3>A.

1258
01:31:24.279 --> 01:31:27.000
<v Speaker 1>J and I hear we live pretty close to the

1259
01:31:27.000 --> 01:31:30.279
<v Speaker 1>mountains here too, and boy, there are some amazing hikes

1260
01:31:30.279 --> 01:31:32.760
<v Speaker 1>to go on. Yeah, definitely, if you have the opportunity

1261
01:31:34.520 --> 01:31:38.079
<v Speaker 1>get out and see it, or get out and see

1262
01:31:38.119 --> 01:31:42.920
<v Speaker 1>the world, and you even go to Denver. Those are

1263
01:31:42.960 --> 01:31:49.079
<v Speaker 1>the best mountains, even better than Utah Mountains. On the plains,

1264
01:31:49.119 --> 01:31:51.279
<v Speaker 1>you're you want to kind of get out towards the

1265
01:31:51.600 --> 01:31:52.760
<v Speaker 1>but yeah, the mountains mountain.

1266
01:31:53.079 --> 01:31:55.800
<v Speaker 6>I met Colorado Springs. I mean I meant to say Colorado.

1267
01:31:55.800 --> 01:31:57.800
<v Speaker 6>I didn't mean to say Denver. I meant say Colorado.

1268
01:31:58.159 --> 01:32:00.159
<v Speaker 6>But we were. We took a weekend trip to uh

1269
01:32:00.479 --> 01:32:05.000
<v Speaker 6>Colorado Springs area to see the Royal Gorge Bridge and

1270
01:32:05.199 --> 01:32:06.399
<v Speaker 6>the Garden of the Gods.

1271
01:32:06.760 --> 01:32:08.680
<v Speaker 1>The garden is gorgeous.

1272
01:32:09.000 --> 01:32:11.000
<v Speaker 2>I went to college just a couple of miles from there,

1273
01:32:11.079 --> 01:32:12.880
<v Speaker 2>so that was a popular place to go hang out.

1274
01:32:13.000 --> 01:32:14.199
<v Speaker 9>Red bikes out there and stuff.

1275
01:32:14.880 --> 01:32:16.760
<v Speaker 6>Yeah, and we went whitewater rafting.

1276
01:32:17.560 --> 01:32:20.840
<v Speaker 9>Yeah, I did that Friday too. Good times cool.

1277
01:32:21.279 --> 01:32:23.640
<v Speaker 4>Yeah, gorgeous too.

1278
01:32:24.079 --> 01:32:24.319
<v Speaker 3>Yeah.

1279
01:32:24.560 --> 01:32:27.399
<v Speaker 4>Never been to Utah or Colorado, so I should probably

1280
01:32:27.439 --> 01:32:28.479
<v Speaker 4>do that at some point.

1281
01:32:29.079 --> 01:32:30.000
<v Speaker 1>Come on out.

1282
01:32:30.079 --> 01:32:31.039
<v Speaker 9>Well, Utah is awesome.

1283
01:32:31.079 --> 01:32:32.720
<v Speaker 2>My daughter and I did a sort of a loop

1284
01:32:32.760 --> 01:32:35.960
<v Speaker 2>around uh Utah two three years ago. We met up

1285
01:32:35.960 --> 01:32:39.119
<v Speaker 2>with Aj and his family when we were down there

1286
01:32:39.399 --> 01:32:42.439
<v Speaker 2>and uh, you know, went did the loop come down

1287
01:32:42.479 --> 01:32:48.079
<v Speaker 2>through a canyon lamp through Moab canyon Lands and what

1288
01:32:48.199 --> 01:32:52.479
<v Speaker 2>try across from canyon Lands. Can't remember in the downs

1289
01:32:52.479 --> 01:32:54.520
<v Speaker 2>to Lake Powell and come up over to Bryce Canyon.

1290
01:32:55.560 --> 01:32:58.840
<v Speaker 2>Oh arches, they had arches and canyon lands and Bryce

1291
01:32:58.920 --> 01:32:59.800
<v Speaker 2>Canyon and Lake Powell.

1292
01:32:59.880 --> 01:33:03.880
<v Speaker 9>And it's awesome. It's really pretty. Didn't hit Zion, which

1293
01:33:03.920 --> 01:33:07.560
<v Speaker 9>we would hit Zion, but it's it's an amazing.

1294
01:33:07.520 --> 01:33:12.119
<v Speaker 3>The only the only science. Yeah, the only problem is

1295
01:33:12.159 --> 01:33:15.119
<v Speaker 3>that the US is just so big, so getting from

1296
01:33:15.119 --> 01:33:17.560
<v Speaker 3>one place to the other requires so much driving.

1297
01:33:19.199 --> 01:33:20.880
<v Speaker 6>Isn't it around the same size as Europe?

1298
01:33:22.560 --> 01:33:22.600
<v Speaker 3>What?

1299
01:33:23.119 --> 01:33:27.479
<v Speaker 4>Oh, k utah is the same size as Europe.

1300
01:33:29.159 --> 01:33:32.439
<v Speaker 1>It's you know, the same size as some of the

1301
01:33:32.479 --> 01:33:33.359
<v Speaker 1>European countries.

1302
01:33:34.359 --> 01:33:38.680
<v Speaker 4>Yeah, I mean it's I think it's big. Like, yeah,

1303
01:33:39.520 --> 01:33:41.399
<v Speaker 4>it's a lot of a lot of driving involved.

1304
01:33:41.920 --> 01:33:45.800
<v Speaker 3>I would concur that driving around all of Europe would

1305
01:33:45.840 --> 01:33:49.319
<v Speaker 3>also require a lot of driving. The thing about Europe

1306
01:33:49.479 --> 01:33:54.800
<v Speaker 3>is that it's especially if if it's most it's less

1307
01:33:54.840 --> 01:33:57.680
<v Speaker 3>about the scenery. In most cases, it's more about like

1308
01:33:57.920 --> 01:34:03.279
<v Speaker 3>you know, art and architecture and stuff like that, and

1309
01:34:03.319 --> 01:34:10.520
<v Speaker 3>then things tend to be closer together. Also they're better rightways.

1310
01:34:11.079 --> 01:34:13.960
<v Speaker 6>I stand correct, The United States is twice the size

1311
01:34:14.000 --> 01:34:17.840
<v Speaker 6>of Europe. Ohw or the European.

1312
01:34:17.439 --> 01:34:21.399
<v Speaker 3>Union, which is not oh yeah, well like half of

1313
01:34:21.439 --> 01:34:22.760
<v Speaker 3>Europe is Russia.

1314
01:34:23.079 --> 01:34:24.680
<v Speaker 9>So yeah, it's interesting.

1315
01:34:26.720 --> 01:34:29.239
<v Speaker 1>Yeah, but when when I lived in Italy, Italy is

1316
01:34:29.319 --> 01:34:32.880
<v Speaker 1>basically if you took Arizona or Utah and you stretched

1317
01:34:32.880 --> 01:34:38.159
<v Speaker 1>it out to the length of California, right, So so anyway,

1318
01:34:38.680 --> 01:34:43.640
<v Speaker 1>you get different geographic deals when you go to different countries.

1319
01:34:43.680 --> 01:34:46.680
<v Speaker 1>But yeah, I mean you can roughly say, you know,

1320
01:34:46.760 --> 01:34:49.359
<v Speaker 1>land size, you know, some of the Western States are

1321
01:34:49.399 --> 01:34:53.920
<v Speaker 1>as big as some of the bigger European countries. So anyway,

1322
01:34:55.039 --> 01:34:57.239
<v Speaker 1>I'm gonna gohe and wrap us up. Thanks for coming

1323
01:34:57.239 --> 01:35:00.720
<v Speaker 1>you off. This was really fascinating and hopefully yeah, we

1324
01:35:00.800 --> 01:35:03.880
<v Speaker 1>get some more ideas coming your way and we can

1325
01:35:03.920 --> 01:35:06.359
<v Speaker 1>see some of these things, you know, come to fruition

1326
01:35:06.479 --> 01:35:08.319
<v Speaker 1>and make the Internet better.

1327
01:35:11.640 --> 01:35:12.279
<v Speaker 4>It's been fun.

1328
01:35:13.039 --> 01:35:16.159
<v Speaker 3>Yeah, whatever you can do to actually make the web

1329
01:35:16.520 --> 01:35:20.800
<v Speaker 3>platform and the Web itself better is a literal win

1330
01:35:20.920 --> 01:35:21.760
<v Speaker 3>for everybody.

1331
01:35:21.800 --> 01:35:24.199
<v Speaker 1>All right, Well, until next time, folks.

1332
01:35:24.279 --> 01:35:24.680
<v Speaker 3>Accent
