perf(core): Optimize docusaurus start/serve, fix openBrowser() perf issue on macOS (#11007)

Optimize openBrowser() util
This commit is contained in:
Sébastien Lorber 2025-03-19 13:18:32 +01:00 committed by GitHub
parent 3782244ce7
commit 502b9007be
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -12,8 +12,12 @@
/* eslint-disable */ /* eslint-disable */
import {execSync} from 'child_process'; import {exec} from 'child_process';
import {promisify} from 'util';
import open from 'open'; import open from 'open';
import {PerfLogger} from '@docusaurus/logger';
const execPromise = promisify(exec);
type BrowserName = string | undefined; type BrowserName = string | undefined;
type BrowserArgs = string[]; type BrowserArgs = string[];
@ -49,6 +53,7 @@ async function tryOpenWithAppleScript({
} }
if (shouldTryOpenChromiumWithAppleScript) { if (shouldTryOpenChromiumWithAppleScript) {
async function getBrowsersToTry(): Promise<string[]> {
// Will use the first open browser found from list // Will use the first open browser found from list
const supportedChromiumBrowsers = [ const supportedChromiumBrowsers = [
'Google Chrome Canary', 'Google Chrome Canary',
@ -61,26 +66,53 @@ async function tryOpenWithAppleScript({
'Chromium', 'Chromium',
]; ];
for (let chromiumBrowser of supportedChromiumBrowsers) { // Among all the supported browsers, retrieves to stdout the active ones
try { const command = `ps cax -o command | grep -E "^(${supportedChromiumBrowsers.join(
// Try our best to reuse existing tab '|',
// on OSX Chromium-based browser with AppleScript )})$"`;
execSync(`ps cax | grep "${chromiumBrowser}"`); const result = await execPromise(command);
execSync(
`osascript openChrome.applescript "${encodeURI( const activeBrowsers = result.stdout.toString().trim().split('\n');
url,
)}" "${chromiumBrowser}"`, // This preserves the initial browser order
{ // We open Google Chrome Canary in priority over Google Chrome
cwd: __dirname, return supportedChromiumBrowsers.filter((b) =>
stdio: 'ignore', activeBrowsers.includes(b),
},
); );
}
async function tryBrowser(browserName: string): Promise<boolean> {
try {
// This command runs the openChrome.applescript (copied from CRA)
const command = `osascript openChrome.applescript "${encodeURI(
url,
)}" "${browserName}"`;
await execPromise(command, {
cwd: __dirname,
});
return true; return true;
} catch (err) { } catch (err) {
// Ignore errors. console.error(
`Failed to open browser ${browserName} with AppleScript`,
err,
);
return false;
}
}
const browsers = await PerfLogger.async('getBrowsersToTry', () =>
getBrowsersToTry(),
);
for (let browser of browsers) {
const success = await PerfLogger.async(browser, () =>
tryBrowser(browser),
);
if (success) {
return true;
} }
} }
} }
return false; return false;
} }
@ -103,7 +135,11 @@ function toOpenApp(params: Params): open.App | undefined {
} }
async function startBrowserProcess(params: Params): Promise<boolean> { async function startBrowserProcess(params: Params): Promise<boolean> {
if (await tryOpenWithAppleScript(params)) { if (
await PerfLogger.async('tryOpenWithAppleScript', () =>
tryOpenWithAppleScript(params),
)
) {
return true; return true;
} }
try { try {