5. XHProf does not
measure:
• Time to First Byte (TTFB)
• Page render time (happens in the browser)
• Other aspects of front-end performance
• For page render time, see Chrome Dev
tools,YSlow
6. Our goal:
Reduce page execution
time
• Improve user experience
• Improve concurrency and efficient use of
server resources.
7. Avoid speculation:
• “Maybe it’s x”
• Wasted time on fruitless investigation
• Wasted time on inappropriate remediations
• Vague problem descriptions,“Eg,Views is slow”
10. Be smart, m’kay?
• Tools likeViews & Panels empower you to
do inefficient things but aren’t necessarily
bad for performance
• Views render & query, Panels pane caches
are great tools to improve performance
11. Example problem
statement
• “Entity loads are slow because when we
load entities, we load field X which also
loadsY data, which spends Z time in the
database. Page A loads 1,000 entities of
type X.”
12. Use XHProf to
• Pinpoint the root cause of performance
problems
• Develop a surgical remediation plan
13. Key UI Elements
• # of function calls
• Wall time (Inclusive/exclusive)
• Memory usage
• CPU time
20. We may find
• Queries that are quick to execute but slow
to assemble
21. We may find:
• Excessive entity loads
• Excessive calls to memcache set/get
22. What is “excessive”
• It depends! Know your app.
• Maybe you need that data on that request: Make
it less expensive to compute
• Maybe you don’t need that data: Don’t compute it
23. We may find:
• Page-blocking calls (eg, 3rd-party API requests)
• Queue these
24. We may find:
• Excessive calls to watchdog()
• Notices can slow down your site.
• Fix those notices!
25. We may find:
• Views/Panels render time - Dig deeper!
28. Avoid dirty runs.
• Eliminate menu rebuilds
• Disable Devel query log
• Disable XDebug - Really.
• Test as a non-admin (access control is
expensive.We want to observe that.)
29. Know which caches are
in place
• Views caches (DisableViews caches: https://
gist.github.com/msonnabaum/9671947)
• Panels Caches
• Other caches
31. “ZOMG! The site is slow!”
• ORLY
• Develop a plan to measure and set goals
32. “Slow”
Define success with specific
performance goals
• Execution time on specific page logged in as
specific user under specific conditions
• Quantify improvements on a per-page basis
36. Example: Static Caching in CTools
https://drupal.org/node/2049087
• Eliminated ~128,000 calls to t()
• Reduced memory footprint
• Reduced page execution time by 2 seconds
• Simple fix
37. Example: Static caching of node
access grants
https://drupal.org/comment/8495029
• node_access_grants() never changes within
a request
• Why compute it multiple times within a
request?