Curious to wonder whether this issue is specific to the Javascript executor. If you executed similar code in the browser developer/javascript console, will it take a while or that is instantaneous? Perhaps with respect to the outerHTML example running something like
var response = document.documentElement.outerHTML;
and then just dumping the value in the console
maybe is an issue with the typecasting or JS engine interface if the issue is Selenium specific.
If it is fast in javascript (console), there is a possible workaround you can try in the meantime. Do more of the logical data processing within Javascript that you are executing, encapsulating code in javascript function(s) and calling the (chain of?) function(s) instead. Once you've filtered down the data to a more smaller or simplified subset, then you can return that back to Selenium. For example, if you process the outerHTML to extract certain text and only need a small subset of the actual complete page, maybe faster to do in JS then return to the calling language code than to do it in the language you're using Selenium with. Worth an experiment. If workaround is no faster, then something is obviously strange with JavascriptExecutor behavior.