Load In The Loop: Episode 10 – Hooks and Lattice

Jordan Griffey

March 9, 2020
Load In The Loop: Episode 10 – Hooks and Lattice

Load In the Loop: Episode 10 is here! Join Eric Hileman and Ivan Chepurnyi as they identify and fix some performance issues for Hooks and Lattice.

Sponsored by blackfire: https://blackfire.io/

Follow us on Twitter! https://twitter.com/loadintheloop

Ivan: ivan.chepurnyi@ecomdev.org, @IvanChepurnyi
Eric: litl@magemojo.com, @ericvhileman


Eric Hileman: [00:00:00] Load in the loop is sponsored by black fire.io. I’m Eric Heilman, CEO and cofounder of MageMojo, Magento hosting in New York city purposes program is take some of what we learned from over 10 years of Magento specific hosting and evaluate one of our customers stores. We’ll share with you what we find in hopes that it may help improve your Magento skills and the performance of your Magento stores.

So, along with me on this trip as my cohost, Ivan,

Ivan Chepurnyi: [00:00:24] Hey, my name is Ivan. I’m a  Magento performance expert. I’m based in the Netherlands. Also, I’m a cohost on the show, so, so now, now we finally get a chance to record a new one. As you see, I’m right now in the new recording set. I’m a the moment, in the third story of my home.

So almost in the attic, my kind of home office, temporarily, because there was some storm sent, I will say, in at home with, my family, also because of family reasons, I needed to give more attention, you know, to  and so on. So it was, wise to move. Actually my  beefy PC from office to my home and to do a lot of stuff here.

So how is it going for you?

Eric Hileman: [00:01:20] Good. Good. I had a megasaurus outside taking core samples, so that was delaying us last week as well. I think that, I don’t know why they’re taking core samples out there, but they were pounding through the sidewalk and that was just. So loud everywhere, like the whole neighborhood was…

Ivan Chepurnyi: [00:01:38] ,You know, like last week I was worried about, you know, your a sound outside.

but yesterday I was worried about sound outside over here because like wind, over here was howling very loud yesterday. So I will assume working here and like, cause it was, the winds were crazy and it’s  we didn’t have time to record yesterday. We didn’t have to a chance to do it because probably the sound would be terrible.


Eric Hileman: [00:02:09] yeah.

Ivan Chepurnyi: [00:02:10] Yeah. It’s not as terrible as previous sound. Probably our viewers don’t know, but, I completely messed up with the quality of the recording? I didn’t check my audio bit rate was very low. However, I have a very good microphone, but, the quality of the sound was at the 60 kilobits and it just doesn’t make sense.

You know, like I could just use my laptop for doing these kind of recordings. So, yeah, fro, from a Magento news, anything, interesting happening. I, I served them with somewhere a nice Twitter thread about Jeffree star cosmetics launch.

Eric Hileman: [00:02:56] Yeah. Yeah. So I was, I took some, so, okay, so the Jeffree star cosmetics is huge.

He’s got, I think 15 or 17 almost 17 million followers on Twitter alone, and he does cosmetic products, Jeffree star cosmetics, and they do a lot of drops. So they’ll hype up a new product line. This one was blood lust. He does videos about, it, builds up the hype, and they have a limited inventory. So then.

They do a doorbuster where the site opens up and everybody goes in and gets it as fast as they can. And November they, we, we saw one of our customers. There strata scaled way out and we thought, well, wow, what’s going on? What’s, what’s, what’s Strata’s doing? Is this an attack? You know, big DDoSs. But no, it was real legit traffic.

And that’s when we later learned that he did a collab was Shane Dawson. And in November, I think it was November 1st they knocked down Shopify and knocked down other customers on Shopify as well. And we got a lot of the overflow traffic from that onto one of our customers who’s an authorized. Re retailer.

So he’ll put, he’ll release a collection and. only some items are available on his site, but most of it’s available on the retailers as well. So everybody really gets slammed on it. And us, that’s, they contacted us again and they said, Hey, he’s doing a blood loss collection and we’re gonna, we’re gonna see some traffic for that like we did last time and everything held up well, and we want to make sure everything’s going to be good again.

which it was, and it went really well. We had no cues or anything like that. but it looks like Shopify was queuing orders. And from Twitter comments like people weren’t getting through at all. they were having all kinds of issues with the queue. Other, other authorized retailers who were on Shopify as well.

Like there, I posted a screenshot of that. I was like, Hey, it looks like shop’s struggling again and, that, that attracted the Shopify fanboys and. I didn’t realize that there’s apparently some war between the rails community and the PHP or Magento community. I don’t know. I stepped into that somehow and I don’t really know how, but, but someone in that, came forward and was like, Oh, no, it’s  this is a bad look for you.

You shouldn’t say that. there. They’re doing really well, and this is just the limitation of my SQL and rattus. And I was like, wait, no, my SQL, you know, hundreds of thousands of transactions a second and read is I don’t like, what are you doing with Retis? And so it turns out like there. A Renaissance at pubsub and a lot of people are using it as a message queue.

And I’m like, yeah, you know, but even still, like you should be getting hundreds of thousands of messages in and out of there. A second, like Shopify is public numbers, say 166 orders a second, and so there’s no way that my SQL or Retis is the bottleneck to 166 orders a second. There’s just no way.

Ivan Chepurnyi: [00:05:48] Yeah, it’s a Z.

There is definitely some kind of a walking happening in the background to Vegas. You know, when you place an order, you have to update a lot of the information in your store in order to make sure it was that when a lot of people buys the same product, you know, you don’t have over a sell of items. You don’t have.

you know, too much customers, getting paid for an items that Zay want to get because it’s not in stock,

Eric Hileman: [00:06:16] especially a limited stock, you know, limit.

Ivan Chepurnyi: [00:06:18] and, in that case, like in Magento, on the Magento to image under two, it’s even more visible, especially in the light of his, issues. As we were discussing a couple of shows ago about a high concurrency, ordered replacements.

Zed. That was an issue in one was the customers. When does the coupon counter was, updated.

Eric Hileman: [00:06:40] Yeah.

Ivan Chepurnyi: [00:06:42] Actually did use the order number two, one one order. Right, right.

Eric Hileman: [00:06:52] So there’s speculation that like Shopify will do private deals to increase that, although publicly they say we don’t do private deals to increase that.

Ivan Chepurnyi: [00:07:01] Yeah. It’s, it’s, it’s like a mage in Magento, like you have, different options. So. I was having a lot of discussions with score. Dwell persons was saying like, why don’t you implement it?

Just more sophisticated feature of deducting stock. You knows, it’s going to be accurate and high-performance. however, as a Jessie, you know, like we have two options here. Like, we can, either sacrifi Consistency of the stock data, or we can sacrifice performance for consistency. So says they don’t want to change the wall architecture, of the stock deductions itself.

Because I’ve, for instance, already built a, one of the stocks areas for our customers. A long time ago, I wouldn’t have a talk. I was giving them about it, at a major  Netherlands last year, where I was actually, I can actually just. Explain the real quick if you are interested.

Eric Hileman: [00:07:56] Yeah, yeah. Andre, he’s one of the Magento cloud developers.

He said David did a POC with, what was it, 86 orders a second, and he said, if you move quote to cart and into an in memory table, you can do 10 X that like, so is that similar to what you

