DRUPAL 7 PERFORMANCE:ENTITY CACHEAshok Modi – July 25, 2011
Drupal 7 sure does some cool stuff. Fields in core! Everything is trying to be an entity. Everything has the ability to get displayed using various build modes (full, teaser, search index, search result come out of the box). Was using Display Suite with views (and taking advantage of the build modes).
HOWEVER Field API currently creates a table for each field. Imagine 50 fields on one type of content…50 tables (plus 50 revision tables!) Running a entity_load each time really blows when you only need a few fields to show up for a display mode. Views also does a full entity_load Due to the design of the Field API, entity_load is done unless you are only retrieving the title of the entity. Drupal caches the results of the fields but only on a one-by-one basis.
Tough choices… Write your own module to store multiple ‘fields’ in one row http://drupal.org/project/pbs aims to tackle that but its not ready. Switch over to using MongoDB (http://drupal.org/ project/mongodb) Really fast. Really cool. Different way of thinking and not enough support on D.O yet. Definitely look at http://drupal.org/project/efq_views though.
Entity Cache to the rescue. Caches the entity after it is loaded the first time (including fields). Call on the cache and serve that to the user. Served until cache expires or until entity is updated / deleted. Already supports all core entities (nodes, users, taxonomy, comments, files, vocabulary). Easy to add support into other types of entities (rules? Media? Commerce? They can all be entitycache friendly).
How do I install it? Download the module. Enable it and forget it! Caching is pluggable. Willwork just fine with other backends like memcache, APC etc. Help your server behave in a sane way. Some sites will see great gains Some maybe not as good (you can try another caching backend if you have a lot of data).
Interested? How can I help? Test out some of the issues! Try to get this into core – http://drupal.org/node/597236 Check out the drush integration in the issues queue. Cache all your entities with a single command (made by yours truly ). Coming to DrupalCampLA? Talkingand presenting on performance (frontend and backend) See you there!