Running Blazor in Production, Lessons Learned

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments

Really cool stuff.

I´m most excited about .net 8 rendermode = auto (blazor united). I think it will be a game changer for blazor wasm.

I´m curious how they will solve the auth part.

👍︎︎ 4 👤︎︎ u/[deleted] 📅︎︎ May 29 2023 🗫︎ replies

Cool, thanks for sharing. I recently shared my colleague's article on using Blazor for web development in 2023 and this post had so many comments. I'm so excited about people's interest in this technology.

👍︎︎ 1 👤︎︎ u/Data-Power 📅︎︎ May 29 2023 🗫︎ replies
Captions
in this video we are going to talk about lessons learned from running Blazer in production this talk is partly from the perspective running laser in production but also helping developers in forums Reddit and stuff like that we're also going to take a quick intro look at blazer because a lot of developers haven't tried it yet [Music] now Blazer some love it some haven't tried it yet so I'm a little bit curious who is using Blazer today who wants to use Blazer and who are a little bit unsure about Blazer write in the comments my name is Jimmy angstrom I'm a Microsoft MVP and I've been running blaster in production since its release back in 2019. I'm the co-host of coding of the work podcast a twitch Channel and YouTube channel we talk to a lot of interesting guests on the podcast sometimes we invite them to the stream and sometimes we live code and work on some projects right now we're building a Blazer called for paper site so please check that out if you're interested I've written a book about Blazer and the second edition just came out it's all goodnew.net 7 content now these are the only two books about Blazer that has raccoons on the cover but enough about me let's talk about Blazer at NDC Oslo in 2017 Steve Sanderson had a webassembly talk his thought wouldn't be kind of cool if I could run C sharp with webassembly so we took an open source version of the c-sharp runtime he compiled that to webassembly and when it takes the stage he has working intellisense he has well working C sharp code running inside web browser he even had the name Blazer which is kind of mind-blowing so why is the Blazer so awesome well I saw a post on Reddit that embodied it so well this is exactly what I think as well I feel like I'm getting away with something and it shouldn't be this easy to build sites now me included I'm not very comfortable with JavaScript but with blazer there's no switching between JavaScript or typescript you don't have to download another framework and there's no extra skills involved like react or angular I read somewhere that Blazer is for developers that don't like to learn new things and that is definitely not the case for me how I see it as Misfortune never comes alone and that Misfortune for me is npm webpack typescript Javascript power angular react all of those things that I have to learn and understand now you can only be the best at one thing so for me this removes clutter it gives me the opportunity to focus on one language one workflow and that's where Blazer comes in I was contacted by someone on Facebook and I I meet a lot of people so I added him as a friend and he said are you working with blazer yes yes I am this is going to be fun conversation and he crossed his arm well I don't know if he actually did that but I felt like he crossed his arm and said never gonna be a thing what what why do you think that well it's never going to be angular or react and I'm like well that that is not the point it's not meant to replace or kill another framework this is not there can be more than one It's Not Highlander I did a similar talk like this at NDC and apparently this expression I have here let me see there was a very good one so he tweeted this image and he said to him you know what you heard it here first or something like that that tweet has been seen over twenty thousand times the response was insane it was retweeted a bunch of times and I think that the discussions were very interesting now apparently this this expression was so much fun so it's actually became a meme as well so I guess thank you but again it's not the point it's not supposed to replace anything now Blazer's not another Spa framework it's not another framework it's part of.net so dot if you are DOT net well but you should consider Blazer there's no reason not to use Blazer really now it's kind of crazy because we still call it new Microsoft new Spa framework but it's almost four years old and I mean most projects doesn't even see four years I talked to a school where I teach it's a accelerated learning school so you go from zero to developer in 12 weeks so I said would you like me to teach Blazer in in the school as well well no no not a lot of companies are are looking for place of knowledge but are they asking for asp.net Developers and they were they were not asking asking for web forms or MVC either so again it's part of.net now we do ask for angular or react developers because it's not part of.net is something different but Blazer again is part of the.net ecosystem now another problem with blazer is that it runs on the server it runs in the browser and it runs on any platform with.net Maui which leads us into a naming problem to a podcast about the making episode on Blazer and they said well we just had an episode on webassembly so I don't think it's the right time right now and this is a very common misconception Blazer is not webassembly it's so much more last year we did a podcast with Steve Sanderson and I asked him if he was seeing the same things as I did because I talked to a lot of companies a lot of Developers and most of the developers I talked to are saying we're using Blazer server only a small percentage of the people I meet are using webassembly and he was seeing the same thing now granted web assembly is not as old as places server but and webassembly is gaining really really fast but General talks like this books or blog posts are often very focused on webassembly so it's easy to think that Blazer is webassembly but I think we need to lift server and hybrid as well so let's do that there are three hosting models we have places server we have Blazer webassembly and we have Blazer hybrid it's only small differences when it comes to what you have access to so with blazer server you have access to internal resources like databases for example or server resources like the CPU with blaze webassembly you have access to local resources so local computing power through the web browser Blazer hybrid can access local resources but not only through the web browser but also directly like Bluetooth the flashlight whatever it may be on your phone for example so let's dive into places server just so we can see and have the same understanding of how things work underneath so what has actually happened with blazer server is that it's running your racer component then whatever that renders we're gonna get a place is going to take that information create something called a render tree and in this case let's say that we have a header and a button now on the browser side of things we will have a Dom and a little piece of JavaScript the JavaScript is then going to connect the browser to the server using signalr so the changes is then going to be pushed over the signal or connection to the JavaScript and the JavaScript is then going to update the Dom awesome so let's say that I click the button that event is going to go to the JavaScript over the signalr connection over to the Eraser component the Eraser component is going to take that information reload the page do the necessary changes in this case a very subtle change I just changed the Blazer rules with a z to an S instead now it knows what the browser has because it it knows what is what it pushed over the connection so it's only going to push the changes does Joan are going to push the Play Store rules change over to the JavaScript and the JavaScript then going to update the term that's pretty cool now this representation is not entirely true because what it's really happening is not going to push over the H1 tags it's going to push over way smaller amount of data so on the browser side of things it looks a little bit different but before we go into that we need to understand how webassembly works so with normal browser interactions so with normal JavaScript we are going to download the JavaScript we're going to parse the JavaScript and then we're going to compile the JavaScript and then the jit interpreter is going to be able to run the code but with webassembly we can bypass some of that data some of those steps and go directly into the jit interpreter because the jit interpreter can run webassembly so what Microsoft did was they took the Mona runtime and they compiled that to webassembly and they are the really amazing part because the mono run time is running your dot net dlls as well as the dlls from the dotnet framework inside of your browser I had very mixed feelings about that but it's running it's it's actually running the dot net dlls it's running the same dlls that we just did on the server it's an amazing technology now what you can do as well is that you can skip the dotnet runtime and bake everything into webassembly so with net six we got an option to do ahead of time compile so the compiler is going to take all the dlls all the functions that we need and compile that webassembly as well that means that the webassembler file is going to be way larger but we're going to come back to Footprints and stuff like that in a bit a little bit later so that this image is how Blazer server worked just saw this one so with webassembly it looks a little bit different but not that much the real change here is that everything is now running inside the browser the.net dot wasm to the webassembly version of the mono runtime is running the Blazer sorry the razor components Blazer takes over creates a render tree we we're not using um signalr anymore we're using JavaScript interrupts instead talking to a little piece of JavaScript updating the Dom because webassembly can't access the Dom directly so it kind of works in a similar manner as with blazer server so what about Blazer hybrid then well again let's talk let's um show the the browser version the webassembly version the Blazer hybrid would look something like this so now instead of running inside of the browser we are running on iOS Android macawas windows or Tyson it's running inside the.net Maui shell and it's running on top of.net or net for iOS or Android we still have our razor components and nothing different with the racer components we have the Blazer Blazer framework we have the render tree we have the Dom and we also have an option to use native components inside of the same application so this all of this means that I can take my racer components and using Blazer server and Blazer webassembly I can reach the web or the browsers with.net Maui I can reach iOS Android Mac OS Tyson and windows and with webview I can even reach more things when it comes to the windows platform like vpf and winforms I want to show you a little bit of what place it looks like so we're going to take a look at a to-do app because everyone loves the to-do app I've called my to-do app manamana because [Music] I really like puns okay if so let's take a look at that all right here we are inside of Visual Studio and I have a project called manamana.racer which is our shared project so there here's where we're gonna put all our shared writer files we also have Maui demo we have a server demo and a webassembly demo and what we're going to do is we're going to create a to-do list so a list of to do items so let's start with that let's create a list of to-do items so this is going to be a list of to do item now the to do item only contains like name and description and it's done we're not going to go into that let's call it items now the second thing is that we need to access our service so I've created a service that we will be able to access our um our backend so let's add that so I type at inject this is how dependency injection works with blazer so I'm going to inject a to-do service and I want it to be called service like that awesome now when we load our page we need to that page need to get all of the items and fill the list so let's do that we're going to override a method called on initialized async and we're simply going to say items equals a weight service dot get items and we're going to call the base class as well there we go so simply put what we're doing here is that we are getting the information from the server and putting it into the items collection now the third thing or the fourth thing we're going to do is we want to add the items to the list we want to add the list show date list so we're going to use something called virtualize and this is a new component that came in.net 5065 I believe it was five which is going to render it's going to render all the posts you can think of it as a for each Loop but it's actually only rendering the the items that are visible on the screen so anything above anything below it's just going to be a div taking up the space so the scroll bar is going to work as as we could could expect so virtualize items equals items so we're setting the items property to the items list and then I can write context item so this is the same way that we can write for each VAR item in items so the the VAR item is the context basically so inside of virtualize component I can now use item for one single to do item so then we're going to have an Li we're going to create an input field now this input field is HTML ordinary HTML I'm going to say that it should be a checkbox and I wanted to bind to the item dot is done so when I check this box it's going to update our list and our item with the correct um whether or not it's done or not and when I um click it so when I click the item as you can see I'm using an at site at bind at on click these are Blazer methods or functions events even so on click I want to run a method that is called update item and I'm sending in the current item into it like so then I want to show the title so I'm going to add a a link to a page to do slash and then the I the ID of the item and I'm going to show the title like so then we're going to have a button so in this case it's going to be just an ordinary button but I'm going to add bootstrap classes BTN and BTN danger because this button is a little bit more dangerous than any other button and I'm going to say on click so just as we did with update item I want to run another method called delete item like so and the button should say delete and at the end I'm gonna close off the the list item and close off the virtualize like that there we go next thing we're going to do is we're going to in the update item method we're simply going to call our service and send in the item like that with the delete method on the other hand we have a small piece of JavaScript here which is says show confirm so the the name of my JavaScript is show confirm and it's running the JavaScript method confirm so what I now can do is I can go into the delete method here and I can say I JS object reference I'm gonna wait the runtime and I want to invoke a JavaScript method called import this is the same import that you're using in JavaScript if you if you're used to that and what I want to import is the file content so if I'm saying underscore content Blazer knows that okay so this is a this is content that lives inside of an assembly so underscore content tells place in that the assembly name is manamana dot racer because that's the file we're in it's in the pages folder and it's called to-do list.racer.js like so so this is something called isolated JavaScript and it lives together with the JavaScript sorry the Eraser file which says they the really cool part in all of this so then I want to do a call to our show confirm so I'm gonna use my reference I'm going to invoke I'm going to expect back a bull and I'm going to show run the show confirm method I'm going to send in do you really want to delete this and if I do I'm simply going to run the service dot delete item method delete the item and then I'm going to run and then I'm going to delete the item and then I'm going to run state has changed so simply What's Happening Here is that I'm deleting it from the server I'm deleting from the items list and then I'm saying you know what this is happening on another thread could you please update the UI for me and then it does that now I don't have a reference to the JS runtime here so let's do that let's go up here and I want to add the JS runtime same thing here inject ideas runtime J is runtime now to make this a little bit more interactive let's add a title as well so I'm simply going to do an H2 here my items and then I'm going to do an at sign when I do that we're transferring everything over to C sharp land so now I can write C sharp so here I can say items dot where they're not done count them and end so here you can see that I'm mixing HTML with C sharp code which I think is kind of mind-blowing so let's take a look if I run this application let's see what happens there we go so we have our application here we go to our to-do list I have two items here already I do not have a raccoon I have a book with raccoon on the cover but I don't have a raccoon but let's say that I do I'm going to click that so if you if you see my items up here you'll see that it count down counts down nice and easy so now I have some interaction happening and I can press delete do you really want to delete it no I actually do want to get a raccoon so let's keep that one and I can click the link and I can get into a another page and show that information okay so that was Blazer server so let's go down here to webassembly and set that as a startup project and run that so as you can see when I load the page you'll see that there's a little bit of a progress bar and then the page loads a little piece of piece of of progress bar and then it loads so if I click the to-do list you see that I have the same to-do list I can remove the raccoon I can delete it everything still works just the same and all of that code is in the shared Library so it's exact same dll running inside of the web browser instead of on the server that is kind of cool isn't it now it takes a little bit of time to start up the Maui project I'm not going to do that I'm going to show you a small video about running but from here from the dot Maui project you can run different platforms of Android iOS it's a little bit small but you might see it here so Mac Mac OS tizen on Windows so let's go back to the deck and I'll show you what it looks like running all right let's take a look at what it looks like running in an Android emulator so this is the Android emulator it's running the same template I can click the to-do list I'm getting the items now this was the first time the server was called so it took a little bit of extra time until the items was returned in this case it's I'm not supposed to get a rakuna as opposed to get some Legos but that's that's amazing as well right and it's worked the exact same way I think this is really really cool to be honest now one of the promises with blazer is that there's no more JavaScript now this is perhaps a myth it depends on where you're coming from it's gonna definitely going to be less if you come from an angular react World but remember that JavaScript is needed it's used for for loading webassemblies used for interops and all of that so it's not definitely not going to replace JavaScript in any capacity we need JavaScript to access browser resources for example now I come from the MVC eraser Pages world and for me it was more JavaScript than I was used to now having said that I created my own grid component I'm I've built Bluetooth communication libraries I have myself to blame really but in the early days of Blazer you need a JavaScript to do simple things like changing the title for example all of that is built in now and it's getting better and better every day now it's still possible as you saw to run JavaScript with blazer so if you have your favorite JavaScript component then you don't want to you want you don't want to stop using that it's still possible you can do that now I wouldn't recommend mixing and matching all of these different languages I think it's better to have a clean solution have components built natively with blazer but it's possible so what you can do is you can leverage web components so you can add JavaScript libraries and create web components that you can just use inside a Blazer you can use JavaScript web components in Blazer you can use Blazer web components in JavaScript or in MVC and this works for both webassembly and server which is kinda cool on our coding off the work Tick Tock I added a video saying that Blazer was production ready and I got a lot of comments of things that were missing so I got an awesome list that I could look at and see if we have anything similar in the Blazer world so the first thing that that I saw was angular material well we don't have angular material because it has angular in the name but we do have matte Blazer and we have mod Blazer and a lot of other framework that is using the material design language not going to be a problem angular Flex we don't have that built in well uh neither just angular I guess but we have something called flexor which is a highly um inspired by angular um angler Flex they ask for angular animation there is a product that was called Blazer animate but is now inside of Blaze rise so we have that as well perhaps not as as flexible I don't know but there are there are options unit testing was one of the things that came up and we have B unit eagle has an amazing job for unit testing with blazer and that is the preferred way of doing testing with blazer now routing at an HTTP came up this is building in the built in into the.net Frameworks we don't have to think about that we also have directives now direct is a fourth I know and as far as I understand we don't support that just yet pipes came up as well and it's all all about converting types and formats but we do have that but perhaps not in the same nice syntax as with pipes but there are options and I think that there's no based on this list at least there's no features that angular has for example that is just missing and currently worked around in in any way now this is a very common question should I put my code in racer files or should I put it in code behind well it's really only different ways the default is Razer but it's kind of easy to move it to code behind so when Blazer came out I I really wanted to have it in code behind but I thought that you know what I'm gonna give it a try I'm going to try to run it in Razer files and it got me hooked it's just way easier it's more productive I don't have to switch between different files if you end up having way too much coding erase the file you might want to break things out into services or something like that or you can always put the code in code behind but I would say that give it a try because separation of concerns is not a thing in laser when it comes to code behind or racer file because the code behind and the rate of file is going to be mushed together compiled and it's still going to be the same file so it's not really separating anything and it's really boosted our productivity to not having to switch files and look for them and expanding in visual studio and stuff like that another very common question I get is what component Library should I use now this is developers that are new to Blazer so they're saying like hey Jimmy I'm just about to start with blazer I've never seen that I've never used it I want to do my first project this weekend what component Library should I use and I don't know what that comes from maybe because there's the need to use component libraries and other Technologies I don't know but for Blazer I think that the best thing you can do when starting out use the native stuff build your own components now I'm not saying that you should build your own component Library but learn how they work because then it's going to be way easier to understand how to use the other Frameworks or the other third-party vendors but there are lots of different vendors out there we have progress teller Dev Express syncfusion radson Blazer eyes matte Blazer mud Blazer and Shameless plug Blossom which is the grid component that I've built some of these libraries are are free some of them cost money start with figuring out what you need test them out see if they have the things you need do they look good does it solve your problem because in many cases I find myself using some of these component libraries and I'm locking myself in into some things that can't be solved so try to think about what you need try them out you should definitely not build your own component Library these are all really good and it will save you time but you need to choose the one that is right for you now building a component Library it's a bad idea it's a lot a lot of work now back when we started with blazer we used a component called datatable.net which was funny enough a JavaScript grid component and we had a couple of special needs from that we needed to for example if the window was resized we wanted to remove some columns in a specific priority way that was not supported by any of the vendors that we found back then we wanted to have negative numbers um blue no sorry red and positive numbers blue and instead of writing a template for every single place we wanted to use that we built that in into the component now I wouldn't recommend that because it's a lot of work and you can check it out on GitHub and see how much code it's involved into that component use components you should make your own components because in the old ways of building components it was hard and it wasn't very common to build web component web forms components and stuff like that it was definitely denot every developer who did that but it's different with blazer Blazer is very component Centric most that that's really the most important thing you should think in components can this component be reused but also can I simplify the usage so this is what we did we took a ordinary HTML button and with we added some bootstrap classes in this case BTN and BTN primary this would be basically the whole implementation right now the problem is that I'm going to save a customer what closet should I use is it the primary button is it success button maybe it's dangerous to save a customer so I have to make that decision I need to remember what we as a a group or or a team have come up with so what we did was that we created an enum so it has a default it has a say cancel delete or whatever thing we might need but as you can see here is it's using the BTM primary two of them is using BTM primary the two of them are using um BTN Danger but I don't have to think about that I know that I'm saving a customer I'm using a save button I don't need to use this and don't have to make a save button but I can have the enum save in there now I don't like planning for the future that much but what happened was that I upgraded bootstrap and bootstrap changed the sum of the naming in in what kind of of um classes I should use I had to change that in one place and it just worked everywhere so this is a very very good thing to think about so build reducible components if you find yourself writing similar code twice try to see can I do this in a more generic way can I create a component build ER components like the one I just showed you components that just is just an abstraction on top of HTML that will simplify and streamline selecting the right classes for you now this isn't always a 100 rule but it's going to be so much easier a very common question is also does companies use Blazer and the answer is yes most companies don't talk about it most companies doesn't talk about the angular react either to be honest but big Swedish companies use it internally I'm talking big as in top 10 largest companies in Sweden companies that you have heard of I have many friends that are consultants and they see the same Trend there's a lot they have lots of customers that are investing in place right now if you want to see a real world project you can check out Jeff Fritz on Twitch who is using a blazer for his clip talk web which is a really really cool and huge application so let's talk about Blazer server specific things so when we started with blazer we didn't add a refresh button so what does our users do they start clicking F5 and what is happening then is that it's going to kill the current connection it's going to establish a new one but the old connection on the server is still going to live by default for three more minutes so what happened was that we had a problem with our SQL Server it was a little bit slow and people started pressing F5 100 people at the same time F5 F5 F5 nothing is happening F5 so what happened was that our SQL Server got even more load it went even slower and our web server ran out of memory so add a refresh button in the UI don't mix Blazer and non-blazer Pages like I have well I still have this part of MVC left in the application let's let's just leave that because that is going to to do the exact same thing it's going to disconnect the connection and connect again and leave it for three minutes in.net 8 there are coming some really nice ways of mixing and matching webassembly with with server and stuff like that so it's going to solve some of these issues um in dothman 8. now the feedback we got from our users was that nothing happened so we came from MVC and web forms the whole page reloaded and you saw that something happened but with blazer nothing reloads so we had to add some kind of notification it's saved now the feedback quickly switched to why isn't this updating automatically so suddenly our user thought that you know what this completely different system I'm changing that system why isn't this other system updating automatically which is a huge shift from nothing happened to hey we want more we want more interactivity we want things to speed up which is really really cool I think so make sure that you notify your users customers saved indicated in some way I mean this is something that angular reactor view developers are familiar with of course but if you come from raise the pages or MVC it might not be as as common to think about these things now when it comes to development speed I would say that Placer saved our project we were only a few developers we were six developers and compare that to companies doing the same thing with 10 times more Developers in some cases we found that rebuilding it in Blazer instead of fixing the bug in MVC it was actually faster produced cleaner code and was easier for us to maintain we also shared components between our project which sped up their development and unified the project something that was not as easy to do with with Razer Pages or MVC now Blazer renders on the server and you might have heard that Blazer service is so slow because it sends its renders on service sends over the data over web sockets or or signalr and it really depends on what you're comparing it to now if you have a bad or slow internet connectivity yes that might be a little bit wonky if you will but we've been running it for close to four years now in production and we never never got the feedback that it was slow at least not related to Blazer to be honest but the cool thing is that it only sends the changes over so it's definitely going to be faster than MVC or web forms now depending on the JavaScript implementation it might even be faster than JavaScript implementations because what happens is that the JavaScript framework is going to go over to the server let's say that we're going to download 100 items so it's going to go to the server get all of those items sent back to the JavaScript compare those to the Dom and then update the Dom with blazer the request is going to go back to the server the server is going to get all of these the the items compare them on the server side and then send the change over so if there's no change there's basically no bytes going over the wire at all or only the changes that is actually happening it doesn't have to update the whole table you can update just one and one row or one TD if you will I talked to a couple of developers at the conference I organize and they were absolutely sure that we're going to use Blazer server two things that was very important to them it had to work where the internet connection might be bad so basically it should work offline and it should handle millions of users now there are two things that laser server is really really bad at and that's exactly those two things so Blazer server is not for everyone definitely not is places slow Blazer server flow I should say well never got that feedback from from any users that we have the developers I talked to they were afraid that the initial download size of Blazer webassembly would be a problem and we're going to come back to that in in a second or two so it's not going to be slow for everyone if you have good infrastructure places server will work great but it's not the solution for all projects so let's talk about Blazer webassembly let's talk about the elephant in the room like the footprint on loading time so I asked a Swedish Facebook group of for coders code monkeys what are the things that you would like to have answered in a session like this and he there was there was one guy that was kind of a hostile to towards Blazer and he said that well downloading the whole run time is just insane the amount of bandwidth needed for that that's no that's never going to be a thing you remember the the um the previous conversation so I thought what kind of footprints do applications or webs have today so Facebook had 16 megabytes of JavaScript I'm just measuring JavaScript not images not HTML so the JavaScript was 16 megabytes a little bit more Pinterest had 6.4 megabytes YouTube had four megabytes Twitter back then was 3.4 megabytes stack Overflow had 1.5 megabytes Apple had 1.2 megabytes and the Blazer demo that I just showed you worth 1.2 megabytes it's actually under one megabyte now because every update they do they update the tree shaking and they get rid of a whole lot of data so it's not really I would argue about the download size now granted it was a very simple demo when it comes to the Mount of data we're talking about with the blaze demo but still but there are things to solve this issue now if we assume that the amount of megabytes or kilobytes it's not the issue it's actually the loading time we can do it and we can solve that by adding a progress bar for example that will add to perceived speed so we'd be able to feel like it's loading faster we can use server pre-render but that needs an asp.net survey in the back end so that might not be for everyone we can use jsakamoto's a fellow MVP pre-render Library so it's perfect for SEO and it loads way faster so when you publish your application it's going to pre-render everything and create HTML files or HTML segments whether that will make your application feel a lot faster and then it's going to transition to webassembly so this is the code that Microsoft used for the quick grid sample which loads super super fast because it's it you get the perceived sense of loading and you can always use aot so ahead of time compile it's going to be a larger file so if your internet connection is really really bad that is not going to be the solution but if you know that you have pretty good internet connection it's definitely going to be able to load way faster so I'm going to show you something that I built my ZX Spectrum emulator it's my Hello World basically so let's bring that one in here so when I was seven years old my parents got me my first computer at ZX Spectrum and that was a very defining moment for me because this was the moment when I decided that I wanted to become a developer I didn't sit down and and starting playing games I sat down and I wrote 10 print Jimmy 20 go to 10. when I became a developer I thought was it would it be possible for me to write an emulator written in c-sharp it took many years not a efficient time of course but it took many years before I was actually done with emulator and this is emulator running inside of Blazer so it's my c-sharp standardized static Spectrum emulator running inside of the web browser so if I start this you'll see that it loads I can load up manic Miner here now you can't hear this but I can it even has sound so I'm using JavaScript interrupts to send information over to the browser and get um get sound so if I start the game here see if I can do that enter and I can walk around I can jump and stuff like that now I've built this emulator many years ago and I've implemented it for Windows for Xbox for a lot of different platforms I have yet to this day not been able to to finish the first level I can't get past it this is too much it's too hard I don't know so please try it out and see if you can do it I can not for the life of me get past the first level so should we go all in Blazer well the answer is always it depends what are your needs what kind of knowledge do you developers have is it production ready yes it is should you invest time into exploring Blazer yes now will it replace angular react or View yes for some developers like me I don't have to learn typescript JavaScript angular react view whatever framework is popular right now I can stay inside of C sharp without context to switching so thank you so much for listening and if you want to get in contact with me please contact me on Twitter or LinkedIn or through my blog or whatever it may be I would love to hear what you do with Blazer and if you have any questions I'll be happy to help if I can
Info
Channel: Coding After Work
Views: 19,580
Rating: undefined out of 5
Keywords: Blazor, lessons learned, .net, webassembly, blazor hybrid, c#, blazor tutorial, Running in production, Components, Angular, React, Blazor server, Blazor WebAssembly, AOT, Angular killer, Future of webdevelopment, web development, Tips and tricks
Id: 6ctA95pZJoc
Channel Id: undefined
Length: 55min 10sec (3310 seconds)
Published: Wed May 24 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.