Ivan Chepurnyi: [00:08:13] free files on to stock commutations per second. How do you, how do like it? So, yeah. Well, that helps. Yeah. Well, let me just,

Eric Hileman: [00:08:23] open.

Is this a microservice? No. Okay. And pure PHB.

Ivan Chepurnyi: [00:08:29] Yeah. In pure PHP. So is there a snow Ross involved? Nothing. He just a Buhr a implementation of event sourcing in PHP in my SQL as the only difference that application is written actually in a synchronous manner. So it’s not a blocking application where you just to start the PHP FPM process and then you wait two days through turn back as a result.

No. Here, we have one single PHP, process. We actually will wins. Is Taka in the show notes? Definitely. But let’s go. Just a little bit. So, everything about this one. So this is a standard Magento behaviors. So let’s say you have, some stock items. You place an order, it validates a stock item, Zen. if this item became South of stock, Magento actually walks those stock items and to put them into the re index list.

And is that three index list later on gets re indexed by Magento during the  phase of this kind of foot bottleneck. Unless you have a synchronous, functionality is enabled, but unfortunately it’s not as a case all the time. So if you don’t have a date on schedule, you’re screwed. In this case, and I remember it was update on schedule standard could work in wintery was still re-indexing manually by these.

So. MSI behavior works very similar, Zeland things as there was snow walks in the world, in Mussai. has issues was consistency. So in MSI we sort of places an order or just fully dates. Quantities is, is there some available in stock? is there some available with creates negative reservations?

And then like the stock will became eventually consistent. So you will see minus quantity. But the problem ESU allow, orders of the items that are not yet, is as it’s already out of stock. During that period of time. So is there a serious, like there is going to be a race condition where two customers were buys the last item, right?

bud Zen, it will be a task for actual, and the user and merchant to deal with it. Decide who customer, which customer going to get the order and which one going to get the refund. So this is how Magento, two works, this as some other things from the talk. And here’s a little bit about, the application.

So I built a synchronous application. It’s using event sourcing. So every single stock mutation is stored as data waste record. So let’s say you have a adjustment, common, from stock recount. So you have adjustment coming from returnables item through your ERP, or you have an adjustment coming from buying new stock, let’s say, from somewhere else.

So, you have, At books. So let’s say, in order to not all grow my skill tables, every single, time frame, there is a new set of tables getting created in the system. So in, in that case, there’s going to be one table, to track at box of the events. And in Azara, one is going to be event with this APOE, a suffix and a table name.

And inside of this event stable, there’s going to be some events like order at this key. You updated items, queue adjustment, return ship canceled. All is this documentations. So you have complete stock history was everything that’s happening. And based on this, events, you actually get the final stock information.

So this is how it just happens. So as the time passes, you get more epochs, more tables created. And it also means my SQL can work much more efficiently because, in my SQL, if a is that they both indexes are feeding into my memory. Off your buffer pool at different rate, and usually as the older app hooks are not accessible during the run time.

So usually like as time moves, you’re only work with events that are the most recent. Usually don’t go in, look at the older events area. You just store it as a history. So it’s kind of, I, I didn’t know, can I call it a brilliant idea, but I just come up with lady? Yeah. Okay. How can I, reduce, you know, Kyle, I can preserve as the events history was outgoing and OBS, the table and at the same time was all sacrificing performance.

So here is a, is the solution I came up with for this customer and basically is that they will structures where as simple, you know, pork ID Zen started that and at that, so I can, greater report, let’s say all falls is documentations from this time to his loose time and he just very simple operation on the database level.

And the run table is where it’s simple as well and sends it as aggregate. As well, so aggregate. It’s kind of aggregated state. It’s not used for actual stock mutations. It’s used for, let’s say, front-end to show its product in stock or not, and it’s updated that real time and whizzes service   this aggregate.

It’s. It’s contains information about the last events that was supply to it. And the last Apple. So, let’s say when system, looks, let’s say customer, Dell’s, Hey, I want to buy this product. what happens is gonna pick up an aggregate. If aggregate is not there, it’s going to create new one. But usually Zen, you agree it is graded on the first event, right?

And then, when it creates this aggregate. And when it has the data, where it is there, it knows what was lost last event processed, and it can queries it event stable for the last, event since that one, and then it real time and it can calculate all the adjustments that was happening since last update to the aggregate.

and Zen, here’s a very interesting diagram. So basically what happens there is there is some Magento, a frontend note is it communicates with this microservice and as this microservice as balanced bounce of workers that are also us in coronials that work with this database and also has inherent us workers as they, have, Kind of, Gloucester at, processing, of, multiple skews. So let’s say one worker tells, Hey, I’m going to process SQS from sq. One to ask you 5,000. The second worker tells from thousand to 2000 and so on. So, in this case, every single worker is single threaded and documentations happening atomically in memory instead of heating IO.

So let’s say, is there a lot of customers who want to buys the same product? They will end up in the same worker as it will know about all of the requests. And we’ll, automatically, reject is the ones that it’s already out of stock. So we don’t rely here on database, level, looking in order to implement atomic updates, and consistent updates.

We are, relying on single threaded in my Marie cluster of workers and insights your way. It can actually scale. Two thousands of operations in stock deductions per second. And basically it’s  is scalable because, you can, you know, increase number of workers infinitely because they all are responsible for some small Bart of as a system.

Mm Hmm. So.

Eric Hileman: [00:16:12] Ah, I see. Yeah. They each have a, I got it now. Okay. Yeah. So you split up the stock so they can each manage a small portion of the stock instead of one thing. Managing all the stock.

Ivan Chepurnyi: [00:16:24] Yeah, because it goes another way to say, yeah. Because, when we talk about the standard, approaches which software developer are using, they just rely on database for that.

Proof was Jose say, Hey, I’m gonna look this database record. But the time that it takes for you as a, as a program, right. to send the query to the database, in order to log the track or Zen database returning you back a response. And Dow. Hey, I acquired to look. Oh yeah. I wasn’t able to acquire a look or I’m keeping you away from to, as our process releases, a little cords that to row all the time at as more and more look congestion and more and more parallel, customers are coming in and trying to do the same.

And in Zanta, my skills just gonna die.

Eric Hileman: [00:17:15] you’re queuing it up. Yeah.

Ivan Chepurnyi: [00:17:17] He just going to be a connection over a while and they just back up. That’s why you see as those kinds of issues with that, Shopify was Magento because, no one is, has implemented, This kind of a strategy for deduction because it requires actually quite tailored solution for a specific customer.

Because you need to put inside of this worker, you need to add business logic. You can adjust, you know, create the doctor is that there will automatically do it for every single use case. So you have to actually program it in order to. include into consideration what kind of logistics, of this specific customer, how it works.

for four simple ones for single warehouses, probably ThreeWill to implement, but, I, I usually do with customers that have some kind of multi warehouse installments. So it’s, it’s

Eric Hileman: [00:18:13] six checkouts a second on this. What are you thinking? Like, like take it from stock Magento stock. Magento. No customizations, no tricks, just out of the box community.

Ivan Chepurnyi: [00:18:27] Yeah.

Eric Hileman: [00:18:27] So just Stratus, what do you think you could push it to?

Ivan Chepurnyi: [00:18:30] yeah, the standard Magento, let’s say if we are not considering as a service at all. All right. Does it sound, there’s Magento with MSI? you can achieve a very high throughput by fixing Gabo of cord works.

