{
    "componentChunkName": "component---src-templates-note-note-js",
    "path": "/notes/Drupal-Performance",
    "result": {"data":{"mdx":{"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://drupal.stackexchange.com/questions/118990/how-do-i-improve-the-performance-of-my-drupal7-site/118991#118991\"\n  }, \"https://drupal.stackexchange.com/questions/118990/how-do-i-improve-the-performance-of-my-drupal7-site/118991#118991\")), mdx(\"h2\", null, \"6 year old answer\"), mdx(\"p\", null, \"These are notes from my experiences and might vary from what others experience. I predominantly use LAMP stack and have considered the same in my suggestions.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Thumb rules for caching that I generally follow.\")), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Process Once Use Multiple Times.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Live with stale data when possible\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Clear Caches infrequently and keep it very specific.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"When possible do the changes at the lowest level in the stack. LAMP - DCCc : Linux, Apache, Mysql, PHP, Drupal Core, Contrib and custom module.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Improve Performance of a Drupal Site (In the increasing order of complexity)\")), mdx(\"ol\", {\n    \"start\": 5\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Keep the core updated, contrib module and themes updated. Yes it matters.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Install APC on your server. (Moved to top based on suggestion from Letharion)\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Page Caching : admin/config/development/performance\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://drupal.stackexchange.com/questions/83315/difference-between-minimum-cache-lifetime-and-expiration-of-cached-pages/83342#83342\"\n  }, \"Difference between Minimum cache lifetime and Expiration of cached pages\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Block Caching\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://drupal.org/project/blockcache_alter\"\n  }, \"https://drupal.org/project/blockcache_alter\"), \"\\xA0Caching options for all the blocks.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Aggregate javascript and css files - Front End Improvements\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/advagg\"\n  }, \"https://www.drupal.org/project/advagg\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Disable Unnecessary modules. Every module adds to the amount of code that needs to be available for a page load. And it also increases the number of lookups. Wherver possible use a generic module in place of multiple module that does specific functionalities.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Cache Views content - Content aware caching for Views\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/views_content_cache\"\n  }, \"https://www.drupal.org/project/views_content_cache\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Disable DB logging - Use\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://drupal.org/project/syslog_ng\"\n  }, \"https://drupal.org/project/syslog_ng\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Reduce 404 Errors -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"http://www.brokenlinkcheck.com/\"\n  }, \"http://www.brokenlinkcheck.com/\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Fast 404 Responses -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://drupal.org/project/fast_404\"\n  }, \"https://drupal.org/project/fast_404\"), \"\\xA0- Try handling at server level.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Client Side Validations -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/clientside_validation\"\n  }, \"https://www.drupal.org/project/clientside_validation\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Compress Image -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/imageapi_optimize\"\n  }, \"https://www.drupal.org/project/imageapi_optimize\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Lazy Loading of Images - Don\\u2019t load unnecessary images -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/lazyloader\"\n  }, \"https://www.drupal.org/project/lazyloader\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use Sprite Sheets -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/spritesheets\"\n  }, \"https://www.drupal.org/project/spritesheets\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Set Minimum Cache Life Time Value to a higher number and use cache clearing modules to clear the caches for specific pages -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://drupal.stackexchange.com/questions/100346/whenever-i-edit-update-a-node-all-the-page-caches-for-anonymous-user-are-lost\"\n  }, \"Whenever I edit/update a node all the page caches for anonymous user are lost\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use Devel Module to watch queries.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Rewrite Views Queries / avoid Views if its a overkill.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"XHProf -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/XHProf\"\n  }, \"https://www.drupal.org/project/XHProf\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"FPM, HHVM.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"DB Profiling and Tuning -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/dbtuner\"\n  }, \"https://www.drupal.org/project/dbtuner\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Use Boost\"), \", don't Bootstrap DB if not required.\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://drupal.org/project/boost\"\n  }, \"https://drupal.org/project/boost\"), \"\\xA0For most of the small to medium sites Boost is good enough and you may not need Reverse Proxies or so.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use CDNs -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/cdn\"\n  }, \"https://www.drupal.org/project/cdn\"), \"\\xA0Its easy to set up.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"If your cache tables are huge use Memcached - If you can install memcached and set up RAM for it, it is not as complex as it sounds.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Etags - Configure Etags properly.\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html\"\n  }, \"https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Use Reverse Proxy Server\"), \"\\xA0- Varnish(at-least for assets). Helps a lot if most of your users are anonymous.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Compressed transfer - Enable gzip compression\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Keep Alive - Use Persistent Connections where possible.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Progressive JPEGS -\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"CACHING IN CODE - Eaton\\u2019s blog is awesome.\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7\"\n  }, \"http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Implement Cache Warming -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/cache_warmer\"\n  }, \"https://www.drupal.org/project/cache_warmer\"), \"\\xA0- Cache Warm the pages before the end user hits them.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Master Slave DB Config -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/autoslave\"\n  }, \"https://www.drupal.org/project/autoslave\"), \"\\xA0makes it easier for you to set up one.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Database Clusters -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing\"\n  }, \"https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Load Balancers -\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"http://en.wikipedia.org/wiki/Load_balancing_(computing)\"\n  }, \"http://en.wikipedia.org/wiki/Load\", mdx(\"em\", {\n    parentName: \"a\"\n  }, \"balancing\"), \"(computing)\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use heuristic Cache Warming -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/cache_graceful\"\n  }, \"https://www.drupal.org/project/cache_graceful\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Authenticated User Caching -\\xA0\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.drupal.org/project/authcache\"\n  }, \"https://www.drupal.org/project/authcache\"))));\n}\n;\nMDXContent.isMDXComponent = true;","inboundReferences":[]}},"pageContext":{"slug":"Drupal-Performance","node":{"childMdx":{"slug":"Drupal-Performance"}}}},
    "staticQueryHashes": []}