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 torender
a web page, aChromeRender
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
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 options
url
:string
is required, web page's URLcookies
: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 usewindow.isPageReady=1
to notify chrome-render page is ready. default is false chrome-render usedomContentEventFired
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 afterrenderTimeout
, default is 5000ms.deviceMetricsOverride
:object
overrides the values of device screen dimensions for responsive websites, detail use see hereclearTab
:boolean
iftrue
after render chrome instance will navigate toabout:blank
to free resources. default istrue
. setting tofalse
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}
- chrome-render dependent on chrome-pool headless chrome tabs manage pool.
- chrome-runner run chrome with nodejs in code.
- koa-chrome-render chrome-render middleware for koa.
- koa-seo SEO middleware for koa base on chrome-render substitute for prerender.