Eric Hileman: [00:18:46] W not fixing core bugs.

Ivan Chepurnyi: [00:18:50] That was,

Eric Hileman: [00:18:50] he, he killer.

I, I’m probably murdering his name. Jennica on Twitter. He writes a lot of, AWS Magento articles. He was, he shared a link to that old Magento is like Magento 2.0 benchmark where they were like 0.7 orders a second or something

Ivan Chepurnyi: [00:19:07] from Rio. Magento 2.3. You went for experience. Like it’s steel, not more than one order.

yeah, I, I cannot, who put it into my mouth, but it’s, it’s actually one order per minute, you know,

Eric Hileman: [00:19:26] it’s a second one per second. Rarely. So

Ivan Chepurnyi: [00:19:29] while one per minute, because, as soon as you have some kind of payment integration, as I said, this ghost orders. You don’t remember. We were talking about Xeljanz.

It was related to the database. A wall system database slow cause it was happening on place. Order during the Midwest. Checkout.

Eric Hileman: [00:19:50] Yeah. Refresh my memory cause I’m pretty sure I’ve seen community stores here going up to 20 or 30 orders a second and they’re in their peak now. It’s not like sustained for an hour or more.

That’s just,

Ivan Chepurnyi: [00:20:00] yeah, like you can have occasionally you can have 20 orders. Yeah. Actually it works well if you don’t use sales rules. But as soon as you have sales roles, you, you got to Zillow, one order order per minute or sample. Exactly. If you have some external API. So if you have, let’s say payment assets requires you to contact this payment provider in order to receive a confirmation.

It was a payment during the place order operations and there’s a wall or transaction. Is it going to wait for that things to complete?

I gotcha. I gotcha. So this kind of  as it Zed, the Superbowl medic one is the ones that I hit with one of the customer during black Friday, and I supplied a quick fix for them. Also, I’ve submitted to Nisha to Magento team and supply to quicker. Quick work around how to fix it, but I’m not sure if it’s already fixed or not.

I didn’t follow up on it, but his issue is there. and like was it standard Magento, if you want to use all of the Magento features, like sales roles, let’s say like free shipping rule. And if you have, let’s say you have a shipping rule that tells, Hey, I want to sell, products, and the car total is more than $50.

I want to offer free shipping, right? And in that case, if it has this kind of sales rule and all those they users enduring as a high peak traffic buys, Morrison. $50 in stroke and a card in total Zen. It means all those user are equating work contention on your system. And, even one customer likes ads that locks a sale.

yeah. Actually, the logs that will push process, during checkout, just one customer is enough, to. So, you know, bring down, we’ll take customers that don’t have the sales rule, but they still will wait for reading from this sales role table, even through a sales role table is, so they start a

Eric Hileman: [00:22:20] transaction.

Yeah. And then the payment is waiting to go through and, and

Ivan Chepurnyi: [00:22:26] deal as a person, which by meant a transaction is confirmed. Don’t receive confirmation from BSB. And. Bench as our API. So if there’s any, and I know a lot of congenital stores are misconfiguring it and say sending calls. So emails was in an order.

Placement operations at one is also a big,

Eric Hileman: [00:22:49] yeah, yeah, yeah. So

Ivan Chepurnyi: [00:22:51] baby, it also increases the time. It was a total transaction. And yeah, as I knew how flock contention on another wastes level at the Epic scale. So  yeah. Basically, I, I wouldn’t, I, I can’t come up with any number, you know, was all it actually fixing, as a scalability issue?

Is that exists?

Eric Hileman: [00:23:15] fixing, fixing the, just a few small tweaks and fixing core issues. Where do you, what do you jump up to then?

Ivan Chepurnyi: [00:23:23] Easily $200 per second so easily. So this is something that I know for sure as possible, because I will say, assuming it before was Magento one was, are there any issues? And technically za or replacement operation is not different at all in Magento too.

So they’ll have their doors per second. it’s like a barista. As soon as you remove, also lock. Operations is that they’re happening during old place operation. it’s possible to do it. there is still limitations related to consistency. As I say, was MSI as it is. So in emphasize, there is actually no locks, happening.

So there is the possibilities that two people can buy. The last piece in stock, this is, that’s basically it. But. we can even go more, in the concurrency. if we create, and a synchronous, API, well, let’s say for a shopping cart or for, You know, actually for storing data in into Magento because the biggest bottleneck, during checkout, why is it a specific limitation?

It’s a number of pride operations. You perform on a database, right? Do you have to update code? We have to update a quote, address what item Gord Beeman call shipping rates. You know, like bunch of tables. It gets updated every single shotgun card, and of course it’s going to be a problem for my scale because it happens from multiple my skill connections.

So my scale internally needs to go ordinate between multiple threats, how it’s gonna perform those updates. Concurrently. And that’s why it’s important to move this into on microservice. So let’s say you can create a microservice adjust schedules, storing of the data. You don’t need to replace the old business logic or on Tropin , you just replace ZOA how shopping cart data is saved was in Magento, was in microservice.

And Zenzius microservice is actually, instead of using, let’s say Honduras solved that ways, connections will use only one connections. It will store all of the concurrent quotes, let’s say ever free was seconds

and okay, and, and then you kind of. Can scale a lot again, because it means that it’s going to be only one right operation for let’s say 200 shotgun cards. It’s because, is this microservice will, we’ll keep all the shortened Carson memory and every 40 seconds it’s just gonna sync to a database.

Eric Hileman: [00:26:20] Interesting. Then you would do that in rust.

Ivan Chepurnyi: [00:26:23] it can be done in rust. It also can be done in BHP. So is there a lot of options? most of them are actually portable. So if we talk about BHP in PHP, you have a bunch of flavors that are available. Was it. Is it will run on any costume environment. So you can use rack BHB with my scale adopter and you can ride those kind of batching, solutions.

And also are you have, in rust. You also actually have now mice Kio I sync erroneous, library. It was released recently. I still didn’t play. Was it about, it looks very promising and it means that, yeah, in, in Ross, you can do even more because you can have not the single strategy, but multithreaded, savor of the shotgun card data and trust is very memory efficient.

So you can. BLT or data structures for shopping cards specifically as that they’re going to be aligned to in memory and will take much more less memories than actual BHB data. Or for instance, data stored in my SQL. So Ross microservice can, you know, like manage a thousand self concurrent shopping cards with the hundredth mix of data or software.

Is that

Eric Hileman: [00:27:41] okay? So what are you up to now? And checkouts a second.

Ivan Chepurnyi: [00:27:46] Ah ha. I think, it’s hard to tell, but I definitely sure that it’s possible to achieve, Paulson’s. So, Xander’s as we go, let’s say from, because as soon as we remove a bottleneck or where I to operation on my scale and. In that case, Magento will not talk with checkout my SQL database at all.

Magento will just talk with Ross through PHP service in order to load the data and  the data. So it was the only bottleneck in this case. Like you can scale as much as possible with BM, Magento instances, right, and Zosyn FBM Magento instances. we’ll just connect to this. Move the thread. It’s a beast.


