 My name is Aaron Brazell. I'm a senior web engineer at TenUp, and the answer to the question is TenUp hiring is yes. I'm going to talk to you about asynchronous WordPress today, and I'm going to try to move quickly because I know we're all delayed from key note issues and all. Asynchronous WordPress is sort of a concept that all the events and hooks that are in WordPress itself over time can just sort of like ball down an entire page load, and anybody who's done any significant development with WordPress over the years has probably had a client or a site or something along those lines where the edit screen for instance just takes forever to load, maybe get 504s on a publish. There's all this stuff happening in WordPress and it's all plug-ins. What makes WordPress great is also some of the things that hinders WordPress in a lot of ways. All these hooks exist for plug-ins and themes to hook into it and add functionality, but that all comes at a cost and that all comes... It makes the whole loading and execution of WordPress on a page load incrementally slower and slower and slower the more events that you have. I want to talk to you today about some ideas, and I don't have obviously the time to go into the technical. I'm going to leave this to your imagination and your own research, but I'm going to sort of hopefully inspire you about how to get through some of this stuff and alleviate some bottlenecks that we all experience all the time with WordPress on scale. Every time WordPress loads, events are fired, and as I said, that just slows down the page when you have a lot of things happening all at once. Some of a lot of plug-ins hook into these hooks and admin and net plug-ins loaded. Save post is egregious. Talk a little bit about that in just a minute, and everything takes time to complete. One of the common things that anybody who's done real WordPress development over the years has probably run into is when somebody writes an article and hits the publish button, all these things happen. It might be a third-party service that takes the post content, analyzes it, throws back a bunch of tags that are suggested. It could be a social thing where Facebook is notified or Twitter is notified or whatever. It could be you have a, you create a user on the back end and there's some sort of plug-in there that goes out into the ether and pulls out information about that person and pre-populates their profile and WordPress. All this stuff takes time. So asynchronous events are not the heroes we want. They are in fact the heroes we need, and that's somebody who's clearly mangled that quote. I want my slide advance. Oh, there we go. We've got to have the picture. So TenUp did a project for one of our long-time clients, TechCrunch, a couple years ago, and I don't know how many people have been long-time readers of TechCrunch, but if you've been a long-time reader of TechCrunch, then you'll remember the battle days when TechCrunch took forever to load, a single article, and there were reasons for that. We won't get into all the details, but CrunchBase, which is sort of a related API that sort of is a database of investors and entrepreneurs and startups and venture capitalists and all this stuff, was communicated with on every article. Like every time an article was saved, it would analyze the content, find all the different people and stuff that's referenced in that article that's in CrunchBase and then it would create these cards for all the articles. That took a long time. I don't really know why this CrunchBase API couldn't have been optimized by the TechCrunch folks, but it wasn't. So this was causing real significant page load all the time. And a couple of our guys, Eric Mann, who is here somewhere, I don't know if he's in the room. John Block is another one who I don't think is here at WordCamp US this time around. They really came up with this concept of they created this class that TechCrunch has since open sourced. And it's a class that can be included, required as a file as many times as possible, but it'll never be instantiated more than once. And we get into it really quick, but I'm not going to go into detail, so you'll have to look at Hub repo. What happens is you extend this class and it's got to have a prepared data method in it, which is protected. It's also got to have a run action method that is also protected. And then there is an action variable, which is a protected variable that actually contains the hook that you want. Let's just call it savePost. For every hook that you want to make asynchronous, you will have this class that extends the parent class. We'll have savePost as your action. Prepared data is actually a method that takes a numerical array of parameters and think like savePost has three, not all of them are required, but three arguments that go with it, post ID, post object and an update argument, which is a Boolean. So you're going to get this raw data into this method. You never call it directly, but you can get this thing into your method where then you like do some sanitization, whatever, and return out of that method all the actual parameters that would go with savePost. The next one is run action, which takes that data, which is now the actual parameters that savePost would use, post ID, post and update, and you can create a hook right there. What actually is happening, I'm just going to like, you're going to have to look into the code on this. It's actually running on the shutdown hook. And instead of then using savePost hook to fire an action, you use WPA sync savePost, which runs on shutdown after everything has been done, so you can do all these expensive transactions after the fact without hindering the page load. It's a really cool idea, and we've used a few other projects recently that were super intense. And I wish I could get more into the details, because it's a whole lot easier to show than talk about. But I would just say, as you guys are developing, look at this as an option. It's open source, it's free, and it's really easy to implement. And it really just increases your page loads across the board. So here are my references. I do have a blog post this morning that I published on TechnoSailor.com. You can go look at it. It gives a little bit more context here. This slide deck is available. The GitHub repo is linked from there. The documentation on that is super easy. Play with it and write about it and share it with the community and share it with me and show me what you do with it. I'm Aaron. I appreciate the time. And I'll talk to you if not today, or if not after this session, throughout the day I'm around. Thank you.