The best web feature of 2019: Part 4/4 - HTTP 203

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
JAKE: We have taken, so far-- doing maths in my head. I really struggled. SURMA: 12. JAKE: Thank you. Do you know what? The power of editing-- no one will ever know. We have taken eight features-- [LAUGHTER] SURMA: We have taken minus 4. [MUSIC PLAYING] JAKE: This is it, then. SURMA: Oh, it's happening. JAKE: The final episode of our Christmas special, finding the best feature. And we haven't really agreed. SURMA: No, we haven't agreed last year. We're not agreeing this year on what to call this, really. JAKE: So far, we have taken 12 features. SURMA: That's correct. JAKE: And we have whittled them down to, well, two, so far. SURMA: Yes. JAKE: And that is sharing on the web-- SURMA: Yeah. JAKE: And background fetch. SURMA: Yeah. So background fetch will have to endure another match before it gets to face sharing. Or maybe not. Who knows? We will see. JAKE: We have four features left. We've been picking these at random, which is why we're so scrappy at remembering them. But, yeah. It's time to do the last four. SURMA: Yeah. You start picking. JAKE: Oh, it's me? SURMA: Because symmetry. Yes. JAKE: Excellent. I'm going to pick this one. And I have-- prefers styles. SURMA: Prefers styles. Oh, no. It's a Paul Lewis. It's Jake. JAKE: Did you put the wrong face on it? SURMA: Yeah, I did. JAKE: Yeah. It shows that we had the software ready, just in case he walks in and wants to do a few shows. SURMA: You never know with him. JAKE: You never know. SURMA: Some days he just appears and just takes over the show. JAKE: He takes this thing up from-- SURMA: He just can't let go. JAKE: Oh, yeah. You want me to talk about this, right? OK. SURMA: You don't have to, but-- JAKE: Again, this is a little bit of a two for one. SURMA: [SIGHS] JAKE: So-- I know. I know. This is a CSS feature. It allows you to hook into things that the user prefers, like a preference that they have expressed, usually at the operating system level. That's a good description. Don't laugh at me. That's what it is. They've said, I prefer, like, everything to be dark. I'm sad about life. So can you do that? SURMA: And yes, we can. JAKE: Yes we can. And now you can do it on the web as well. So this is how you'd have it. You'd have like your media query-- prefers color scheme dark or light. And you provide your exceptions to your styles. Sometimes it would be really-- when we did this with the Chrome Dev Summit website, where we were just overwriting a series of custom properties. SURMA: Yes. It worked great. JAKE: And it worked really good. SURMA: We did that plus, I think, two or three minor adjustments for contrast on some elements. But other than that, that pattern worked great for us. JAKE: It worked really, really well. You can also access it with JavaScript using match media, as you can with all the media queries. The other part of it is prefers reduced motion. SURMA: Yeah. JAKE: Which, again, is a feature that operating systems are exposing. SURMA: Does it bug you that they didn't just make it a true-false media query? JAKE: That is a good point. But I think I know why. SURMA: OK. JAKE: So there's something that Adam Argyle, our colleague who does a lot of the CSS stuff, explained to me-- is the intent of this is not to cancel all animation. SURMA: Right. JAKE: So you might-- it's more to, if you had like a constant animation going-- SURMA: True. JAKE: Like it's sort of a wavey thing on the page. SURMA: But that's why I said, reduced motion. Like what is the difference between saying, prefers reduced motion-- reduce-- to prefers reduced motion. JAKE: Oh, that's true, isn't it? SURMA: I find it oddly hard to memorize this. Like to actually remember what the correct-- JAKE: That-- yeah. SURMA: Because the other one is prefers color scheme-- light or dark. That makes sense. JAKE: Yes. SURMA: It's an open ended question. But prefers reduced motion is a yes-no question. And we reply with reduced. JAKE: It should be prefers motion. SURMA: Yeah. JAKE: And then you can add in none-- SURMA: Yeah. JAKE: --as a third value. To say, just, no. No. SURMA: Off roller coaster. JAKE: Or-- yeah. Oh, just go. SURMA: Go nuts. JAKE: Yeah. Just go for it. Just, like, make everything move. Make the whole page spin around. Just do, in CSS, star, animate, rotate, and see you've just got [WHOOSHING SOUNDS]. SURMA: I want to do that. I want to see what that'd look like. JAKE: Who wouldn't want that? Because maybe you're stuck in a washing machine, and your laptop is outside. SURMA: And you counteract the rotation. JAKE: Exactly. So yes why wouldn't you want to do that? You've really spoiled this feature for me by pointing this out. SURMA: Takes two to tangent. JAKE: It's wrong. It's the wrong shape. Oh. I mean, it doesn't matter now. SURMA: You don't want it to win anymore. JAKE: No, I hate this. This is disgusting. I mean, OK. Let's try and ignore the naming. This is an important feature for people who maybe get nauseous if certain kinds of animation. And they've told their operating system that. Your website can now react to it using this slightly badly named API. So there you go. SURMA: Slightly. JAKE: Fine. There. That is the feature. SURMA: All right. JAKE: Yeah. SURMA: Up against up against prefers reduced motion is native lazy loading. JAKE: Native lazy loading. Check that out. OK. Yeah. SURMA: All right. Let me tell you. JAKE: What is it? SURMA: It is-- JAKE: Why is it? SURMA: Big fan of this feature. Basically, it allows you to just put a new attribute on images. And the browser will automatically not load them until you scroll them into view. JAKE: Right. Yes. OK. SURMA: And here's a fun fact. It also works on iframes. JAKE: It does also work on iframes. SURMA: Does it, Jake? JAKE: Right. OK. Story time. We talked about this on stage at Chrome Dev Summit. SURMA: I did, in fact. JAKE: And I-- and Surma said it works on iframes, and I ran on stage to tell you you were wrong. But it was I who was wrong, because I was thinking of the aspect ratio hack that we talked about in earlier episode. SURMA: Which does not work on iframes. JAKE: Does not work on iframes. This-- SURMA: So, yeah. Both iframes-- JAKE: --does work on iframes. SURMA: You are forgiven. JAKE: Thank you. Thank you. SURMA: Although I will not let you forget it. JAKE: Thank you. SURMA: Yeah. So both images and iframes you can now just put in your page and don't have to worry about the initial payload, because the browser can load them lazily. JAKE: Right. SURMA: And we know that you can do something with IntersectionObserver or scroll events-- like it is a good amount of code. But it's mostly just a super convenient feature. JAKE: Yes. It's polyfillable. SURMA: It is. Absolutely. As I said, the people have written this with IntersectionObserver or-- JAKE: It's only-- so I wrote it for the Chrome Dev Summit website. And it's like four lines in IntersectionObserver. But it does depend on JavaScript. SURMA: Yes. And you can't-- how do you do progressive enhancement? How do you make sure the image loads if JavaScript is disabled or broken? JAKE: Yes. SURMA: But still not loaded if you have JavaScript. And that's actually quite challenging. JAKE: It is really challenging. So-- SURMA: What do we think? This is actually interesting. JAKE: Yes. SURMA: Both are fairly high level, fairly simple. JAKE: Yes. SURMA: I think native lazy loading does much more good for the web health of all. JAKE: So here's my summary of the two, of the pros and cons. Prefer styles-- there's no polyfill, other than giving the user a button to press. SURMA: Which was something you want to do anyway, because just because the user has dark mode enabled, maybe they don't actually want dark mode on this site right now. JAKE: Possible, yeah. I think that is especially true, like if you're in a darker room than usual. SURMA: Yeah. JAKE: I don't-- SURMA: You don't want to switch your operators into dark mode just because you're in a darker room. JAKE: Yes. Especially if you're just reading one website that's a bit bright, and it has an option. SURMA: Yeah. JAKE: OK. I'll take that. That's fair. Whereas with native lazy loading, it is extremely polyfill. SURMA: That's true. JAKE: It's so easy. But that might still be a bar that stops developers doing it. And especially with the concerns around JavaScript, where it does get orders of magnitude more complicated. SURMA: Yeah. JAKE: And native lazy loading can save people a lot of data. And just having an attribute that does it-- SURMA: And it's resilient to Java-- like, it doesn't use JavaScript. Like, people who surf without JavaScript, or who have disabled-- or when it crashes-- JAKE: Yes. SURMA: It will stay functional. JAKE: This is actually-- native lazy loading is a really good example of the extensible web manifesto in progress. SURMA: Yes. JAKE: Because we did all the low level stuff, which is IntersectionObserver-- it's is just that, isn't it? It's just IntersectionObserver. But then we have gone and done the higher level thing. Here's-- you know, we've seen how people use-- SURMA: Does the spec actually rely on the-- does the native lazy loading spec rely on the IntersectionObserver spec. JAKE: That's a good question. I, actually, before we came to film this-- there's discussion ongoing around the spec for this. And part of the thing that is happening right now is a discussion of how the intersection is calculated. And I don't know if it is referring directly to-- what might, actually, is more likely to happen-- I think it would be less-- if this HTML feature depends on IntersectionObserver, what they're probably more likely to do is take those intersection of things into the HTML spec and make the IntersectionObserver spec reference to HTML. SURMA: That would make sense. And would probably be as desirable. JAKE: Web standards. There you go. SURMA: I'll-- JAKE: It's native lazy loading, isn't it? SURMA: Yeah. That's where I would put my money. So-- JAKE: And dark mode is very trendy. But, as you say, you can do it with a button. SURMA: Yeah. JAKE: Yeah. Native lazy loading is, yeah, a lovely solution to that problem. SURMA: Well, that means natively lay loathing-- native lazy loading advances. JAKE: Matey lady loading-- SURMA: And now we have to find out who native lazy loading faces off against. JAKE: Right. It's that one. I've made my decision. (IN UNISON) Form elements. There's a more specific thing there, because we've had form elements for-- SURMA: We did have form elements on our platform for a couple of while. JAKE: That was a good one? SURMA: Yeah. That was good. JAKE: Thank you. And I will tell you-- again, a couple of features sort of rolled into one. SURMA: Did I have one double? I had one double feature. And it's in the finals. JAKE: Well, OK. So-- [INTERPOSING VOICES] SURMA: Oh look, there's the form element. Found it. JAKE: There it is. What do you think? [LAUGHTER] When you do this here, like this label-- well, there are a few behaviors that are attached to this input here. If you click name, because it's part of the label, it will now focus on the input. SURMA: Yeah. JAKE: Also-- it doesn't have to be inside the label. It can have reference and ID. SURMA: For. JAKE: Yes. For an ID. But also, when you hit submit here, the value "foo", or whatever the user has typed in there, will be sent to the server post with this action. SURMA: Yes. JAKE: This thing here, this fancy custom input, does not have those features. SURMA: No, because it's custom. JAKE: Except it does now! SURMA: Oh. JAKE: Aha ha. Yeah. So there's a couple of ways you can do parts of this. In terms of the submission thing, this is an event you can hook into. So the add event-- SURMA: Oh, OK. JAKE: --is formdata. What you get is an event object. It has a form data property. And that will contain what the browser's collected about the form so far. And you can modify it. SURMA: Oh, I see-- you can also inspect the other data. You can append your own. But you can also mangle whatever is already there. JAKE: Exactly. So it's like a post-processing step, which includes adding stuff. So that could be a simple way to have your custom elements or whatever take part in the form properly. SURMA: Yeah. JAKE: Or-- SURMA: Dun dun dun-- custom elements. JAKE: This is a custom element feature. Now, the key here is to say, form associated equals true. SURMA: That's magic, isn't it? JAKE: That is magic, in the same way that the observed attributes-- SURMA: Right. JAKE: One is magic. And so, with this being true, it's saying the browser now knows this takes part in the form. And then you can do this attach internals thing, which is a like a way of getting a secret API. SURMA: So secret. JAKE: So secret. Which is a little bit how, when you attach a shadow route-- SURMA: Right. JAKE: It's sort of a little bit like that. But it's not an element. It just has a load of APIs as part of it. So you can see these things here. So getting the form will return this internals form. SURMA: Form. Yeah. JAKE: Yeah. And if you've got an input element or something, dot form will always return the form. Just kind of good practice to do that. We've got some method. And what that will do is set the value to yes, please. And that's telling the browser-- this element, which is taking part in a form, now has this value. So you will be internally listening to clicks and stuff in the shadow route and whatever, and updating what the form value is. And you can tell if it's now valid or not. SURMA: Yeah. So all practices apply in how to do an input or whatever-- custom elements. But now we can just participate in the form part. JAKE: And by setting the validity, when the user hit submit, if one or more of the elements are not valid, it won't submit. And it'll do that thing where it shows the little pointer saying, this is the wrong one. Do something about this. And that is the feature. SURMA: Oh. JAKE: So-- SURMA: I have one left. JAKE: One left. SURMA: You know what one it is? JAKE: No I can't-- SURMA: I can't remember either. JAKE: I can't remember what it is. It must be a good one. SURMA: From entries. JAKE: From entries. SURMA: I'm going to try to do the Jake. JAKE: Go on, then. SURMA: [GROANS] JAKE: That was really good, actually. SURMA: Close. JAKE: That was much better than my stupid attempt. Go on, then. Talk us through from entries. SURMA: From entries is-- I actually really like it. So there is Object.entries, which will turn an object into an array of key value pairs. JAKE: Yes. SURMA: So now you have a basic list representation of what this object is. JAKE: This is old. But this is so useful for iteration. SURMA: You can iterate over the-- you can just write four loops to get key value, and get both at the same time. You can actually map over the entire object and say, oh, I want the keys to be uppercase. Or I want the values to be +1-- or both at the same time. However, once you do that, how do you then reassemble this list representation back to an object? And that is pretty much what from entries is. It's the inverse of Object.entries. JAKE: Gotcha. SURMA: It takes a list representation of key value pairs and just gives you the object. JAKE: And I think-- well, exactly what you said there. That's the cases where I've really needed this or wanted this. And it's when I've done-- I want to map an object. SURMA: Yeah. JAKE: Like mapping array is really easy. But I want to take this object. I want to map over the keys and the values and output something different. And this just lets you do it. SURMA: Yeah. That's it. That's it. JAKE: All right. SURMA: That's it. JAKE: All right. Let's sort of think about this then. Right. So we've got form-- SURMA: From entries is-- JAKE: From and form. SURMA: From entries is a polyfill, which you can write with reduce as a one liner. JAKE: Oh, that's a good point. But-- yeah. SURMA: It's not a new capability. It's super nice that we have it. It makes it much more-- like, code is just much more expressive. But you can just define your own from entries, and it's a one liner with reduce. JAKE: It's-- oh. If you use reduce. Yeah. Yeah. SURMA: I'm not sure if there's performance implications of mutating the object over and over, but in the end-- JAKE: No, it should be fine. SURMA: So I would say form entries. JAKE: Yeah, because you would clone the object and then just mutate it. Yeah. I think, based on that-- it's not a new capability. It's nice it's there. It's good that it's there. But the form element-- SURMA: [MAKES BUZZER SOUND] JAKE: --is a new capability. And you could say part of that is just like a custom element feature. A lot of people are like, I'm not that bothered about custom elements. I was thinking, even if you're using React, being able to define your own custom form elements, this makes it much more attractive to use custom elements for it, because you get-- SURMA: I think so as well-- JAKE: It just ties it into how the browser already behaves. SURMA: Yeah. Agreed. JAKE: All right. SURMA: So form elements advances. JAKE: Yes, it does. SURMA: And goes against native lazy loading. And I would say this is tough, because I'm like, this is something. The native lazy loading is something. I encounter on every site I built. JAKE: Yes. SURMA: And I'm often too lazy to do it right. I will omit progressive enhancements or just do the IntersectionObserver thing, and basically ignore people who don't run JavaScript or where JavaScript breaks. Form elements is not polyfillable, but I don't encounter it that often. JAKE: And what I would say is I don't know how much I care about people who disable JavaScript, because, like you say, how do I feel about people who disable SSL in their browser, you know? It's kind of like, but why do that? It is part of the web. SURMA: Part of platform, yeah. JAKE: But the thing I do care much more about is the people who haven't deliberately disabled JavaScript, but the people who are maybe running a browser that is older than expected and maybe didn't test properly. [INTERPOSING VOICES] SURMA: Yeah, JavaScript file just doesn't run, because you have one const in there, and the browser doesn't do const. JAKE: Or a server hiccup that just returns an empty file or a 404. And this does happen. SURMA: Wrong MIME type. JAKE: Yeah, the MIME type goes wrong, something like that. And that is one of the reasons I'm super keen on progressive enhancement, and always have been. It's never been about non-JavaScript people for me. It's been about performance and resilience. SURMA: Yeah. JAKE: So I do like it for that. And I like that it lowers the bar to-- SURMA: Doing the right thing. JAKE: Yeah SURMA: Yeah. JAKE: Absolutely. The formal elements thing is a new capability. And it has that-- it's not entirely progressive enhancement, because it still depends on JavaScript. SURMA: Yeah JAKE: But it depends on less JavaScript to do the same thing that form should do. And it will get you some of the accessibility for free. Because if you're using the native validation stuff and the native value stuff, I'm assuming the data is there that can be exposed to accessibility APIs. SURMA: Yeah. [INAUDIBLE] you can't-- there is form data, as an API, to assemble form data and turn it into a multi-part MindBody or whatever you need. JAKE: Yes. SURMA: But there is no API to do a post navigation. JAKE: Oh, that's true. I mean, you can-- yeah. SURMA: So there's actually no-- because I thought, like, oh, you could just use a form. You can cancel the submit and then assemble your own form data. But there is no way to send that form data-- JAKE: Oh, that's interesting. SURMA: As a post navigation. JAKE: Huh. That is really interesting, because I hadn't thought about that. Because in my head I was thinking, well, you can just assemble a form in the background and call submit on it. That works. But that cannot include files. That cannot include-- whereas, with this-- that's interesting. That's a really niche use case of this. But it is something that I've heard people ask for before. It's like want to do a navigation with a file. SURMA: We encountered it with-- JAKE: [INAUDIBLE], didn't we? SURMA: With the share targets. JAKE: Yes. SURMA: Where we wanted to test it. And we had to-- you wrote a form so you can test it. JAKE: That is true. So if you wanted to do your own sort of rudimentary sharing from one site to another using normal HTTP methods, we saw with sharing before that you can do this with the native share platform. But you can do it between websites using-- SURMA: So just to be clear, you can do a fetch request. But that won't navigate your page. JAKE: Yes. And whereas if you're doing a share, you actually kind of want to-- SURMA: You navigate with a post request, which is possible. JAKE: With data. Interesting. I hadn't thought about that. It's going to sort of come down to how much is this going to benefit the web? I guess-- SURMA: That's what I was going to bring up. So I think native lazy loading still takes this one home, because it is pretty much literally every website. JAKE: Every website has images. SURMA: And you want to lazy load them. It's the right thing to do. JAKE: They are, I believe, the heaviest thing. SURMA: Yeah, 50% of a page weight on average-- at least on HP Archive-- is images. JAKE: Yes. And so this will mean you download less of it, especially if you're-- because if you're just going to a page-- SURMA: Yeah. JAKE: Just to click one of the things at the top of the page, which I do all the time. SURMA: Open a blog post. Oh, I'm not interested after all. Leave. JAKE: Yeah. Or even like you go to a shopping website-- SURMA: Yeah. JAKE: --to click the button there. But you've just downloaded all of the stuff there. I mean, the browser can cancel it. But by that time you've already downloaded a lot-- big problem if you're on metered connection. SURMA: So are we in agreement? JAKE: Yeah. Yeah. SURMA: All right. JAKE: Have it. Go on, then. All right. SURMA: So this is interesting. JAKE: We've got to find the next finalist. SURMA: So in the semifinal we have-- JAKE: That was a janky animation. We need to get-- look, this is such an old tablet that we've been doing this stuff with. And it's only because we tried to do it with a Pixelbook, but there was some flickering thing with the camera. SURMA: Oh, I forgot. Hooked up? JAKE: Yeah. SURMA: Well, I think we should get-- JAKE: My life. SURMA: I think we should get the new, like $50,000 Mac Pro. JAKE: What, and just balance a monitor here? SURMA: Yeah. JAKE: OK. SURMA: That should run the animation smoothly. JAKE: It's not touch screen though, is it? That's the problem. For $52,000, you still don't get touch screen. SURMA: Yeah, that's actually true, isn't it? JAKE: Yeah. SURMA: Come on. Just throw that in. JAKE: Yeah. Your machine can roll downhill. SURMA: Yeah. For $400. JAKE: No touch screen. Right. What are we talking about? SURMA: Tangent. JAKE: We've got native lazy loading versus background fetch on our old janky tablet that's so old, it doesn't even receive Android updates anymore. SURMA: Nice. JAKE: I found that this morning. OK. SURMA: Oh, this is rough. I find this really hard. JAKE: So we've got a very simple feature like this, as in it's simple to use. SURMA: And, as we said, useful for pretty much every website that is in existence. JAKE: One of the things I would say about this is that an interesting part of this feature, the native lazy loading thing, is the browser is actually free to apply it automatically. SURMA: Is it? JAKE: Yes. The default value for it is auto. And I believe-- SURMA: But don't many sites rely on images being loaded off screen? JAKE: This is a fix I made to the spec. Yes. Because I was saying, I think that there are cases where people use it for preloading images to go into a canvas-- something, something, something, something, something. So the rule is-- I think we came up with-- it must immediately load if it's detached from the document, or if it's created by JavaScript. SURMA: Oh, OK. Interesting. JAKE: So if you've got a lot of image tags on the outer scroll view that you're relying on lazy loading-- relying on listening for a load event, it might never fire. SURMA: Interesting. JAKE: So I think we're actively monitoring that. SURMA: Could also be a trade like if there's an on load listener and no [INAUDIBLE] loading attribute. JAKE: Oh, I see. Yeah. SURMA: It could load it. JAKE: Yeah. SURMA: Either way. OK. That's very interesting. Because that's actually-- I wanted to bring it up originally but didn't, because it can't work. But if that is the case, that would be great if this opens a path for just reducing the page weight of many pages, just by making the user agent smarter. JAKE: Sorry, I was bouncing that around in my head. You can't do the load event detection, because you might have a load event on the document element. And that would-- the image wouldn't-- bubbles or captures, at least. There is ways of listening to that. SURMA: Stupid. JAKE: Anyway, sorry. What were you're saying, while I was just thinking about the other thing? SURMA: No, just like if there is an actual path that allows us to reduce the page weight by making these agents smarter. That's a big plus. JAKE: Whereas this feature makes more downloading happen. Oh, it's an easy decision-- the one that saves data rather than uses it. No. So, yeah, we're talking about a new capability for a set of websites that are doing uploads and downloads. SURMA: Yes, which is a limited set. I don't want to put a number on it. But it's definitely-- have I written a website where I would have used it? I don't think I have. I'm not saying that nobody has, but the things that we have written here, we wouldn't have used background fetch, while we would have used image lazy loading. JAKE: Oh, yeah. This is a really tough one. SURMA: Yeah, it is. JAKE: You're right. SURMA: I sort of convinced myself. JAKE: I don't need background fetch on my blog, unless I do the thing we talked about earlier of, like, download all my articles or whatever. And again, yeah. With small enough data or a fast enough connection, background fetch matters less, definitely. SURMA: Yeah. You also do the right thing, because you don't know how fast the connection is for your user. JAKE: Things like uploading videos to YouTube or photos to Flickr-- SURMA: That's amazing that it works now. JAKE: Yeah. But everyone has images. SURMA: Yeah. JAKE: It feels like, the second year in a row, we are converging on high level features. SURMA: As a reminder, I think last year it was scroll snaps. JAKE: It was scroll snaps. SURMA: Scroll snaps. JAKE: Was our winner. Yeah. SURMA: Yeah. JAKE: I don't know why I'm getting so serious about this. I'm getting really worked up, like all the rest are going to be deleted. SURMA: Everyone else is fired. JAKE: Especially because this is the one I-- I worked on this one. Go on, then. Yeah. SURMA: Dun, dun, dun. And that means, for the final-- the final, final, final. JAKE: All right. SURMA: It is Surma versus Surma. JAKE: After all your complaining in the first episode that it was just me winning, the final has come down to you versus you. OK. And you killed my feature in the process. SURMA: I did. And I am not sorry. JAKE: Right. OK. Come on. I'm going to try and forget all about that. It's odd, because some of the arguments you were making before apply again. Because sharing is very much a sort of PWA feature. The use cases are niche-er. SURMA: Navigator.share-- I guess that part I can't use, because that's not the new part. The new part is now images in navigator.share. JAKE: When did we lose the aspect ratio thing? I feel like I use that more than native lazy loading. SURMA: Aspect ratio lost against sharing. JAKE: This is rubbish. This is just rubbish. What have we done? SURMA: So sharing contains being able to share images to the system from the web app. JAKE: And we should say is specifically-- the sharing out is-- SURMA: That's what I mean. Because just being able to tap into the sharing part is not new. Just being able to share files out is new in 2019. So while sharing itself is cool, sharing images is a more niche use case, because it doesn't happen as often. Often you say like, oh, here's my blog. Tweet it out, kind of thing. JAKE: So the big story here is really the sharing from native to web. SURMA: Yes. JAKE: Which is a PWA only feature. But it's a big deal. SURMA: It is. But also, again, less customers. JAKE: Yeah. Fewer than background fetch, I'd say. That more things deal with larger downloads. SURMA: Probably, yeah, I think if we had sharing versus background fetch, arguably background fetch would have won. Maybe. But that match up didn't happen. So no time. JAKE: I think it's-- SURMA: It is. JAKE: I think it's native lazy loading. SURMA: I think I agree. We have found the best feature of 2019. JAKE: According to us. SURMA: Which is the only way that matters. JAKE: It is native lazy loading. When we put this to an audience-- SURMA: We're going to-- oh, it's going to be-- JAKE: Which is a video we will release at some point. SURMA: At some point. JAKE: At some point. January, probably. SURMA: When the Christmas hats don't make sense anymore. JAKE: Yeah. Well, no, I mean at CDS. We'll release the CDS version, where we talk to the audience, where we were not wearing Christmas stuff. It was background fetch. SURMA: Did we have the same match up? No, just the overall winner was background fetch. JAKE: No, because we've done at random each time. SURMA: Yeah. JAKE: And I don't know how much that-- SURMA: It could have been, by coincidence, we had the same match up. JAKE: But I still think that this was a lot of work. Like the spec for this is actually really big. SURMA: Yes. JAKE: It was a lot of effort. SURMA: This is the first time that it's an HTML that we're tapping into layout. JAKE: Yeah. But it was a really good cross browser effort as well. I think it was-- SURMA: I think everybody agreed that this is a problem that needs solving. JAKE: Yes. Absolutely. SURMA: Or an easier way to solve it. JAKE: And there's a lot to be said for lowering the bar for doing the right thing. SURMA: Yeah. JAKE: And I think that is something that we don't do enough in web standards. Especially with the extensible web model, a lot of times we throw out the tools. We go, off you go. And we still see many, many websites not using those tools, because they're complicated. SURMA: They are. JAKE: Because they can do lots of stuff. This is a good example of lowering that bar. SURMA: And, together with the aspect ratio proposal-- JAKE: Yes. SURMA: Boom. JAKE: Can we bring that in and can we roll it into that as an extra feature? SURMA: No. JAKE: I really liked the aspect ratio thing. OK. OK. Native lazy loading-- there we go. SURMA: We found our feature for 2019. JAKE: And we will see you in-- 2020? SURMA: That's the next-- yes, that's the next number. 2020. See you there. Yes? Hello? JAKE: Are you on the telephone? Surma speaking, how may I help you? We'd like to film an episode of 203. Is that OK? Is it convenient for you right now, sir? Shall I call back later? SURMA: (IN A HIGH-PITCHED VOICE) Surma, get off the phone, I want to use the internet.
Info
Channel: Google Chrome Developers
Views: 14,040
Rating: 4.9097066 out of 5
Keywords: Chrome, Developers, Google, Web, The best web features of 2019, the best web features, best web features, prefers style, native lazy loading, form elements, fromEntries, from Entries, google chrome developers, chrome developers, google developers, http203, http 203, http203 podcast, http 203 podcast, GDS: Yes;
Id: nQrfbk5WHvY
Channel Id: undefined
Length: 29min 46sec (1786 seconds)
Published: Fri Dec 20 2019
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.