Eric Hileman: [00:28:38] Yeah. Now, David, David algor was saying like, you’re going to hit our rattus limitation cause he was saying he’s got M J meter test with a 3% conversion rate. Which Bush, by the way, I’m sure like an on Jeffrey star launch, his conversion rates like 90% or higher. but would you, what’s the bottleneck you’re gonna hit?

And, Radis with that situation cause I haven’t seen

Ivan Chepurnyi: [00:29:01] it. It’s a Nazare show. Is Magento itself some gentle start session where it’s not needed?

Eric Hileman: [00:29:07] So, Oh yeah, that’s the one. You were low testing here in fixing, wasn’t it?

Ivan Chepurnyi: [00:29:11] it’s a, no, it was about cash a different one. It was about cash. Right. Walking. but, what I’m talking about, let’s say, do we need to do open the connection.

Do a radius. If customer do add anything to the shopping cart. If customer doesn’t do anything in the system, and Magento does a lot of requests. We were talking about it before on a show like customer section. It’s just the Keeler off your radius instance because it happens on every single aesthetic page.

Unfortunately, I’m completely busy. Like I started working on this extension. I have couple of live streams already, Eleazar, where I already started working in customer section load, but I didn’t have time to go on and, continue working on it. So, by one that’s,

Eric Hileman: [00:29:58] that’s just the session start. So if that’s in Reddis well now, cause you’re still going to hit my SQL on that when

Ivan Chepurnyi: [00:30:05] you.

Yeah. So you’re gonna kick my ass, Kelly, you’re going to hear traders. So, yeah. basically removing customer section world completely. except the cases where you actually do something in Magento’s, it requires you to get this dynamic data. You can already achieve much more throughput from Magento because.

I was building Magento stores using a warning for a long time, in Magento one and in Magento, one of the varnish extensions that already has a proper cashing functionality for that. A dynamic data is it only executes one HTP request. And was that the one you were able to utilize? Very low. Hosting a plan in order to achieve a lot of them current checkouts.

Sure. So is there a bunch of customers who are still would say, pay, let’s say free hundred two euros a month, and can easily sustain black Friday sale? You know, so. Of course, they usually don’t want to risk it down, scale out. But with load tests,

Eric Hileman: [00:31:24] yeah. Well, I mean that’s why I like doing this on Stratus cause we can scale it out as we need and we can scale it back down and customers aren’t building this big thing and always worrying about it.

It’s pretty dynamic infrastructure.

Ivan Chepurnyi: [00:31:37] Here we are. today we’re gonna review some, customer of major, Eric. Tell us a little bit about the customer.

Eric Hileman: [00:31:44] Yeah. Hooks and lattice. So they’ve, they’ve had, slow, slight complaints, high my SQL usage, high elastic search use. they just have a long history of those problems and they get, they get busy and spring right around now.

So when she start, you know, gardening season comes around, they get. Pretty, pretty big spikes in traffic and it’s our busiest season. And they’re, they do have auto scaling on, but their, their code is a, is a really, really stressing the systems. And we’ve done the basic stuff that we can do, but from this point, we need to just, get a more deeper, comprehensive review for them to see what’s going on.

So I’m sure we’ll find some interesting things.

Ivan Chepurnyi: [00:32:22] Okay. So I see a Zay how multi-store so they have different brands, right? Zay sell fruit. Magento, I see it in the hanger, right. Yeah. So it looks good. Let them just real quick check if we are recording properly. Yeah. Okay, good. So, let’s profile a homepage.

So really just Rog the legs at, let’s see what we’ll going to see right now. By the way, I didn’t run any test profile. Priorit do it so well. We’ll see first time and what’s going to happen. Correct. Usually I just check a black fireworks, but now a gen no sweater. Well, how to configure a Blackfire so I just trusted works.

Big shutdown

Eric Hileman: [00:33:16] this week on strata so the customers can enable it themselves. And the UI with XD bog as well. 

Ivan Chepurnyi: [00:33:23] okay, so what, here we can see is that, okay. is quite a lot of IO happening as you see here, 195 milliseconds. And most of this IO is not from the database. So is this kind of interesting? let’s take a look at the timeline.

So bunch of stuff. And here we are. Here’s where our IO coming from. and am creeped, why does a neat. To encrypt something on a frontend when humbling. This sounds interesting.

Oh, let’s see. A wall Duretti storm. So Zurich is already, as time is only, or Oh, it’s actually 40 milliseconds are spent on radius, so it’s quite a lot. And it’s done with 11 Nicole’s a 60 the other way square is, yeah.

Let’s see what’s happening here.


Eric Hileman: [00:34:59] Jay, can you hear my doorbell? Right?

Ivan Chepurnyi: [00:35:02] Yeah.

So here is a right away. Some. Okay. Stuff related to a musty as always.

Eric Hileman: [00:35:19] exec search is a new one though.

Ivan Chepurnyi: [00:35:22] Yeah. So. Is this G S Indians plugging. So, probably it, this is a search box is they just show us some popular searches, so whatever. But

it’s a probably cool, could be moved from the page render, you know, into some. Adjunct school when you actually click on, I feel, you know, because right now, like as just regular user is they just bros navigates for the website. It doesn’t make sense to already preloads is data’s. It’s probably is going to be a little bit expensive operation because like 40 milliseconds to render ZOS for people to search us.

So do we hear us a musty actually do Honduras, let’s say? Oh yeah. Hundredths. Or do for sound plugs that, yeah, so quite a lot for just simple block. Another one of course, is a muni cart, and this is.

This is kind of interesting. Yeah.

So this one is related to Magento buck. related to the configuration files or for view, eczema is it, they’re not getting cash to them agenda. So Magento doesn’t cash view configuration files, and it means every single page request gets scared. Was it? I’m still. I’m already have a module for it. I just do want to lose it in the stash.

Yeah. But, actually one was a customers from one of the shows already was conducting me and I already just sends a mileage this module. it’s just free files, any it and couple of lines of code in order to add caching around, as used SVU. Read the Masset so. You just remorse this eye operation, by looking through the files and so on, because this one is quite expensive, especially in a off the scaled environments.

And here we have some interesting thing happening here. So we have. Quiet, slow process by that, I think it’s related to not, not the, Oh,

Eric Hileman: [00:38:13] Hey, there’s our favorite shot by,

Ivan Chepurnyi: [00:38:15] yeah. So here we have shot by and the game, like getting a rate all filters. Why do you show filters on the homepage? Like there is no filters whatsoever?

Is there a snow justification to have this separation happening here? So

Eric Hileman: [00:38:33] they’ve improved shot by an elitist,

Ivan Chepurnyi: [00:38:37] or maybe they’re using it for menu. Wait a second. Let’s see. It looks like here, you see, does it have this kind of menu where they show different filters or it’s category let, let’s click closer.

Let just take a look. What’s happening? Is it that they agree? No, it’s filter. Okay.

As soon as this is what it does, it retrieves those filters in the menu.  right. Oh, wait a second. How, what do they click here? I click here

red color and, okay, so it’s selects the color red.


Eric Hileman: [00:39:40] interesting.

Ivan Chepurnyi: [00:39:42] Yeah, it’s a understandable functionality, let’s say, so. Okay. But this one is actually not related to this one, so it was, this one is unrelated to Gatorade always, because this is happening. during this canonical,

it happens during the canonical URL generation. So this is just not happening during the menu generation.

