Follow us on Twitter! @loadintheloop
Table of Contents
|Developer mode enabled.
| Caches disabled.
|Magezon/ninjamenus loads twice and adds 3s.
|Amasty/Labels and Magezon/ProductLabels both installed and adding time.
|Swatches adding significant time on category page even though not used. We'll provide extension to disable swatches on category page.||35:31|
|Magezon minify adding .5s should disable minification.
|MSI inventory slowness bug.
Sponsorship provided by blackfire.
Eric Hileman: [00:00:00] Do we need clap or anything to sync our audio?
Ivan Chepurnyi: [00:00:02] Yeah, let's clap.
Eric Hileman: [00:00:04] Okay. On three on three.
Ivan Chepurnyi: [00:00:08] Yeah. Ready?
Almost synchronized right?
Eric Hileman: [00:00:16] One, two,
This is Load In the Loop sponsored by Blackfire.io I'm Eric, the CEO and co-founder of MageMojo Magento hosting. For the last 10 years, we've been hosting exclusively Magento and we provide a deep level of support for Magento. On this podcast. We review some of the customers and share what we find to help others, and I'm here with my cohost Ivan.
Ivan Chepurnyi: [00:00:43] Uh, hello, my name is Ivan. Um, I'm running a consultancy business here in the Netherlands. Uh, and I work with merchants and solution partners in order to bring, um, Magento performance as a reasonable level and not growing the CPU and not to overuse memory on servers and running. It's mostly, so here today, I'm gonna um.
Join Eric, uh, again, to review one of, uh, MageMojo's customers and, uh, Eric. Uh, shoot. Tell us, what is the customer is doing and why they're having issues with this?
Eric Hileman: [00:01:23] It's pretty common for us. This is Adam's Horse Supply and our customer wrote in and they sent us a note from their customer that said, your website is incredibly slow.
To the point I stopped browsing it because it was so frustrating waiting and waiting for each page to load, and I noticed it was definitely slower loading categories and items with about 30 people on the site. So. The owner's getting customer complaints and she says, there's not a lot of traffic on here and it should be scaling and it shouldn't be a problem.
So that's, that's a, that's pretty common for us to get complaints like that, and we like to help customers with that. So let's, let's take a look and see what we can find.
Ivan Chepurnyi: [00:02:04] Um, yeah. Seems like an interesting project. I see customer does a lot of work by themselves, mostly, uh, from design, uh, right.
So, um, it's always nice to see, uh, some small business actually choosing Magento 2 as a, as their solution. So let's see, uh, how it, uh, lays out, uh, from point of view of performance. And, uh, what can we find on this website, right? So, well, let's start with a simple profile, right, of a homepage.
Correct. Let's do it.
Eric Hileman: [00:02:40] Yeah, let's do it. Let's do it. And you disabled aggregation.
Ivan Chepurnyi: [00:02:44] Yeah. Right away. I'll be good because I didn't know going to happen. We just want to run a test profile and see, you know, if, if we, uh, you know, just a stumble up on anything. And right now, as I'm speaking, it's still didn't reach, anywhere near two renderings, a page so I can still continue speaking and Ican build the complete sentences and I still see zero percent. So I think we can have some,
Eric Hileman: [00:03:14] that is definitely a problem there.
Ivan Chepurnyi: [00:03:16] Yeah, there was definitely some problem here. So, uh, let's see, how much more, uh, words can I, uh, put into the sentence before actually completes. Probably a lot them.
Eric Hileman: [00:03:29] Should we solve some math problems?
Ivan Chepurnyi: [00:03:35] Yeah, let's do some calculus. Right.
Eric Hileman: [00:03:37] I think that's what's going on in the background and it's like mining Bitcoins or something. It's trying to, it's ashing.
Ivan Chepurnyi: [00:03:46] Yeah. We were gonna see soon what actually happening and was there so. Well, let's see. Okay, so it's done. Finally, finally. Yeah. I, I didn't have to write a poem or, you know, some short article in the meantime.
So it's more or less good. So with, uh, let's see, uh, what's going to be, as a result, we still waiting a little bit, um, on getting it completed.
Eric Hileman: [00:04:13] Must be a lot of data.
Ivan Chepurnyi: [00:04:17] Yeah. Probably there's a huge stack trace, uh, to see, you know, what's happening. I was there, um, also, uh, by the way, uh, last time we didn't actually mention that Blackfire doesn't add any overhead in production. You remember, uh, we worked looking at blackfire and overhead. So blackfire is only gets triggered when you actually run a profiling session.
So when you regularly browse in the website, uh, Blackfire doesn't, uh, add any overhead to the rendering because basically just you just as simple if statement. And only if this, if statement is hit only, in this case, it's gonna add hooks to function. Uh, execution of PHP. So it's quite safe actually to use it in production.
So it's quite huge feature, I think. So let's take a look at, um, what's happening here. Yeah. So because I, uh, did a great zoomed view of my browser, so I don't see right away as a numbers. So I have actually to go and click on a time dimension and see what's happening here. And it seems like I'm very unlucky one, because it took like 60 seconds.
Eric Hileman: [00:05:30] Wow.
Ivan Chepurnyi: [00:05:31] So let, let, just take a look what's happening in the timeline. And it seems like timeline is taking a lot of time to do it. So, okay, so what's happening here? We have, 35 seconds on actually starting, um, object manager. And what I see here, it loads configuration from a file system, so it doesn't hit the cache at all.
And other things that I see is quite strange. You sees that they're using a developer, developer object manager, uh factory. So is this this a, uh going to be definitely a problem. Um,
Eric Hileman: [00:06:15] Does that indicate developer mode?
Ivan Chepurnyi: [00:06:18] Uh, probably it could be also that they are running in default mode and not the production mode and, uh, because of that, yeah there are some, uh, issues with, you know, files being, uh, not actually compiled in advance and it's gonna result in slowness. And then. Yeah, we see. Is that, this actually just. This short view, I think. Right. So how many it's only this part. Oh, so this is a still 40. It's actually all bootstrap of the applications.
So yeah. UI even on my, um, 16 core CPU. It's not running very well right now. So I see that it's a little bit lagging. I cannot work with you. I was this huge stack trace.
Eric Hileman: [00:07:21] Yeah.
Ivan Chepurnyi: [00:07:23] You see it's a too much lag here and so then there are other parts, but I think mostly. Is there a majority of the things is that there's a problem is related to actually not cached, um, version of the page as well, developer mode. So let's go just to complete time oriented visualization because here we can see, uh, some time
to a message. So we see like six. Actually 7,000 times there was a call to get matched node in a dome. So it means like yet works hard with XML, the parcels, the configuration, a... Of Magento.
Yes, so 62% of all page time we spend on actual bootstrap and from this one is 61 is actually on configure and object manager. So it's definitely a cache problem. Uh, we can fix it to very fast by just enabling cache. Right? And another one is a related to,another sub tree over here, I remember I was also seeing some kind of um, time spent on another.... Oh yes. So 71 actually on unrigged configuration caches and here, all sides. So some reflection as well reported here, but I don't see it right away here. Let's see. If we have it, uh, in this one. Yeah. So here as well, you see your reflection barometer, get the class, gets in, woke like then follows on times.
Eric Hileman: [00:09:08] Damn
Ivan Chepurnyi: [00:09:09] and this means like a, is that compiled mode of Magento. Um, DI is not used, so it's using, on the fly, a resolution off all the dependencies. So it's very slow. So let's take a look what we can do for them, right?
Eric Hileman: [00:09:27] Yeah. Better check the mode and the caches first.
Ivan Chepurnyi: [00:09:31] I don't want to go to other pages because it doesn't make sense if was a cache wasn't turned on.
Right. So let's go on into the, um, website itself, let me actually switch the view here. Um. Let's enable it. So now the viewer's also going to be able to, uh, see, uh, what's we are doing. So first of all, let check, what is it? Their cache status, right? Yeah. And seems like I'm actually losing my, a charge on my headphones, so I'm just going to put them in chargebox.
I hope I can still hear you with the single one.
Eric Hileman: [00:10:21] Okay. Can you still hear me?
Ivan Chepurnyi: [00:10:23] Yeah. I still can hear you. And here. So we see a current status.
Eric Hileman: [00:10:29] There you go.
Ivan Chepurnyi: [00:10:31] Config is disabled. Um, yeah. It's a bad sign because it means like there's a lot of redundant, uh, I operations layout as disabled.
It's also. And the good thing local html is disabled. This one, we actually can keep disabled because some, maybe as they had the reason to disable ,local HTML cash. Maybe there was some extension or
Eric Hileman: [00:10:57] I asked them they don't know like why it's in this state.
Ivan Chepurnyi: [00:11:03] And full page cache as well is disabled.
But we are not going to enable full page cache because it's not going to give us any information about actual uncached performance of Magento, right? What was there? So let's see. Uh, what's it going to do? So let's, uh, first the full do cache enable and first, we're going to enable config and layout, right?
Eric Hileman: [00:11:29] Yep.
Ivan Chepurnyi: [00:11:34] So,
uh, let's see. Okay, so it's enabled. Now let's switch again, the view, and we're going to profile it, uh, again. So let's run another profile. Let's disable aggregation again. And you...
Eric Hileman: [00:11:57] Do you need to hit it twice, will you see it generating
Ivan Chepurnyi: [00:12:00] each time?
I just realized that I have to wait another thirty seconds.
Eric Hileman: [00:12:06] That was pretty quick.
Ivan Chepurnyi: [00:12:08] Yeah, it was quicker than before. Let's see. What actually happening is that, or maybe because it was using cache, maybe some uncached data was already cached and was used. It was the second time. Maybe there was some places where there was actually too much uncached or excess So let's see what we have here.
Um, let's see. The time view. So it's now eight seconds. What an improvement.
Eric Hileman: [00:12:40] Getting better.
Ivan Chepurnyi: [00:12:42] Yeah. Getting better. Uh, let's see. A timeline.
So. It takes some time still. Okay, so here, I see it now as a team place that are actually spending the most time. Right? So this is already a good sign. So caches actually got enabled and now we actually have the actual issues that they face. So now we just fixed, the biggest problem is that the was a complaint of one of the customers is that they were so frustrated that to actually browse the website.
So now probably at least they can sell something online. Um.
Let's see. Also, another thing with check, what's their current, um, deployment mode, because this also affects a little bit CPU time spent by Magento having so many classes. And if you don't have some compiled, it will probably take a lot of time to get all the plugins running, all of the classes initiated and so on.
So, let's see, um. I think it's deploy mode show, but I'm not 100% sure. I usually run it as part... Okay. Current application mode is developer. That's great.
Eric Hileman: [00:14:07] Ah, wow.
Ivan Chepurnyi: [00:14:08] Oh, I actually
didn't switch. Um ,a view, sorry. Um, so of your viewers, you, you didn't actually see it. So here it is. So I, Ron's is deployment show and it shows us that actually it's an in developer mode and what we need to do, we need to set it to production.
Because since that's your way. Uh, Magento will automatically right now already compile all the dependencies. It will all sub boot a store into maintenance mode while we are gonna run completion process. So sorry for short period of maintenance, but it's, it's worse. The wait time afterwards, right?
Eric Hileman: [00:14:53] Yeah. Yeah. We have approval for them. They know that we're going to be working on it. So
Ivan Chepurnyi: [00:14:57] yeah, definitely.
Eric Hileman: [00:14:59] Always make sure to get customer permission.
Ivan Chepurnyi: [00:15:01] Yeah. So, let's see. Uh, so.
Eric Hileman: [00:15:07] That's part of, that's part of our support too, Ivan. Whenever you open a ticket, you have the radio option of right or read only access.
So when a customer opens a ticket, we know like they give us permission to modify and make changes or don't only read and report back what we find.
Ivan Chepurnyi: [00:15:25] It looks like it's a little bit long process. I don't know why.
looks like a very long completion process, start.
Eric Hileman: [00:15:42] Oh, maybe we'll find out why it's not in production.
Ivan Chepurnyi: [00:15:46] Maybe
Eric Hileman: [00:15:47] I think maybe it'll error out.
Ivan Chepurnyi: [00:15:50] maybe there were some extensions that they actually broke compilation process or something. Yeah, it could be, uh, can we, uh, let me open another window, uh, in, in the meantime, I'm gonna also connect it.
Eric Hileman: [00:16:06] Oh, okay. There it goes,
Ivan Chepurnyi: [00:16:08] Oh, you just somehow. Oh yeah. Because it's a enabling was a production mode. It starts at in a separate shell process, and it doesn't give you pass through into your HTTP out. So you have to actually wait till the operation gets completed until you actually receive information.
Is it done or not? Okay. So now as the static content gets deployed, so. Let's hope it's gonna be over soon.
Eric Hileman: [00:16:45] We could sing a song. Do you know any songs?
Ivan Chepurnyi: [00:16:48] No, it's done.
We didn't have to put ourselves in awkward position, you know, by singing a song. So, okay. So everything is compiled, um, production mode is enabled, and let's see what numbers now we can see here.
Okay. So let's see here. We have, uh. The time, uh, the spend here and other performance problem of this customer, right? We see an issue with the menu, right? And, over here. Uh, we sees that there's lots of element, uh, lists, uh, getting rendered here in the profile section. And is there is some menu.
So there's stuck menus and zones that are under the regular menu and then there is templates, profile and then there is Azure elements inside of it. And basically the menu actually rendered two times. So not a single time, but two times.
Eric Hileman: [00:17:54] Wow. What the? That's really weird. And the menus block cache.
Right. So that block cache is on, so it should be cached and still rendering twice.
Ivan Chepurnyi: [00:18:07] No, we didn't enable it because we didn't know that side effects is going to bring because
Eric Hileman: [00:18:11] we just switched to production mode. Okay.
Ivan Chepurnyi: [00:18:14] Yeah, we switched the production mode. We enabled a configuration cache and we enabled layout cache, but we didn't enable a block html cache because maybe there is some kind of an issue maybe.
Um, some of these blocks like this get profiler html it, it gives me, um, a little bit of a hint. Is that. Uh, over here is there is happening, uh, some kind of a private data, uh, leak into the cache maybe. And that's why they decided, Hey, why's disablethe local html cache? Because...
Eric Hileman: [00:18:51] Private.
Oh, like a, like a card header.
Like you have so many items in your cart?
Ivan Chepurnyi: [00:18:56] Yeah, uh, cart header, or customer name, you know, it could possibly be something like that because could be, is that the extension that they're using like another, Oh, it's actually, we know nos the extension name. Wait a second, let me hover over
Eric Hileman: [00:19:13] MageZone ninja
Ivan Chepurnyi: [00:19:15] menus. So here it is.
And other ninja menus. So this is our performance bottleneck cure
Eric Hileman: [00:19:25] Oh, extensions.
Ivan Chepurnyi: [00:19:30] Yeah. So it takes sometime. So
Eric Hileman: [00:19:36] MageZon,
we're gonna @ you guys. so get at us.
Ivan Chepurnyi: [00:19:38] From, uh, the page load time, relatively speaking, uh, you know, it takes from what? From one second mark. Do you. Oh, four second. Then 67. Right. So this is a time spent on rendering the menu
Eric Hileman: [00:19:58] Twice!
Ivan Chepurnyi: [00:19:59] So it's like three seconds, right?
Eric Hileman: [00:20:02] Yeah.
Ivan Chepurnyi: [00:20:03] So it's three seconds. This is a from 6.4. Right? So just by, uh, eliminating these menu, uh, issues and putting it into the cache, uh, saves at least four seconds. Right?
Eric Hileman: [00:20:19] Yeah.
Yeah. We had a half a second for the, the replace.
Ivan Chepurnyi: [00:20:25] Yeah. So the replace blocks this one.
Yeah, it all adds up. And then there is the smallest part is actual valuable content of the page. So the smallest part is actually takes from 4.6 to you. Um, 6.2. So it's, yeah, like almost two seconds. and oh, the view didn't update why didn't update?
Eric Hileman: [00:20:57] Recording all the recording stuff, the zoom and the OBS maybe.
Ivan Chepurnyi: [00:21:04] Yeah. Ooh. Will be. Probably also because I, uh, did make my, uh, Chrome view, uh.
Eric Hileman: [00:21:11] Oh it's zoomed in,
Ivan Chepurnyi: [00:21:18] So maybe if I zoom out, maybe it's going to show something. Well, let's dive in here and let's see.
No, it's still showing me, showing me as a menu. Let me refresh.
Eric Hileman: [00:21:53] So
they have made MageZon core,MageZon builder, which I think is their page. I don't know. They haven MageZon Page builder too. MageZon Ninja menus. MageZon product labels, MageZon UI builder. I don't know which one is doing the replace.
Ivan Chepurnyi: [00:22:18] Oh, yeah. So here's another one. Um,
Okay. So it was a profile. It's kind of a routine plate off this, um, MageZon. So that's why I got confused. So this is actually is the actual page part. So we see here you see a templates profile, and this one contains elements and one of the elements taking a lot of time to render and its elements brought a grid.
And this one is, the actual issues that's happening and was there, and here I see some load in the loop here as well. Fair. Um, so we have an another MageZon extension here.
Eric Hileman: [00:23:15] Product labels.
Ivan Chepurnyi: [00:23:16] Yeah. So
Eric Hileman: [00:23:17] That's the load on a loop.
Ivan Chepurnyi: [00:23:19] Yeah. So it, Hey, it's, um, Magento, get to use the product collection, uh, on after load of, uh, the main collection.
So probably it does it on every single configurable product. And I can imagine that the, this customer is mostly using, selling actually, um, clothes, right? Clothes and accessories for, horeseback riding. Right?
Eric Hileman: [00:23:48] Yeah, it looks like it.
Ivan Chepurnyi: [00:23:50] Yeah. So they definitely have a lot of configurable products and yeah, I see here as
Eric Hileman: [00:23:57] there is horse blankets and
Ivan Chepurnyi: [00:23:59] yeah.
As is this a 500 to 580 millisecond sort of spent on this load product labels is, it could have been optimized.
Eric Hileman: [00:24:09] So that's half a second right there on the labels?
Ivan Chepurnyi: [00:24:11] Yeah, so I wasn't sure, is that a, is this a label extension? Um, is doing some kind of a check if you know, product is sellable, um, or if product has a special price and if it's configurable products probably works through all the simple products.
So is that configurable product or something like that to show like on sale or last piece or whatever?
Eric Hileman: [00:24:40] They do. They have a lot of apparel in addition to like accessories and horse supplies.
Ivan Chepurnyi: [00:24:46] Yeah. So here's definitely a problem. So we can see here. Yeah, it can be optimized. Uh, I can tell, uh, you know, how to optimize it because I don't see the code and probably is a little bit out of scope of, uh, our recording.
Um, but we can, uh, tell definitely that they need to take a look into this area. So this product labels module. Right. And another one here is, okay. Catalog product collection load after again, wait, this is kind of crazy.
Something is getting products loaded again.
Wait a second, where is it.
Oh, there it is, it's another label extension
Eric Hileman: [00:25:47] Amasty labels. What?
Ivan Chepurnyi: [00:25:51] Yeah. So we have with two label extensions, and it's quite funny, you know, like we have Amasty extensions that the load in the loop, and we have also theseMageZon extensions that loads in the loop. So...
Eric Hileman: [00:26:05] Yeah, they do, they have Amasty label.
They have a lot of Amasty extensions, actually.
Ivan Chepurnyi: [00:26:11] Yeah. So this is definitely a problem as well. So they need to take a look at that one. It's like 80 milliseconds per product. Yeah. Like 60, 80 per every single configurable product added by Amasty, um, extension.
Eric Hileman: [00:26:35] Wow. So this is the home page, and they have a limited...
How many approximately per page? Let's see...
Ivan Chepurnyi: [00:26:43] They have like four products.
Eric Hileman: [00:26:47] Yeah. Not that many .
Ivan Chepurnyi: [00:26:48] So, so to render just this basic data, you know, like probably over here is there's even no need to have these labels at all because I don't see any labels here.
Eric Hileman: [00:27:02] Yeah. I don't know what that's doing. Is that doing the regular price and the save, like as low as regular price?
Ivan Chepurnyi: [00:27:10] So let's inspect an element. Yeah. It's product labels and it's actually a MageZon product label, huh? Yeah.
Eric Hileman: [00:27:20] Oh, there you go. Yeah.
Ivan Chepurnyi: [00:27:29] So is this one definitely, uh, is a problem? So let's go back to this one. Yeah. So this is just a homepage. Let's quickly take a look what's actually happening in actual, um, category. So let's go into some category page.
Eric Hileman: [00:27:47] Yeah.
You said what? 80 milliseconds per product for Amasty labels alone.
Well, that was pretty quick.
Ivan Chepurnyi: [00:27:54] Um, yeah, because you know, we didn't, uh, enable profiler to see how much time everything was loading. So let's take a look. Just how much, uh, time it takes to render a page without profiler. Um, I wouldn't say it's very quick. Like
Eric Hileman: [00:28:16] six seconds, six seconds.
Ivan Chepurnyi: [00:28:18] It was feeling a little bit quick, but it's actually not,
Eric Hileman: [00:28:22] right.
Yeah. So that would be, that'd be about right. Uh, how many products for 25 on a category?
Ivan Chepurnyi: [00:28:29] Uh, I think 48
Eric Hileman: [00:28:31] Oh,
Ivan Chepurnyi: [00:28:31] 48 , but not all of them are configurable.
Eric Hileman: [00:28:36] Oh, okay. Yeah. They're not showing the,
Ivan Chepurnyi: [00:28:39] as soon as you see this, low as. As low as. It's the sign it's a configurable product because usually,
Eric Hileman: [00:28:45] well, that's the MageZon then, right?
That that label?
Ivan Chepurnyi: [00:28:50] This one, yes. This is, this MageZon. Yeah. I think when every single product is, there is some labels from MageZon I don't see that they're using actually Amasty labels, so this is that the one probably can disable if they don't use them, so it doesn't make sense, you know, to just have two load in the loop extensions. Uh, So, um, let, let's actually profile, look a category page. So we see it takes a five 99 seconds right unprofiled and we can see now extra overhead. Okay. When you actually run in profiling.
Eric Hileman: [00:29:38] Okay, so it takes some time, right?
Should we sing that song? We can sing how many... 99 bottles of beer on the wall. Do you know that song? And another one's
99 bottles of beer on the wall?
Ivan Chepurnyi: [00:30:00] No. Uh. I don't know. Uh, is this kind of a song, uh, in Ukraine where you didn't, uh, sing about beer? So, um, we did have, uh, some, a child cartoon about pirates and they were singing about 99 bottles of rum.
Eric Hileman: [00:30:21] So yeah, that, that works. Yeah. See this, that translates to any country, I think...
Ivan Chepurnyi: [00:30:27] Yeah. So it's not...
Eric Hileman: [00:30:29] I thought it would have been honey vodka? 99 bottles of honey vodka on the wall.
Ivan Chepurnyi: [00:30:35] No, not when we were kids, you know, so it's okay. I'm going to put another microphone. Um, uh, and as our, uh, dev ce, uh, just a moment.
Uh, it seems like I've lost audio. Um, do you hear me?
Eric Hileman: [00:30:58] Yep, I hear you.
Ivan Chepurnyi: [00:30:58] Oh, I know. I can hear you as well. I can put another, uh, I, AirPod into the charger box. So let's see. Uh, it's still running right.
Eric Hileman: [00:31:10] Yeah,
48 products. Lots of loops.
Ivan Chepurnyi: [00:31:15] Probably should have disabled aggregation, but it's already too late.
We're too far.
Eric Hileman: [00:31:21] What does, what does aggregation do again?
Ivan Chepurnyi: [00:31:24] Yeah, so by default, the Blackfire, runs a profile ten times. And when you have aggregation enabled, it means that it's gonna, um, give you an average value across all of those rounds.
Eric Hileman: [00:31:40] Ah, okay.
Ivan Chepurnyi: [00:31:44] But also we'll remove four flukes, you know, like if you have some cache and it will, uh, actually take, uh, the common, uh, paths, uh, combined together. Except the timeline view. The timeline view doesn't, um, account for, uh, these kind of runs because timeline requires you do a full page run, but the rest of .the views are actually aggregating the data. So, so that's why it takes some time. When you see that it's loading data, it means it's actually combining all the runs together and provides you a report. Okay. It's already a nice number...
Eric Hileman: [00:32:28] Wow. Yeah.
Ivan Chepurnyi: [00:32:28] 2,400 database queries, uh, very promising, let's look on a timeline, shall we?
Eric Hileman: [00:32:43] Yeah. Brace yourself.
Ivan Chepurnyi: [00:32:47] Yeah. Let's...
Eric Hileman: [00:32:50] If it loads, I mean, it might lag...
Ivan Chepurnyi: [00:32:56] Okay, so it was a manual Willard, you know? Right.
Eric Hileman: [00:33:01] Yeah.
Ivan Chepurnyi: [00:33:01] But here we can...
Eric Hileman: [00:33:04] Did it render twice here too? It did, didn't it?
Ivan Chepurnyi: [00:33:08] Yeah. I think the just and nature of this module itself, so, uh, this is provided by MageZon. It does a lot of database queries, um, you know, in the loop. So let's say it knows, Hey, I have these sections.
So instead of. You know, loading all the data you need on the page, they just decide, Hey, I hit this section and now I load another piece of data for this section. Instead of just collecting all the sections together and then just doing one single database operation to grab all of the data you need, maybe they have also a wrong database structure to do such kind of queries as well.
That means, yeah, just. Yes, the problem was the extension itself. Okay. So here we have another, uh, uh, load product labels. And here you see actually impact. A load in a loop. Uh, gives on the page load time when you consider, um, amount of time spent on every single product. So now we have 48 products.
Before we had like four. And it was a spending like a full, a hundred milliseconds right now was 48, it's 24, uh, sorry, two seconds, then 14, 400 milliseconds of load time added, uh, by those products, right?
Eric Hileman: [00:34:39] Yup.
Ivan Chepurnyi: [00:34:40] And we see here internally, we see a lot of spikes and those spikes indicate that there's a load in a loop happening, uh, and there is a hundred and 50 milliseconds of actual happening as well as, here as well. I see that for every single product, we probably, if we're going to count these, uh, small, um, blocks.
you see, we probably can count
Eric Hileman: [00:35:13] 48 of them,
Ivan Chepurnyi: [00:35:16] 48 of them, right? And that takes 160 milliseconds per product. To render one these blocks. So let's see what's happening inside.
Eric Hileman: [00:35:25] So
48 times 160.
Ivan Chepurnyi: [00:35:31] Okay. Uh, it's Magento swatches module.
Eric Hileman: [00:35:37] Ooh.
Ivan Chepurnyi: [00:35:42] So yeah, I think we can easily fix it, you know?
Eric Hileman: [00:35:50] All right.
Ivan Chepurnyi: [00:35:52] Um, because it's, uh, one of the easiest fixable functionalities because I don't see that they use swatches. Do you see?
Eric Hileman: [00:36:02] No. Well, no, not on this page. I don't like. If you go to the product, you could probably get that stuff in different colors and lengths, but on the category page, why would you have swatches on the category page?
Ivan Chepurnyi: [00:36:16] It's how they use it. So, yeah, it's a little bit... Is it going to be hard to achieve? Right.
Eric Hileman: [00:36:23] Why would swatches be... On the, on the category page if they're not displaying them?
Ivan Chepurnyi: [00:36:32] I think it's just a problem of the swatches module, um, because it's the default one and he just enables everything by default.
But, uh, um, if there is , let's say you didn't configure any products. Well, let's say, as far as I understand the swatches module does the same thing as a lot of developers do as a mistake. They think in point of view of objects. You remember last time we were talking about, uh, developers thinking in objects?
Nothing. Yeah, data, uh, structures itself. So they think, Hey, which objects already exist in Magento that can check if I can actually render sources or not? And from point of view of configurable product, because you know, like there can be different products on the page and they don't know which of them have swatches and which of them don't.
So they need to access every single attribute they need to check, uh, every single attribute. Hey. Does this entity need to be shown on a category page or not, but when they load Magento's automatically loads, all the simple products of configurable product and that is gonna result in load in the loop.
Eric Hileman: [00:37:44] There should be like a, a switch to say like, okay: not going to use swatches on the category page, only the product page.
Ivan Chepurnyi: [00:37:52] It's, it's, it's a good idea for a module. We can, uh, develop a module, that adds this simple drop down in admin panel and release it as an opensource solution for people who have this kind of problem.
Eric Hileman: [00:38:08] I think we see this a lot actually, because we hear, we hear a common complaint like, ah, my category page is is really, really slow. Why can't I show more products on my category page? And then, yeah, they're using swatches.
Ivan Chepurnyi: [00:38:19] Yeah. So swatches are a common problem, I think, because the swatches module is not a high performance module.
Eric Hileman: [00:38:31] Well, it's probably okay when you're just doing it on the product page and for one product. Um, but when you're on, I'm sorry, when you're on the product page for one product, it's probably okay, but on the category page, no. Like I don't even, I don't, I can't think of a customer example where they would have swatches in a category page, like...
Ivan Chepurnyi: [00:38:52] I had one who was a customer, but I can't tell the name for now.
Eric Hileman: [00:38:56] So you just, you do you like, is this a, is it a clothing company or are they selling...?
Ivan Chepurnyi: [00:39:01] Yeah, it's a clothing company. The have this skill or future? Uh, you don't need to go from cateogry page in order to add a product to the cart.
Eric Hileman: [00:39:08] Uh, all right. Yeah, that's kinda...
Ivan Chepurnyi: [00:39:12] That's this style of Magento implementation. Right? You just have this add to cart button but it's gonna actually bring you to the product page page to
Eric Hileman: [00:39:22] configure it. Yeah.
Yeah. And for that customer, you actually can do it right away from the category page, and I'm right now fixing presenters performance issue that was load in the loop for their custom functionality in order to be able to add, with only three database queries, be able to show this configuration for all of the products on the category page. So not to do it, you know, for, um, every single product. And then, yeah, it's gonna be a very nice thing for them, not that the story, of course, forMagento core, because it's got some modules that they have in their custom project.
So let's see. Here. Um, yeah, as I said in the category as this swatches module, what needs to be done, we need to create for them a module a is it would disable, uh, swatches on, category page? Right? So it will just disables this observer, basically all the implementation was there, is it part related to, you know, this render of swatches around.... Yeah. So is this, wait a second, where is it. Yeah. Magento swatches get HTML output and this swatches surrender configurable Cipro. We just need to remove this block even for layout. Actually for this customer, we can just create a layout of date that would remove this block from a category page.
So that's, it's because they have that block in there that's calling it, even though it's not being used.
Ivan Chepurnyi: [00:41:07] Yeah. It is, the block gets rendered anyway and Magento tries to get this JSON config that is actually triggering all this load operation and itself, even here a is it the database operation is actually not, uh, executed.
Is the biggest problem here is actually, is that all the PHP objects get is rated again and again and again, every for every single product because there's already were, uh, other actions like this labels who are already loading use products. So here we don't see big, big of a overhead.
Eric Hileman: [00:41:44] Do you see any writes?
Do you see any writes on the swatches? Cause we've had customers that would generate a lot of, uh, a lot of writes on their swatches. And I'm not sure if that's it's a default behavior or something custom that they did, or a...
Ivan Chepurnyi: [00:42:00] Probably something custom. Hmm. Yeah. Because the writes, uh, are not happening in default one.
Eric Hileman: [00:42:08] Okay.
Ivan Chepurnyi: [00:42:10] Yeah. But this gets product details HTML is kind of gets repeated and repeated all over and over again. And then we have another load in the loop. you see, I'm glad this is a small one, but still...
Eric Hileman: [00:42:29] The media gallery, huh? Yeah. There's no media gallery on the, category page.
Ivan Chepurnyi: [00:42:36] Yeah, but the problem.
Is that this Amasty extension, it triggers this well, to use products and get use products. So it. It actually iterates again for all the products in order to run the row labels. And it again triggers some database operation to get used product collection and this one actually triggers. a database query. As we see it takes three millisecond per each product and additionally on exhibiting database queries there's a lot of PHP iterations happenings that increase it to 28 milliseconds per product. So we can see it quite clear here. So. Most of the contributors are Magento swatches, uh, uh, Amasty labels and the, this, uh, guys, I forgot already their nameum, MageZon
Eric Hileman: [00:43:38] MageZon, yeah MageZon
Ivan Chepurnyi: [00:43:40] Magezone labels and also page builder on the home page. Right. So does this also go through booths?
Eric Hileman: [00:43:48] Something's... well Ninja menus, Ninja menus is rendering twice and looping.
And then they also have, yeah.
Uh, the, the preg replace, which was the minify was that a MageZon as well?
Ivan Chepurnyi: [00:44:02] Yeah. It was also MageZon, so MageZon so far is the champion here. So we can give them an award.
Eric Hileman: [00:44:13] We're going to do the top gear thing for the most database query calls?
I'll put it up on my background here.
Ivan Chepurnyi: [00:44:23] Or maybe we can introduce, you know, like a performance masters or something like that? And you know, like you would really award, uh, to them for, you know, doing this kind of thing.
Okay. So it's, it's quite interesting here, right? So we found some performance bottlenecks. There are not some things that we can do an easy fix, like the one we did the last time you remember? Uh, it was just simple pull request and it was over, but this one is more complex and it actually requires to get someone to help them actually to fix it.
Um, was this done by any agency by any chance?
Eric Hileman: [00:45:13] I don't know who did their build, uh, or who they're partnered up with. Well, we can certainly talk to them and find out.
The blcok on the category page? We can, that's something easy we could do.
Ivan Chepurnyi: [00:45:28] MageMojo definitely can help with swatches and this is something that is a pain point, um, definitely here. Um, but steel, you know, is this Amasty and the MageZon and again MageZon and MageZon, those are the problems.
Okay. So let's take a look at the product page, shall we?
Eric Hileman: [00:45:52] Yeah.
Ivan Chepurnyi: [00:45:53] Okay. Let, let's go into this nice configurable product page. Um, and I think we're going to be amazed because I already see...
Um, it's a little bit slow.
Yeah, definitely. Definitely. It's the same story, but it's interesting. Why? Because there is not much data, right?
Eric Hileman: [00:46:22] There's only one product, not 48 so...
Ivan Chepurnyi: [00:46:26] Yeah. What's happening there? It's interesting to see, right? So you can start singing 99...
Eric Hileman: [00:46:36] Have you ever ridden a horse?
Ivan Chepurnyi: [00:46:42] Actually once in Ukraine, when I was living in Ukraine. Um, me and, uh, my wife at the time. She was my girlfriend. We went, uh, for, uh, a horse back riding club outside of Kiev....
Eric Hileman: [00:46:57] That's a romantic date.
Ivan Chepurnyi: [00:47:00] Yeah, it was very nice. It was actually on a Valentine's day in winter, and you know when Ukraine winters are very warm. In quotation marks here.
Eric Hileman: [00:47:15] Yeah. Okay.
Ivan Chepurnyi: [00:47:19] Okay, so we have some results already. I think. So what are we going to see here with, uh, this, uh, product page?
Eric Hileman: [00:47:33] I don't know what, what's your bet?
Ivan Chepurnyi: [00:47:38] Uh, I think we're gonna see some database queries definitely happening there.
Eric Hileman: [00:47:45] Well, I wonder what they could be getting from the database?
The reviews maybe? I think I've seen that one pop up. Or something like recommended products or like product view history to show... Well no, no I didn't see any recommended products, but it maybe there's a block in there?
Ivan Chepurnyi: [00:48:07] You know, like there is, 1.5 seconds spent on database queries.
Eric Hileman: [00:48:14] Well if there's a thousand of them. Yeah.
Ivan Chepurnyi: [00:48:17] So it means that there is, apart from that, that there is 1000 database queries, there's also some slow query thing because you remember on the category page, is there are two thousand and 400 and yes, it's barely hit one second then here, there is this amount of queries. Let's see, what is the most time consuming?
Eric Hileman: [00:48:42] Yeah. Inventory. Why would that take, okay, well it called it 18 times, but still wait. Why? Why? Why would you call inventory 18 times to get like...
Ivan Chepurnyi: [00:48:59] For every single product and configurable.
Eric Hileman: [00:49:02] Ah, right. Yeah. Yeah. They have 18 versions of it.
Ivan Chepurnyi: [00:49:08] Yeah. So instead of SKU int, there is SKU equals Hmm.
And I, I think they're using 2.3, right? So there is some core patches available. Uh, let me just quickly look it up. Uh, so it was Magento. Okay. Uh, inventory...
Eric Hileman: [00:49:34] 2.3.2
Ivan Chepurnyi: [00:49:37] and. Here there is, there was some Wiki page about the known performance issue?
Eric Hileman: [00:49:44] Is this MSI?
Ivan Chepurnyi: [00:49:45] Yeah, it's MSI.
For a moment, they actually need to apply some patches, but they need actually to fix, their deployment process, because I saw, they are not using git in production or actually. They don't use, maybe they use git, but the information is broken. Yeah.
Eric Hileman: [00:50:04] Yeah. There, there was, um, a S... I've seen a couple of MSI patches on Twitter from the community, but did Magento endorse any of them and put out their own on the MSI project?
Ivan Chepurnyi: [00:50:16] Known issues.
I think quickly they could look into secret chat and find this URL and it will pop up, um, the browser. Yeah. So here it is.
Eric Hileman: [00:50:37] Oh, there it is. Link that in the show notes.
Ivan Chepurnyi: [00:50:41] Yeah. So this is a performance patches and now you actually have to go to another page: known performance issues. So let me, uh, just put it into the chat just to put it there.
So first of all, like, uh, you see here there are four different patches.
Eric Hileman: [00:51:03] Wow.
Ivan Chepurnyi: [00:51:04] And uh, one of them is actually about dictation. And another one is response times for catalog related scenarios on websites, running default source and stuck combination on store for an admin. So as far as I understand, they actually don't use MSI.
But MSI is enabled and it's hitting as this a special view of tables. I in MSI that, um, reduce this problem. So actually updating to two point three point three, will solve this problem for them. Here is a, actually, actually, it's already released in 2.3.3. There's also other MSI related to boxes that are available as, uh, batches, uh, from Magento.
So yeah, it will definitely help on a product page performance because it would reuse this a number of times spent on database. Dramatically.
and probably is the same thing is gonna happen here as well? Like hundred 89 what? Yeah, what is calling it by sku? This is crazy.
Eric Hileman: [00:52:20] Yeah.
Ivan Chepurnyi: [00:52:21] Let's take a look what's happening. So, um, so definitely here I see. Options were upper. And here we see catalog inventory, and here we see this. Oh, so here's our slow queries. You remember? Yep.
Eric Hileman: [00:52:46] Yep.
Ivan Chepurnyi: [00:52:47] So this is the ones that can be saved byapplying this patch and actually, or updating to the recent Magento version. But here's also I see there is another piece of page load time that I want to select, but it doesn't let me because, okay.
Somehow OBS and everything, it's a little bit slowed down and it's a lot to process together with UI rendering. So yeah. And here we go again with the menu, right? So the top menu takes. 3 seconds on the category on the product page. Right.
Eric Hileman: [00:53:31] That's longer than, well, Ninja menus. Yeah. Three seconds, right?
Ivan Chepurnyi: [00:53:36] Yeah. It's gotta be possible. Is that, um, you know, is that there is just some additional operations happening, uh, or maybe takes longer depending on the data base. A throughput. Okay. And here, what do we have as well?
Oh yeah. So basically it's actually two offenders. It's the menu and inventory, it's the biggest impact. So basically fixing MSI. Um, and caching the menu would reduce the load time on the product page a lot. Definitely
Eric Hileman: [00:54:26] Now would you recommend they upgrade Magento or just do the MSI patches to fix MSI?
Ivan Chepurnyi: [00:54:31] Huh.
I, I don't know what's their current state? Uh, you know, uh, I would leave it up to the implementator or who did the base build of the store because I don't know what the history in order to suggest something in that area, because it could be possible that I would suggest, Hey, update. But you know, like maybe is there some kind of custom functionalities that gets broken and it was back much more time.
Eric Hileman: [00:55:00] Yeah. 2.3.2 and up has been going pretty smooth from what I've been hearing. Have you heard similar that 2.3.2, 2.3, and 2.4. has been smooth?
Ivan Chepurnyi: [00:55:14] I work right now on getting one of the customers to do three, three. Um, I didn't yet , see, you know, any kind of issue so far, but we actually didn't release it yet, so we, we don't know, um, yet what's going to happen.
But the, in general, yeah. Is, is the biggest offenders are definitely menu and this bug in MSI on the product page. So we can see definitely much more a smaller number of database queries. I still think even if you fix the menu, there is still going to be too much queries, but I don't see their impact right now on the load time much.
So it could be a lot of queries, but from point of view of the value for the money spent. Uh, you know, uh, caching the menu makes sense. And fixing the issue with MSI.
Eric Hileman: [00:56:16] Caching the menu? Is that block cache? So you would recommend block?
Ivan Chepurnyi: [00:56:21] I'm not sure. I'm not sure it'll be possible. Is that a, does this mean just menu?
Maybe they don't use any cache at all. You know,
Eric Hileman: [00:56:32] You're right, right.
Ivan Chepurnyi: [00:56:33] It could be possible. Disabled.
Yes. So we don't know why it was disabled and I don't want to enable it. And, you know, um, introducing some issues on the website, like I know that configuration, cash and loud cash are safe to enable but this one, you know, sometimes is a reason why it's disabled. So.
Eric Hileman: [00:56:56] Yeah. Yeah. That's awesome.
Ivan Chepurnyi: [00:57:00] Yeah. So I wrote, wrote, right off the bat they can really improve, you know. Experience of the end users of the website by fixing, uh. These extensions and fixing some core issues and yeah, we're gonna work together, probably on these swatches, a small configuration module.
Eric Hileman: [00:57:23] Yeah, I like that. I would really like to see a module that does that, and also maybe we could do a commit to the core that would maybe make a switch to turn it off on category pages. That seems like a useful thing to me.
Ivan Chepurnyi: [00:57:37] Uh, I think it's gonna be a little bit of a problem because, uh, getting, uh, you know, some, uh, pull requests mergedto the core takes a long time in a very tiring process, so you have to really dedicate a lot of energy to get it through. So...
Eric Hileman: [00:58:01] It's true. It's true. We've tried with our CRON extension to get to get that in. I think the core team just wanted to go a different architectural path, um, that, and so we released it as an extension and the extension gets installed a lot.
Everyone is like, well, we wrote an extension. Why didn't you commit it to the core? And we're like, well, it's not that simple.
Ivan Chepurnyi: [00:58:22] It took me a... You remember the issue I was working on for which you provided me servers to, uh, fix the core back with cache locking. You know, I started, uh, investigating an issue back in March and only, uh, in October just before Magento Live Europe, I did final fix for the problem and still, uh, I wasn't able to debug some of the stuff, is it the,that was failing the functional tests and only with the help of core developers being actually involved and through the process. And actually looking out from there, a Jenkins servers and error logs, what was happening in a, in a functional tests only does that helped me to actually finalize my pull request.
Eric Hileman: [00:59:09] That's... Who has access to that?
Ivan Chepurnyi: [00:59:12] Yeah. So from point of view of the community, right. You can do a lot of, uh, code changes, but you want, I don't want to, you know, bring stuff into the core that's going to break a lot of production installments. They don't like. I want to make sure it was that all my tests are passing.
And if I brought some tests, I want to know why they are broken, you know, and uh, Thankfully, actually to Mihael Slavko and Igor Miniailo and uh, Aleksi .I forgot his last name, but he's also one of the core engineering team, uh, for helping me out with actually getting those logs and finding what was the problem there.
And, uh, only after that , I was able actually to get the final fix, but still, the pull request is still not merged because it needs to go through internal processes with Magento and it's anyway in, are going to be released before the next, probably even not the next one, but after the next release, you know, because everything that goes into the next release. Even if the pull request is merged, it's not gonna come into release because there could be already called freeze face in Magento, whereas they don't introduce, you know, new functionalities or changes, and you're just going to go maybe in half a year.
It's going to be finally in the core. So if we start doing the pull requests right now, yeah, it's probably going to be merged into two.
Eric Hileman: [01:00:42] Next year,
Ivan Chepurnyi: [01:00:43] or maybe in three years, we wouldn't know. You know it.
Eric Hileman: [01:00:46] That's it. Yeah, it's true. It could be a low priority and it just doesn't, they don't get to it.
They have to prioritize what they do.
Ivan Chepurnyi: [01:00:55] And right now I think they're more focused on PWA and getting a graphQL APIs and everything. Yeah.
Eric Hileman: [01:01:02] Yeah the APIS. My closing keynote. Get that done.
Ivan Chepurnyi: [01:01:08] Yeah. So basically, probably the actual problems on the current front-end are not that interesting for them, maybe as well.
So who knows? But in general, I think create an extension is the, is the first thing that we can do and okay. Then, maybe we can dedicate some time to make a pull request, but extension should be already available for everyone to install it. Because you know, people have this problem right now is they cannot wait, you know, for another year to get this issue with all of the Magento, um, updates, right?
So they need salu... Some solution right now for the problems that they already have.
Eric Hileman: [01:01:49] Yeah. Yeah, that's exactly what we said. We have problems now with the Cron. Our customers need it right away. That's why we did the extension, and that makes sense. Makes sense. So people wondering why you do an extension and you didn't get this into the core.
That's why. So cool.
Alright. This is good information.
Ivan Chepurnyi: [01:02:09] Oh, also, I think for me, let's say as a consultant. I'm not employed by, you know, companies that dedicates a budget, uh, for me to spend on going on and going back and forth, all of my pull requests, you know, spending time. I'm doing it, uh, with my own money, with my own, uh, you know, commitments.
I'm not getting paid for it. Yeah. So I cannot spend much of my time, uh, doing it. So. If anyone wants to, let's say, to get, let's say, an extensions that we're going to release and just send me to this pull request as a core, I'm completely okay with that because I just don't have time to spend on the burden of going through all of the process.
Eric Hileman: [01:02:53] Yeah. Yeah. We just brought a new guy in. Um, let's do the extension and, uh, we'll see if, uh, if this guy, he's, he's working weekends, so he has some free time. Um, we'll see if he wants to try to do a pull request with it. And. Work the process to get it through. So we'll, we'll sponsor that and put our, put our money into that, see if we can help the community out or always down down to help the community.
Ivan Chepurnyi: [01:03:18] yeah. Cool. Okay. So I think we are pretty well over time with the episode?
Eric Hileman: [01:03:27] Yeah. Yeah. We're way over time.
Ivan Chepurnyi: [01:03:29] It was a long one, uh, today. So, um,
Eric Hileman: [01:03:34] Our customer's gonna be real happy.
Ivan Chepurnyi: [01:03:36] Yeah, there's definitely a, um, a lot of things that's going to be improved here. And I definitely like to suggest to this merchant actually to think about, uh setting up a process.
Uh, you know, doing some kind of automated deployment, uh, separate, uh, you know, their uh, code base, uh, from updates on live. You know, like, don't use development mode in live system. Uh, don't disabled caches on live system. Just have a proper deployment, a script maybe around for Jenkins or even, I dunno know, do MageMojo have Jenkins service available for deployment or not?
Eric Hileman: [01:04:21] We don't right now. And Stratus3 we're building in a CICD system where you can run commands. So we have basically an event system that you hook into your repos and it's event driven hooks into Stratus events and communicates between the two.
And then we have pipelines of commands that you, that you can run. So, um, basically the actions that you take in your gIt repo will trigger, um, that type of build stuff here. So that's a Stratus three feature that we want to put in.
Ivan Chepurnyi: [01:04:51] So what I can suggest for any merchant, like if you're using, let's say, B, BITbucket, uh, bit bucket has very nice, let's see, CICD out of the box already, which you can connect to any project. It's called pipelines. So you can create a pipeline in your repository and you can automatically create the build artifact and upload it through SSH into production server. And then you can do whole swap and run any, uh, SSH operations or was there, so it's very valuable feature.
Also can run tests as well. That's a good thing to do too. So, uh, if for instance, uh. So that someone already wants to do it on Stratus, they can already do it. So they don't need to wait for the final feature.
Eric Hileman: [01:05:52] But we have a CLI that allows you to clear caches, do the rolling and rolling deploy. Um, no database changes.
You can get to zero downtime. Yeah.
Ivan Chepurnyi: [01:06:01] So it's basically possible. And for this customer, yeah. Figure it out. Why. Cache for blocks is disabled and yeah, just get it fixed and then it's going to be much better experience for everyone.
Eric Hileman: [01:06:22] Yeah. If anyone watching wants to submit their stores for reviews, um, you can reach out to us.
L I T L, uh, this short for email@example.com. Uh, Ivan. What's your, uh, email address if people want to reach you.
Ivan Chepurnyi: [01:06:38] Oh yeah. My email address is firstname.lastname@example.org. So,
Eric Hileman: [01:06:44] and then just your name, uh, at your name for, on Twitter as well, right?
Ivan Chepurnyi: [01:06:50] Um, yeah, my, my name on Twitter is @ivanchepurnyi.
uh, I think as they can find it in the show notes right.
Eric Hileman: [01:07:00] Yeah. Yeah. We'll link it up in the show notes.
Ivan Chepurnyi: [01:07:02] Yeah. So it should be pretty easy to pull up. So, yeah. So, so far, what kind of summary we can we, uh, do from this show? Well,
Eric Hileman: [01:07:15] I think you, I think you summarized it pretty well, you know, be conscious of your caches and your, your development mode.
Make sure you're in production mode. Um. MSI has some issues in it. So, you know, you can either apply the patches or upgrade. Configurable products, uh, in swatches that's in the category page. We're gonna put out an extension that allows you to disable that on the category page. If you're not showing those, which most of our customers aren't.
Amasty labels. There's two labels in here. There's MageZon labels and Amasty labels. It doesn't look like Amasty labels is being used. So, uh, switch to one of those. And even still, that's adding like half a second, at least to the, to the page. And then Ninja menus that needs to be cached. And we don't know if there was a problem in the block cache or not.
Um, so Ninja menus, so it's taking like three seconds and rendering twice in some instances. So you need to enable block cache, see if that helps. Or if they punched through it and if they punched through it, maybe switch to a different menu, uh, option. Yeah. And then the Prager place for the minify.
That was also, I think in MageZon as well. And that was a half second. So be very conscious of your extensions and watch your performance, you know, uh, try to record your performance before you install one. Just looking in the browser and use Chrome dev tools to see what the time is, time to first bite.
Ivan Chepurnyi: [01:08:42] And also right now my MageMojo customers will have out of the box support for Blackfire right?
Eric Hileman: [01:08:49] Yeah. Yeah. We're releasing that this week. So, um, get your, get your Blackfire discount.
Ivan Chepurnyi: [01:08:55] And yeah. Then, they can just, uh, uh, do and, uh, set up blackfire, run profilesd on their stores, uh, see if they have similar issues.
Uh. Even merchants themselves, they can also, so on the profile because it can already tell a lot of metrics because yeah, if you just open a profile and do you see that, let's say, is there more than hundred database queries on the page? It means that there is some kind of an issue and you need to be in your developer and discuss with the developer, Hey, is there a problem?
So yup, go out to fix a problem. So it's that simple.
Eric Hileman: [01:09:37] All right, awesome. So, yeah, if anybody wants to have their site reviewed, we'll make a copy of it here and review it for you. Just get at us. And, um, I guess lastly, you can find us on Twitter, um, @loadintheloop. So hit us up on Twitter if you have any questions about the show.
Yeah, thanks, everybody.
Ivan Chepurnyi: [01:09:54] Thanks everybody. Thanks for tuning in. Bye.