This post is part of a series of posts around achieving maintainability and scalability within your Magento solution. Magento offers a great feature that allows customers to reorder products previously purchased. In a vacuum the default solution makes perfect sense. Magento reviews each previous order and the items associated with it to determine if the items are still available in the catalog. If so, Magento presents a Reorder button next to the order in the order history grid.
Logically the solution makes sense, but is a very heavyweight solution that includes loading each product, all its variations, and corresponding stock statuses into memory to perform this check. The result is for a user that has purchased many items over time, the order history page is unimaginably slow for the user (sometimes to the point of time outs) and very resource intensive to the server.
It is important then to look at the profile of your customer and ask a few questions ...
- Do I have loyal customers who are making frequent purchases over time?
- How often is my product catalog turning over, will products from a year ago ever be re-orderable?
- How often do my customers come back to buy the same thing so that reorder even makes sense?
Every business is different, so you need to consider the factors above before deciding how valuable reorder is for you.
If you don't have many customers reordering, then this is a moot issue and you can move on. You can probably also stick with the base functionality if you do have customers that reorder but they generally reorder the same products over and over.
If you don't have customers ordering the same products over and/or your catalog turns over seasonally, reorder probably doesn't make sense. In this case, modifying Magento to remove the Reorder check and the Reorder button makes good sense.
If you do have reorders and the same customer may buy a wide range of items, you might want to consider limiting the reorder check for order history to the first few orders (5 or 10) and then disabling reorder checks for all over orders.