So is that fun or was there, is redundant here in other module. Unless, yeah, here we are. Hello. I’m Mosty again, with a composer, access of the, Magento version. Again, it’s product selection. It’s not an actual quota base version on which you should depend on because Magento can have various features under is the same product question, so you cannot really rely on it.

Is it brought up when the data is not. Sometimes if you need to put as an if statement in your extensions, you should rely strictly on composer based dependency in require a section of composer file. Cool. So here we are. they, it had walk. Yeah. has, has this 250 milliseconds just spans air because.

and musty module retrieves Magento product version in order to put it somewhere. I didn’t know we were in wards. This massive team is doing, is there a search block? But definitely like original file boss. Why? Why is they need Magento Ashton four does that. So legs, they have some leaf statement vice on your previous Magento versions that you had, but you can’t rely on that because.

Zach, my number gentle version can receive it back port fixed with the different file paths already. So you better do different kind of validation was it is that kind of functionality. So. yeah. And another one’s here. Yeah. I don’t see anything I’ll spend in here, but mostly it, because first of all is they have issues with after Lauder, so Zay need to compile there.

Thursday, need to compile the AI and ZZ needs to run composer down with the Lord with optimized flack. So Zen composer will receive the class map of, all the glasses, that exist in Magento, with appropriate file pass. So no find file mess. It will be called and no. No, I always going to be in, walked on including sound

Eric Hileman: [00:42:52] crypto.

We haven’t seen the crypto call yet,

Ivan Chepurnyi: [00:42:55] so let’s switch. There was a time oriented to his illustration because here we actually can search for a specific functions

and crypt. Okay. Okay. A secret  it is weird. Okay.

Three times.

Sure. So yeah, it’s weird. It doesn’t show it here. Let’s see,

can I put sample like this one?


Okay. Okay. Broadly, it’s not timely significant for them to show in the timeline view.

Eric Hileman: [00:44:18] Yeah. It was like six milliseconds or something. Six point.

Ivan Chepurnyi: [00:44:23] Yeah. But deal, this one is very weird

because like, it’s called three times, maybe. some of the extensions have some kind of a license check or whatever, you know. Is it to reprice a license by decrypting something and refining what was era. So yeah. What in general? Yeah. I don’t see anything over there. Let’s take a look at, so that the waste clearest snow.

Okay. So Zara, using Magento commerce, Okay.

Eric Hileman: [00:45:07] Ooh, mega menu.

Ivan Chepurnyi: [00:45:11] Yeah.

Good. We is it, is there a some kind of punishment? my knee, you know, like you can just create, it probably was, that’s why actually it sounds, they don’t use show by, let’s say, use mega menu in order to be generated. So sling sends a, manages them manually, probably just bypass them URLs, you know. In a menu structure.

So I sold, it’s more kind of a I solutions that I was doing for one of Congenta one customers, here, is this customer, for instance, has all those brands they can from a layered navigation and all Ziems and your aisles, stock designer in categories. All of this data is taken from Sphinx. Bye Iranian couples think square is and generates all the menu.

And for instance, here you can go into as a designer and in the end it’s basically a, as this men category. And is this ? you just a URL slug for the adults. You give on a filter and as you see it just likes to filter Dolce Gabbana. So it’s kind of

let’s say adjustable alert navigation where you can select filters and it will generate a new content page for you. But this is still my Magento one customer, so it’s not Magento two.

Eric Hileman: [00:46:50] I remember you talking about the slug thing.

Ivan Chepurnyi: [00:46:52] Yeah. So this is a things that, I sold to Zay have implemented buttons and to just to stand there at a starting information in a database, so it’s not enough to generate it.

okay. And also they have blue foot installed as well. I haven’t seen this in awhile. You know, like, I suppose it would be use. Beige builder,

but apparently they use some kind of gibberish solution, you know, like, cause they still have , Bluetooth, live food. So quite interesting. Hmm. This one concerning.

Or like, okay, what if you have files on or filter settings? You just load all of them on every single page. I must’ve done do it. Please. It just, it just wastes off your, system memory of where is it this available that there’s limited actually per PHP process. Because like, if, if you have a  garden, two visitors that are hitting your dynamic page, and every of them is actually gonna load all of this table the memory without actually needing, all the data.

All right? You just a waste of resources and it reduces. Number of concurrent connections that as a system can serve. Okay. I think we’ve seen enough, on the homepage. I think we did quiet throughout review of this one right. Yeah. Or so. Let’s summarize, some standard, issues with the mass team modules, composer issue issues that they load all the filters, issues that they load all the configuration settings for filters and other one, related to, or where it was  search block.


Eric Hileman: [00:48:56] Yeah. But pre-loading that

Ivan Chepurnyi: [00:49:00] search. Yeah. G G S Indian tech search, and it was a pretty low, some popular results. well, now, however, this one is not. yeah, it could be done in a different way. Like why do we waste resources by promoting it for every page? However, we can do it on a click, because this is data.

If it takes, let’s say, to render here, honor it, sort of formula second. Is this kind of IOCs goal is good. You know, like you can execute this hundred 30 millisecond tax goal and does it costumer from Zimmerman when the customer clicks tools will pop shows. It won’t be that much of a big difference.

Eric Hileman: [00:49:52] Anesti checking composer for module versions,

Ivan Chepurnyi: [00:49:55] but what but all but also like it means like. You also consider from the caching, like you have a, is this one as his book, and if you have a varnish cache and. Let’s say someone is going to abuse your store and boot some very terrible queries in the poker world of cirrhosis, right?

So some acquired terms into popular searches, or let’s say,

Eric Hileman: [00:50:25] germs and searches.

Ivan Chepurnyi: [00:50:27] Yeah. So I’m gonna make a show now for that

Eric Hileman: [00:50:29] germs and searches,

Ivan Chepurnyi: [00:50:31] and. In in, in Zahn, like Zay can abuse the system and you cannot get through ITTO Zim unless you flush all your cash. However, if you would have it as an  request, does that can be cached also by warning.

Right. So he can cash as this request and warning ish for this popular searches and recent searches, especially recent searches. This one is,

Eric Hileman: [00:50:59] that’s the title of this shell has a germs and searches.

Ivan Chepurnyi: [00:51:04] Like, I think in Euro, like if you consider recent searches, I think it’s going to be a, we, we’ll get to finish you from part of your privacy because, you know, like if someone will sort of San Fran specific.

Is that, you know, someone can, you know, see what we’ll do. XIX Parson is a census website and they go on site, the website. Then Luke does a recent searches and said, Zay can find out what this person is looking for. Right? It’s not that big of a deal, but. I think if we are not talking about, if we are talking about different kinds of websites.

Eric Hileman: [00:51:44] Yeah. Medical websites on medical staff.

Ivan Chepurnyi: [00:51:47] Yeah. Zen is this kind of in an issue was a priority. Prep was a private data. Being exposed to Azara we use it is a problem. It’s always, or for instance, sometimes by the way, a passport after to completion. Boots spots worked in unpredictable places as well. So even the from perspective of , you should never show, you know, Azara Weezer’s search terms is, it has been just happening, you know?


just a better practice in my opinion. But. We are not doing an extension with builder. So

Eric Hileman: [00:52:33] I wonder how many merchants actually go through their search history and use that for valuable Intel. Cause I like Phil mentioned on Twitter, like that’s the one place where your customer specifically asks you exactly for what they want when or how many people actually use that for.

