diff --git a/aio/deploy-cn.sh b/aio/deploy-cn.sh index c584e7802b..5b692fda25 100755 --- a/aio/deploy-cn.sh +++ b/aio/deploy-cn.sh @@ -10,7 +10,7 @@ cd `dirname $0` yarn build -yarn preview & +yarn preview > /tmp/preview.log & sleep 3; diff --git a/aio/tools/translator/bin/prerender.ts b/aio/tools/translator/bin/prerender.ts index 318d3454cc..5af7e4caff 100644 --- a/aio/tools/translator/bin/prerender.ts +++ b/aio/tools/translator/bin/prerender.ts @@ -3,7 +3,8 @@ import * as klawSync from 'klaw-sync'; import { sync as mkdirp } from 'mkdirp'; import { minify } from 'html-minifier'; import { dirname, join } from 'path'; -import { launch } from 'puppeteer'; +import { Browser, launch, Request } from 'puppeteer'; +import { chunk, uniq } from 'lodash'; const minifyOptions = { collapseWhitespace: true, @@ -29,23 +30,45 @@ function getApiUrls(): string[] { const urls = [...getGuideUrls(), ...getApiUrls(), 'index.html']; -async function prerender() { - const browser = await launch({ headless: false }); - const page = await browser.newPage(); - for (let i = 0; i < urls.length; ++i) { - const url = urls[i]; - await page.goto(`http://localhost:4200/${url}`, { waitUntil: 'domcontentloaded' }); - await page.waitForSelector('#top-of-page'); - const content = await page.content(); - const filename = join('dist', `${url}.html`); - mkdirp(dirname(filename)); - writeFileSync(filename, minify(content, minifyOptions), 'utf-8'); - console.log(`rendered ${url}...`); +function filterResource(request: Request) { + const type = request.resourceType(); + if (['image', 'stylesheet', 'font'].indexOf(type) !== -1) { + request.abort(); + } else { + request.continue(); } } +async function renderPage(browser: Browser, url: string) { + const page = await browser.newPage(); + await page.setRequestInterception(true); + page.on('request', filterResource); + await page.goto(`http://localhost:4200/${url}`, { waitUntil: 'domcontentloaded' }); + await page.waitForSelector('aio-doc-viewer>div'); + const content = await page.content(); + const filename = join('dist', `${url}.html`); + mkdirp(dirname(filename)); + writeFileSync(filename, minify(content, minifyOptions), 'utf-8'); + await page.close(); + console.log(`rendered ${url}.`); +} + +async function renderPageGroup(browser: Browser, urls: string[]) { + await Promise.all(urls.map(url => renderPage(browser, url))); +} + +async function prerender() { + const browser = await launch({ defaultViewport: { width: 1280, height: 768 } }); + const groups = chunk(uniq(urls), 4); + for (let i = 0; i < groups.length; ++i) { + await renderPageGroup(browser, groups[i]); + } + await browser.close(); +} + prerender().then(() => { process.exit(0); -}).catch(() => { +}).catch((e) => { + console.error(e); process.exit(-1); });