2) If the performance issue is specific to page load times you can also capture a HAR file of the network traffic in the web browser to understand the various calls that get made.
3) You can always use the Profiler at /system/console/profiler and collect data while the page is loading. It will give you a percentage of how much time was spent during capture in various parts of code.
4) You can go to /system/console/requests and see the GET request for that page. If you expand on the request you'll see a microsecond break down of how that request was handled. (EG the numbers on the far left are microseconds of time elapsed) Where you see huge jumps in the time that is where it spent time computationally
There's many ways to troubleshoot this -- hope this helps
You can go into developer mode in editor view of a page to get a view of which node is taking time to load.
Most of the times, clientlibs and how JS is used is the culprit for bad performance on the page. Another excellent way of debugging is to use Google light house audit on the webpage using Chrome and go through the suggestions