Ivan Chepurnyi: [00:52:48] is this merchant again, I will bring him up again. so he, he is using search. A lot. And he says like for him, so biggest conversion rates comes from quick search books.

Eric Hileman: [00:53:02] Yeah.

Ivan Chepurnyi: [00:53:03] So because you can type brought a choose right. okay. Is there a snow practice shoes for? Is this a store? And apparently, Oh yeah, boot.

Yeah. So only boots are available right there. Yeah. So you can already click and find a product. And what he’s saying is he constantly monitors what people are searching for by in the license search terms. And here actually, these search terms don’t kill your database. In this case. Yeah. and it is the same time, right?

It’s, it’s quite foster as well. But. Well, let’s stop  some nice projects.

Eric Hileman: [00:53:48] Okay. It’s cool. It’s cool. That’s that little mini search pop up. There is a great way to quickly find what you’re looking for and you can, you could see it

Ivan Chepurnyi: [00:53:57] is this one is achieved without any sort of body solution like SOI or, Oh, let’s say, Claire will or, and nausea one.

Oh, let me just remember it. What is another popular solution?

Eric Hileman: [00:54:11] Those are the two main, and I know

Ivan Chepurnyi: [00:54:14] also, yeah. this is this one. Mmm. Oh. Also very, very, very popular. Also used for  navigation.

Eric Hileman: [00:54:23] Oh, I smile.

Ivan Chepurnyi: [00:54:25] No, no.

Eric Hileman: [00:54:28] I thought you’re going to promote sky every episode. We’re promoting smile. We should get fostered by though.

Can they sponsor us?

Ivan Chepurnyi: [00:54:38] It’s, interesting actually, when I moved to the Netherlands, I, moved, on, how four year contract working for smile office in Amsterdam. So I was training Xero team in Amsterdam on Magento. one is at the time, so it was 2013. so. I was in their team, for eight months.

I was coaching them every single day. Like I was helping with complex projects at the ups and so on. Right. So, I know smile has a, a settled, quite experienced developers, so, Nope. Very cool. Okay, well, let’s profile the Tegrity page.

So, this is our, boats and planters,  page. And, this one doesn’t look promising, and because it’s quite a long time, so,

Oh, let’s see, what do we see as a result?

And it takes quite a lot of time to load segregated data. Right.


this is a lot of  requests.

Probably it’s related to the show by extension. And a last tick a search itself, right?

Eric Hileman: [00:56:13] Yeah. They do have a

Ivan Chepurnyi: [00:56:17] extension for all Hamas too, right?

Eric Hileman: [00:56:21] I’m not sure.

Ivan Chepurnyi: [00:56:24] Shop buy, you know, I’m, is not to come, but  is not compatible with anything else is then stay  search.


okay. Okay. So here we are. Okay. Google tech manager. okay.

Eric Hileman: [00:56:42] yeah. MSEL, elastic search. There it is.

Ivan Chepurnyi: [00:56:46] Yeah. So this is kind of interesting. So, okay, get floated, product collection, blah, blah, blah.

It walks through all the stuff in a searchable attributes. And here we haven’t heart the system with, attribute data provider. So here is our load in a loop or is it takes a watering call of second. what a DAS probably, for is this category page it, separately OSCs elastic search for all of this facets.

Data. as far as I know, like in elastic search, you can actually execute it in one HP request, not in multiple ones. But what they do here is they do it for every single one. And apart from his ads, they also load the data from Magento database as well. You see. As a Lord options. So Zay actually do two things from here.

Zay, being, I lost. Oh, here is actually, it’s only time to load attribute options only it doesn’t hit the elastic search here. It’s only hitting Magento database here. So we probably will see elastic search later on. Along the lines, you know, so this, any searchable attributes is a huge performance hook because, it creates, attribute options for every single attribute, and it loads all of that to be with options.

So it’s not considering attributes is that, first of all, are reasonable in the page. this is actually what you have to do. You have to, Before loading Arthur with labels, you have to, iterate for all those products you have loaded was, edit with filters and you need to collect the assumption IDs.

And then you have the supplies. It’s optionalities towards the labels. We are cynical query. So this is the best to approach from point of view of performance. Does that mean you don’t, a lot also options. You don’t waste a system memory. And you don’t waste, loops as well because, what happens here, Magento first four, loads of those options separately, but each attribute.

And Zen, is this list of attributes gets iterated in order to create some, searches. Like if you want to find an auction by ID or by label, Magento will the rate for all of the options that were loaded. And PHB iterations are very slow. So it’s even slower, isn’t I operations that will happen if Zabel just exuded aquarium.

One of the other ways. So this one is a problem here and yeah. So basically is this part is, is, I understand it’s all related to, our  filters. Oh, Mike, it is downstairs. Doesn’t want to go to bed. Yeah, I hear it. But yams, the microphone is in right direction, so you probably don’t hear it this way, but yeah, we have to stop soon.

Maybe be, because I need to help. My wife was him, but in general, here we have, this. Major works as well, so yeah, my major works. It’s some stuff gets associate, get all my goodness. Oh yeah, yeah.

Eric Hileman: [01:00:32] Is that L M F G was that F G?

Ivan Chepurnyi: [01:00:38] Right.

Okay. Yeah. So, this one is a huge problem, because here, instead of using the price, well. The price, from a price index. It’s using iteration for all of the simple products of a group product in order to find the minimal price. So Zen it, it triggers bench of operations. And as you see every single product, is it as grouped on a page?

It’s going to show us. At least half a second additional load time. Ouch. Yeah, that’s big. Ouch. Ah, and we see here from, from this data, I sees it as a helpful for group products on this page. Let’s see if it’s true. This is a first group product. This is the second group product is the Seward and the force.

And this one too. Hmm. Interesting. Or they don’t have that much products. Let’s revisit it. Fun one. Group product. Second group product. Oh, it’s configurable. Also, there is group products and configurable products, so that’s fine. Is there a, could it be. A little bit more data, but yeah. But basically the problem was here.

this one needs to be done for customization. you need to write a plugin around this final price, good value, when you are on a  released, and you need to make sure that you use the data that is available already an in product from the price index. And, and just returns this while your firms a price index instead of, you know, like going through all the simple products.

It will save a lot of time in registering as a page and also memory usage.

So here we are again, with, as a product list itself, product list. . Yeah. So here is zip, Bryce  again. And here we have, I think, MSI in a play sell blow resolver. So, Oh no, it’s not the Messiah. It’s, again, configurable product. so again, a Magento when it accesses a product price, he checks if zircon Hudl product is sellable.

And instead of using, again, data from the index, it’s gonna work for every single simple product. And. Find out if every single product is sellable, but for configurable product. And in order to find it out, you have also Deloitte, all of the computer will attributes all of those configurable in order to find out, as it related to stuff to configure a product.

And this one, three gutters, some terrible performance bottlenecks. So is this a sellable? It’s like 80 milliseconds on every single configurable product sell. Cool. Here we have the second part of the page related to  products. So it doesn’t take too much to run the departments, but probably because the configurable products has been preloaded already.

Yeah. On a previous step. but here we have, our issue was a layered view. So Zilara to you, it’s a part of our Magento renders filters. So is this, is this part of the page? Right? So this filter boxes, right? This filter boxes. Oh, well, what’s happening here? So is this filter? Sure. Oh, how do they, Oh yeah, I opened the wrong window.

