Reputation: 541
Who can help me.
I have a webshop running on magento 1.6.2.0. A VPS server with apache 2. I have APC and memcache, varnish cache and fooman speedster running.
The main page has acceptabel loading times ... But when i go to a category page it takes a lot longer ...
But the must waiting time is consumened by waiting on the html page to load ... See the screenshot:
The loading time is now around 2-5 seconds, but when its busy on the site it can run up to 10-15 seconds ... so much to slow ...
When i take alook with firebug i see the most time of the loadingtime is waiting ...
So my question is, how can i reduce this?
Upvotes: 3
Views: 10201
Reputation: 11
One really great improvement you can make is replace Apache with Nginx. I've seen great speed and stability improvements using Nginx. Some things MYSQL tuner will tell you is to optimize your tables, increase your innodb_memory_pool_size, and increase max_heap_table_size and tmp_table_size. If you can afford it, bump up your server to 4GB and give more memory to MySQL and PHP. Gzip also has an effect on time to first byte and might slow you down a bit with only one processor. You could investigate Cloudflare as an alternative/addition for caching. One last thing is that catalog pages tend to have lots of images. Make sure those are optimized (I use ImageOptim) and change gif to png if possible. There is so much more to go over, but start with this.
Upvotes: 1
Reputation: 1800
You have pretty complex layered navigation setup which is going to be heavy on the server.
From experience moving to a specialist Magento web host can make the world of difference...it did to me. I'm not sure if we are supposed to mention companies so I won't mention mine unless someone says it's ok to do it but a google search for Magento benchmarks should get you started.
Having a Three server approach makes a huge difference.
Upvotes: 0
Reputation: 5824
benmarks and josh pennington are on the right lines, ingnore the others who are telling you to cut down the number of requests for now as the extra requests are a distraction right now.
The problem is the HTML page takes too long to generate, and under load this gets worse.
Often this is down to the DB being under too much load, either through poorly optimised queries or not having enough memory.
You need to establish what queries are executed on that page, and what their performance profile is e.g. memory, IO, CPU usage.
What size VPS do you have? You also have to consider whether it's got enough memory.
Also are you running Apache? If so how many workers does it have. What may be happening is that at busy times there manpy not be enough workers and they may not be able to process quickly enough so at busy times some requests are queuing whil waiting for a worker to become available.
Upvotes: 2
Reputation: 6408
The first thing I would do is look at the Magento whitepaper. It has a lot of good tips for how to finetune PHP, Apache and MySQL for top performance.
http://www.magentocommerce.com/whitepaper
I will say that separating the MySQL server from the Apache one can make a world of difference. Magento makes very heavy use of Innodb which can be seen as very slow if the DB server is not optimized to use as much memory as it is allowed to.
Upvotes: 1
Reputation: 23205
The problem is likely data related. Create and browse to a category with no products and note the response time; this will indicate if its a category data issue. You can use the profiler to narrow down the culprit. In Admin > System > Configuration > Advanced: Developer, set the Developer Restriction IP to your IP and enable the profiler. Then in index.php uncomment Varien_Profiler::enable();
You should then see output after your normal response body. You can trace through that output and find the poor-performing area somewhere in the middle.
Upvotes: 1
Reputation: 1232
Just try to implement a javascript code to load all the images (high resolution) after the page loads. Just try to get images after the page loads threw a ajax call
function init() {
...function to call all the images threw ajax
}
window.onload = init;
well I tried out given below code to come up with the least time to load images. I put all images with a common div name and set their visibility to hidden...
$(document).ready(function() {
$("#img").css('visibility','visible') //img is div for all the images on the webpage
});
but ajax call give me a look and feel to get the images.
Upvotes: 0