13

I have used craft for a few medium sites sites and I love it. Would Craft be capable of running a large public body website which would be updated with news regularly and have a wealth of information on the wide range of services provided - and likely to be a large number of documents needing accessed. On a rough estimate there could be 7-8 structures and maybe 10 channels. There will be a small eCommerce requirement on the site.

Will Craft handle this all ok? Is there any limitations?

Don't want to be running into the problem of developing the site then at launch it and it not being able to cope.

2 Answers 2

18

One of the biggest Craft projects I've worked on has around 25 sections, 10+ global sets, 250+ fields, and 12,000+ elements across 16 locales (although only 1 locale has launched atm). Craft itself (the CP) has not had any problems I can remember handling it so far, especially with the element index updates that have been introduced over the last few months. I know there must be people running sites much bigger than that too.

On the front-end, we definitely had some slow templates where we are looping over a lot of related elements and outputting assets that were generating hundreds of queries per page, but careful planning, template caching, and in some cases using plugin code to pre-fetch data outside of the craft.entries etc calls in templates helped a lot. You can suffer from N+1 problems with relations and images - as you can with any CMS/website.

I wrote a small plugin for storing template caches in Craft's data cache (in our case Redis), which I'll see if I can release; we stuck Varnish in front of everything except CP requests; use S3 & CloudFront for serving assets; and while there's still room for improvement, we're now getting straight A's on webpagetest.org, so Craft certainly isn't just for small hobby-projects.

2
  • Excellent - sounds great. should have no issues then - just need to be good on the caching on the front end - and have the site running on a decent server then by the looks of things.
    – mmc501
    Feb 27, 2015 at 14:37
  • 1
    Straight Up Craft just released a really helpful video with tips for using the cache tag... straightupcraft.com/articles/the-cache-tag
    – Lindsey D
    Feb 27, 2015 at 15:30
7

EDIT: When I wrote this answer (in April 2017), I didn't realize this question was asked 2 years ago (I saw it at the top of the list of new questions on the stackexchange site and assumed it was just asked). Leaving it here for future reference though. (Hopefully a lot of it becomes a moot point after Craft 3 is released)...

I think technically Craft is capable of handling large sites, and it's probably a good choice (as good as any PHP CMS out there). But you will run into some problems due to the limited customizability of Craft's CP (back-end dashboard interface) and how it stores field/entrytype schema in the database. I'm building a fairly large site now (thousands of product pages for a catalog, each of which has between 1 and a dozen photos and additional support files). The big challenges I've run into so far:

  • Asset manager chokes when there are too many folders. I originally set the product page assets to have a separate folder based on their slug, but then my CP kept crashing because it was trying to list 1,000+ folders when you expand the asset source in the left sidebar. So instead I need to figure out some code that creates sub-folders based on the first letter or few letters of the slug (just breaking it up into more of a hierarchy than a flat list).
  • Asset manager doesn't search through all the assets... I think it only searches the folder that you're currently viewing. If your client isn't very well organized with where they place uploaded assets, it could become difficult to locate them.
  • Craft has no functionality for setting up restrictions on your page hierarchies. For example, we have product categories and underneath the categories are product detail pages. But the products within a category need to be manually sorted (they are not necessarily displayed in alphabetical order)... and craft provides no way to achieve this. You can have 1 big "Structure" section of the site which does allow manual sorting of things, but you cannot impose any kind of restrictions such as "product pages can only live underneath categories".
  • All field/entrytype schema information is stored within the database, which makes working on the site with a team (and with multiple servers e.g. local dev, staging, test, production) a total pain. You either need to write down your own notes of how to recreate certain changes to fields/entrytypes, or send database backups all over the place (which is impossible if 2 people are making their own structural changes). On top of the pain of collaboration and deployment, there's also the fact that you cannot put your schema changes into version control. And once the site goes live these problems are further compounded because you're basically having to do a portion of your development on the live site (for future feature requests where you need to add/change fields or entry types).

Hopefully the forthcoming Craft 3 will address a lot of these issues (I know they're revamping a lot of the asset management stuff, and adding in a way to migrate your schema in code, and I have a feature request out to address the hierarchy restrictions so hopefully that gets added someday).

But despite these limitations, overall I think Craft is capable of the large sites. (It seems to have good solutions for optimizing page queries via "eager loading" and good fine-grained caching mechanisms with its {% cache %} twig tag)... and I think we're figuring out ways to hackily work around the limitations for this project. Every CMS has its limitations, it's just a question of which flavor of hassle do you want to deal with :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.