Sorry. I was looking like, yeah, where am I? What’s happening? So here, this letter to you. So we have can show block and control block checks some data from elastic search. You guys responded to get documents, Zen

against some stuff happening here, but I don’t see any audio calls here and what is weird, but I see here aiding calls. Yeah. So. Yeah.

Eric Hileman: [01:05:42] I

Ivan Chepurnyi: [01:05:42] just don’t understand why. Why is there to resolve an alias all fry elastic search index fell times. It’s this weird is weird because like writing, if you are trying to query elastic search, he already.

No. Is that this data can be just two. Totally. Once you, you don’t need to do this HTTP call in order to find out what is the current, index. Les obviously is fun. So here we seize. It’s, it’s Worsham. 560  and Zen exit. Good six squares. So let’s see. ZOS, six squares. So it’s probably one, two, three, four, five.

Hmm. It doesn’t add up. Probably categories are taken from different area, but like it’s one query filter and to retrieve as the product list itself.

So yeah, it’s a little bit.

this was with your, but again, I’m not sure that they really need to use show by extension for on lusty, especially if they already use Scholastic servers. They just can switch to a smile. Elastic suit. Yeah.

Yeah. So if we had veterans month for smile  and it’s Greg’s, it is Fred Rogers, man, because this is a free extension

Eric Hileman: [01:07:40] but doesn’t, didn’t you say amnesty shot by requires elastic

Ivan Chepurnyi: [01:07:45] search? No. I mean like smile. LASIK suit provides the same functionalities. So it’s that simple.

Eric Hileman: [01:07:54] So anybody who’s using amnesty shot by Ken directly convert over to smile.

Ivan Chepurnyi: [01:07:59] Yes.

Eric Hileman: [01:08:00] Whoa.

Ivan Chepurnyi: [01:08:03] Okay.

Eric Hileman: [01:08:04] Yeah. I remember talking about smile before and you thought there was some extra work with that, but it sounds like you can directly convert over.

Ivan Chepurnyi: [01:08:10] So yeah. So my sort of work is related to your design, right? So if, if we’ve, let’s say you wanted to fight a master team plates. And, but, elastics youth council was own templates, so it would be a not compatible, from his design.

So of course it requires some stage of small front-end tweaks by your print and developer in order to implement it. But considering how much you can, achieve, was it comparing to them some proprietary extension because. If you want, you know, to fix some performance issue, with a bad extension, it’s much more complicated because like, yeah, you can try to fix it yourself, but in Zandt, it’s a black box.

Like you don’t know what’s going to happen in the next version. You can send, let’s say figs backs to a musty, but is not a guarantee that the Mazda is going to accept it. Because they have huge customer base. And as any extension providers, they’re worried about, you know, changing as they existed in behaviors that made break, Azar installments as that probably modifieds that we Sophie code.

And if we talk about the smile, huge, do you have it available on get hub? You can contribute by creating a pull request if you find a performance issue. Was there right. So in, in, in, in that case like Zara can create advantages. So smile, elastic suit over any paid, layered navigation extension.

Eric Hileman: [01:09:51] MSD says they made some performance improvements to the latest shot by, I don’t think. Well, we’ll have to do, I have to test it and see, we’ll get, have to get their release notes to see exactly

Ivan Chepurnyi: [01:10:01] what they did is the biggest problem I think in our show. We are actually not, reviewing, as a, Proper way, like I will do, let’s say, why have a customer I would require to have an access to as a quarter base because right now it just a guessing game.

Like I can see some combinations, but sometimes, for instance, if we talk about Zeus part, right, it’s homepage. Yes, I see the timeline, but without having the reference code itself. And it was all being able, you know, to tweak some settings or, you know, deployment functionality and see who are actual, what bot bottlenecks or let’s say sometimes when I do a profiling session, I’m just having a code open and I have a profiler and then a profiler.

I see, Hey, is this piece of goat, takes a lot of time. What happens if I just come at it out. Will it show me as our performance, issues in other places because sometimes like you can fix funny, she bought the ins and is there a  other places? The same piece of code is in Vogue, but before it was not reasonable because Zippy is of course at you.

Sozo. See, Shane was, already. preloading the data that is needed for the future calls. So in, in, in depth case, it’s just more complicated, but I think it’s a good, show to show an indication where to causation and where they came from. Because most of the issues that we see on the shows are. Pretty much where it’s simple, like you can see them right away.

Like, you don’t need to spend hours, you know, debugging through a zip code base and searching, Hey wireless say is this piece of code in PHP? I like, for instance, there’s plenty of, code here is it would rise my attention. Like for instance, filter, default, pH, GMO. I don’t see what’s going wrong here.

Why it takes so long, right? It’s 925 milliseconds, but I don’t see. What can really

Eric Hileman: [01:12:25] there is amnesty shot by hiding in there.

Ivan Chepurnyi: [01:12:28] Yeah. But this is the only piece of the codes that shows me internal execution. But. Yeah. In in general, like I really need to spend time and they can look at the code and get some clue, Hey, why it’s going to run so slow because this is abnormal time for a PHP template to render because 900 milliseconds to render a simple filter.

Hmm. Yeah. This is not looking good. So I, I think there are some shenanigans going on with, as a render itself. So a bar from set, so is Z. That’s why I just recommend to try to go into smile LASIK skewed because I didn’t seize their Zillow’s kind of templates. So I have got a couple of customers who already use smile, lasting suit, and.

Who’s there, Lord times are nevers that terrible.

Eric Hileman: [01:13:28] Is that your biggest summary then for this? This page is to switch to smile elastic suite?

Ivan Chepurnyi: [01:13:33] Yeah, because like. There is a bunch of stuff. So smile, elastic, cute and group products, group products and  products as a standard. Magento bottlenecks with a complex product types where it tries to retrieve the price and it’s not using price index or tries to shake up product available to sale and it’s not using.

So data’s, it’s hold IDO elbow in, inventory index. It just tries to. I calculated on the front end is

Eric Hileman: [01:14:02] there’s no module in your stash for that one.

Ivan Chepurnyi: [01:14:05] I have it for some customers by bud, but you know, like I, I cannot bring everything as open source because,

Eric Hileman: [01:14:17] yeah, you got to run a business. You gotta keep some secret sauce, some sauce secret.

Ivan Chepurnyi: [01:14:24] It’s, it’s, it’s kind of a thing like. Yeah, I w I would love to have some stuff of that open source. Like I’ve built crazy module for optimizing. MSI does use this dramatically number of that way. Square is, and as well fix this also as complex product dives and other stuff. But Bardo, making it open source.

First of all. I didn’t have time to maintain all the open source projects. You

Eric Hileman: [01:14:53] know, you get a lot of issues on your projects. I know we do on our crown extension, that’s just time consuming

Ivan Chepurnyi: [01:14:59] to run. So red, I installed and beloved for a customer. I’ve tested this use case. I know it works well and. Yeah. For the next customer who comes in, I just installed this module.

I just charge for the time we’ve spent actually to integrate it and checks it. It works properly. And yeah. So it’s just. easier for me then, spent time to make it an open source extension because making an open source extension requires you to write a documentation, make sure that you explain well what this extension does, and so on.

