High-performance and universal server render base on Headless chrome, render any SPA(render data in browser) in server for SEO or other optimizes.
install it from npm by npm i chrome-render
new a ChromeRender
then use it to render
a web page, a ChromeRender
means a chrome.
const ChromeRender = require('chrome-render');
// ChromeRender.new() return a Promise, you can use async function in this way:
// const chromeRender = await ChromeRender.new();
ChromeRender.new({}).then(async(chromeRender)=>{
const htmlString = await chromeRender.render({
url: 'http://qq.com',
});
});
A
chromeRender
instance can callrender
multi-times and concurrent for high frequency use case.chromeRender
will manage a tabs pool torender
multi-pages concurrent.
After you don't need chromeRender anymore, you should call await chromeRender.destroyRender()
to kill chrome add release all resource.
see more demo in unit test
ChromeRender.new()
method support options:maxTab
: number
max tab chrome will open to render pages, default is no limit, maxTab
used to avoid open to many tab lead to chrome crash. ChromeRender
will create a tab poll to reuse tab for performance improve and resource reduce as open and close tab in chrome require time, like database connection poll. chromeRunnerOptions
: object
same as chrome-runner's options, can config chrome's startup options, detail see chrome-runner optionschromeRender.render()
method support options:url
: string
is required, web page's URL cookies
: object {cookieName:cookieValue}
is an option param. set HTTP cookies when request web pageheaders
: object {headerName:headerValue}
is an option param. add HTTP headers when request web pageuseReady
: boolean
whether use window.isPageReady=1
to notify chrome-render page is ready. default is false chrome-render use domContentEventFired
as page has ready.script
: string
is an option param. inject script source to evaluate when page on loadrenderTimeout
: number
in ms, render()
will throw error if html string can't be resolved after renderTimeout
, default is 5000ms.deviceMetricsOverride
: object
overrides the values of device screen dimensions for responsive websites, detail use see hereclearTab
: boolean
if true
after render chrome instance will navigate to about:blank
to free resources. default is true
. setting to false
may increase page load speed when rendering the same website.all request from chrome-render will take with a HTTP header
x-chrome-render:${version}