Fei Wang
For starters, your page calls both version 2.7 and version 3 of MathJax. Apart from adding extra bandwidth, it will be confusing because the settings for the 2 versions are quite incompatible. I strongly suggest you stick with version 3 only.
Secondly, like all output from Jupyter Notebook, the page is huge (over 6 MB). It is best to keep the total (including images and scripts) below 1 MB.
Thirdly, only a small fraction of the style and javascript produced by Jupyter is actually ever used by the page, and often the same thing is endlessly repeated (like all the style tags within the main body of the page.)
I've used the lazy load option of MathJax in my version. The only javascript added beyond MathJax is some code that wraps each of the tables in a DIV which I've styled so the tables can be scrolled horizontally if they are wider than the screen, which is important for phones (your page did have such a facility, but sometimes the whole DIV or paragraph would move when the user scrolled horizontally).
The changes have reduced the "time to interactive" from around 30 seconds down to about 6 seconds.
An even faster page would result if you were to only load (say) the first cell on initial page load, and then use AJAX to load subsequent cells (from an external file, say) as the user scrolls down the page. That would give you sub-2 seconds load time.
Other speed fixes would include converting the data:image/png images into WEBP images (much smaller, and can be cached by the browser) and simplifying the SVGs. For example, the following inline style value is repeated 2,038 times on the page, and it only needs to be there once.
style="fill: #1f77b4; stroke: #ffffff; stroke-width: 0.48"
Hope it helps
Regards
Murray