And do you need to make sure that also it has a very well written automated tests, Ute. it will be possible. To verify, verifies that with every single new Magento version you’re gonna encounter and wish combinations, your extension is going to work. Because when you are resilient in it, as oppose hosts, you have more responsibility because people are going to install it.

That probably don’t have expertize actually to go on and fix the module, themselves. And even, it was, I would say, going to ask me. To fix it towards them. I’m not going to be able to help them because I might not be a available timeframe. So if you work on an open source project, you need to make sure that your open source project is actually working and working well is that it doesn’t requires your attention as if much.

Eric Hileman: [01:16:37] That’s one of the benefits we have is we have it installed on hundreds of customers here are chronic extension. So we’re our support teams dealing with it and we have tons of use cases, but if we didn’t, it would be to not have all those access to all those use cases. It would be a lot harder to track down issues and find does this the edge cases that come up that people ask you to run down

Ivan Chepurnyi: [01:17:01] and to, you know, like a lot of people is the same time as a gets.

Get angry at Magento like Magento. Why, why,  why? YourMagentoa system is not performance for every single use case. Like this system was built from a different perspective. The system was built from perspective ability, right? So you cannot build flexible system that will fit everyone and is the same time will outperform everything else.

Because, if you have a specific use case. You can really take shortcuts. You can, fro let a lot of code, right? I mean, you can just simplify as a logic. Let’s say we’ll start with deduction. Do not include, you know, all of those MSI shenanigans for single stock inventory, right? You can just have a simple worker, let’s say for some drop shipment where you have, multiple warehouses was in a single region.

You have to have some custom logical was there, that this is not going to be a feed it into  as well. Or for instance, you might just use an MSI where you have one warehouse per country, but then each country has own website. Yeah. Then MSA if it’s free. Well, but let’s say other functionalities that are completely redundant for you, like a migration of this doc from one warehouse to another or multi warehouse groups.

Use capabilities like is this part of functionalities from a Messiah you don’t need at all? So, yeah, it, it, it’s, it’s, it’s, it’s all about like, you kind of expect is that his system, with so many futures, who’s gonna work fast out of the box? You need to trim it down. You need to disable wall stuff.

Eric Hileman: [01:18:51] And that Twitter conversation around the orders per second.

I, I think some people were assuming that when. When I was speaking that I was like saying like, default Magento out of the box is gonna do a thousand orders per second, like, no, no. you do need to do some, some patches to it, but also, like you said, trim everything out and do something specific for what you want to use it for.


Ivan Chepurnyi: [01:19:16] a lot of stuff, let’s say I really like Magento commerce as a product, but I really like to. Room. We’ll have a lot of modules is that they’re coming with Magento commerce. When I get the merchant in, so I just have a tomb downward turn off Magento Comoros because let’s say not every single customer out there is using Magento staging in functionality, and I had one customer is that actually.

Got annoyed with the UI interface of Magento station because it was not a loving to operate in the same way as they was used to in Magento one, but that one’s even graded at the Magento to, call Merce is they were really annoyed with UI options. you know, it was, the work was stuck and we disabled station and everything went smoothly.

We could, because Zay got to use through the proper cattle accruals, proper sales rules, everything like staging is a cool feature. But generally speaking, like it’s not working for merchants who have already ERP and PIM systems in place because. Zillow. Those customers, they don’t need. Is they are not managing all of the data in Magento is they use Magento to sell, not to manage their catalog.

They have stuff coming from, and honestly speaking like, cause this is majority of Magento commerce customers. So like staging is good for small business. So you are a small business and you will not have, is this kind of nice features like, Hey, well let’s schedule this new promotion. You don’t have your bead and have PIM system.

Is that the do not support scheduling like Magento dos right. So this is just a kind of features that they always disable, apparently. So

Eric Hileman: [01:21:16] should we look at the product page?

Ivan Chepurnyi: [01:21:18] Yeah, let’s do a quick Luke. So let’s wrap it up, right? Oh, wait a second. Let’s take a look at the complex product. I casually clicked on the simple one.

I want to click on this one. So is this this our group product?

Well, that’s a profile page,

so it’s probably another ten second or seven second to, let’s see. Yeah.

Eric Hileman: [01:22:10] Should we sing a

Ivan Chepurnyi: [01:22:11] song? Oh no, there we go. Okay, so sound and second I almost was correct. Okay, I’m here. I see a lot of IO again, you see this. It’s a huge number. and again, okay. Group product looks silly, a little bit,

complex here. So

here’s probably some kind of, Magento bottleneck. So if you have a group product with simple products, does it have custom options? you’re gonna seek kind of a bottleneck. So I didn’t seize this use case yet in Magento too, but I expect that this is actually a kind of three year old problem to fix.

If. you know, it was a proper load process would happen because like you already know the list of the products you have, on this page, right? And you can already promote all of the custom options for all of the products by, by single database query. But as AC here, in our, timeline, we use that every single product triggers get options, get option HTML, and get options, get option HTML.

So for group product, this is a bottleneck. Here. So it’s up. One second. again, or the same thing, bro, that cooption collection protocol, option collection related to as a group product. So another, so yeah, get, gets me the product. So.  is this one again, it looks a little bit odd because some of the data’s that is taken on this page can be, added by some, observers and plugins.

Cool. So, yeah, it just. It doesn’t work well. Okay. So I think we have to wrap it up because I have to go, fortunately.

Eric Hileman: [01:24:23] Yeah, yeah, yeah, yeah. It has seen a bedtime song.

Ivan Chepurnyi: [01:24:28] Yeah. Okay. So I think, yeah, in general, mostly it’s also performance issues are related to group product.

Eric Hileman: [01:24:37] Is that, do you have a something on GitHub or any presentation on how to work around that one

Ivan Chepurnyi: [01:24:43] and no, because majority of the customers I work with use configurable products.

So it’s a similar kind of fixed chest group about the boys who operations together like don’t do. A very simple product do it for as a collection of products on group product load. and in general, I will take coop, as a developer, working on this project. I would open up the places are where as those, calls are happening and they can look, can I get this data from somewhere else?

Can I create some kind of. Database Preloader let’s say on product afterload the tool already prepare for me. is it price or is it product options? And they just buy agonize as a place. That’s what a Magento, is slow. And to write a plugin around those places and just returns a date is that they’re already preloaded from my custom database service and in such a way, I just got down to time spent on all of the, that would be separation.

So was there. So as this is basically a how to fix, and, and majority of such kind of performance issues I approach, I usually just create to Preloader the proceeds, the data’s that they will use later on by plugging  zip places, sweater, Magento, in walks as those database operations.

Eric Hileman: [01:26:10] Awesome. Okay.

Well, so thank you for everybody who’s been watching so far. Thank you to blackfire.io sponsoring us.

Ivan Chepurnyi: [01:26:17] Yeah, it was awesome. We would not be able to profile this customer.

Eric Hileman: [01:26:24] And, you can tweet at us at, load in the loop and lit L at  dot com and we’ll link up our Twitter handles. So get out us if you have any customers that you’d like to see reviewed or any questions or any discussions about the episodes.

Thank you everyone.

Ivan Chepurnyi: [01:26:39] Yeah. Thank you everyone. And until the next step is old.


Notify of
Inline Feedbacks
View all comments

Ready to get Started?

Sign up now
Would love your thoughts, please comment.x