{"id":15638079,"url":"https://github.com/gwuhaolin/chrome-render","last_synced_at":"2025-04-15T01:40:22.962Z","repository":{"id":57198474,"uuid":"91235208","full_name":"gwuhaolin/chrome-render","owner":"gwuhaolin","description":"general server render base on headless chrome","archived":false,"fork":false,"pushed_at":"2017-11-13T02:35:31.000Z","size":61,"stargazers_count":95,"open_issues_count":2,"forks_count":10,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-28T13:38:33.680Z","etag":null,"topics":["headless-chrome","server-rendering"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gwuhaolin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-14T10:13:20.000Z","updated_at":"2024-03-03T23:12:18.000Z","dependencies_parsed_at":"2022-09-16T14:10:32.125Z","dependency_job_id":null,"html_url":"https://github.com/gwuhaolin/chrome-render","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwuhaolin%2Fchrome-render","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwuhaolin%2Fchrome-render/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwuhaolin%2Fchrome-render/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwuhaolin%2Fchrome-render/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gwuhaolin","download_url":"https://codeload.github.com/gwuhaolin/chrome-render/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248991171,"owners_count":21194890,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["headless-chrome","server-rendering"],"created_at":"2024-10-03T11:17:52.569Z","updated_at":"2025-04-15T01:40:22.945Z","avatar_url":"https://github.com/gwuhaolin.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Npm Package](https://img.shields.io/npm/v/chrome-render.svg?style=flat-square)](https://www.npmjs.com/package/chrome-render)\n[![Build Status](https://img.shields.io/travis/gwuhaolin/chrome-render.svg?style=flat-square)](https://travis-ci.org/gwuhaolin/chrome-render)\n[![Npm Downloads](http://img.shields.io/npm/dm/chrome-render.svg?style=flat-square)](https://www.npmjs.com/package/chrome-render)\n[![Dependency Status](https://david-dm.org/gwuhaolin/chrome-render.svg?style=flat-square)](https://npmjs.org/package/chrome-render)\n\n# chrome-render\nHigh-performance and universal server render base on [Headless chrome](https://www.chromestatus.com/feature/5678767817097216), render any SPA(render data in browser) in server for [SEO](https://github.com/gwuhaolin/koa-seo) or [other optimizes](https://github.com/gwuhaolin/koa-chrome-render). \n\n## Use\n1. install it from npm by `npm i chrome-render`\n\n2. new a `ChromeRender` then use it to `render` a web page, a `ChromeRender` means a chrome.\n```js\nconst ChromeRender = require('chrome-render');\n// ChromeRender.new() return a Promise, you can use async function in this way:\n// const chromeRender = await ChromeRender.new(); \nChromeRender.new({}).then(async(chromeRender)=\u003e{\n    const htmlString = await chromeRender.render({\n       url: 'http://qq.com',\n    });\n});    \n```\n\u003e A `chromeRender` instance can call `render` multi-times and concurrent for high frequency use case.\n\u003e `chromeRender` will manage a tabs pool to `render` multi-pages concurrent.\n\n3. After you don't need chromeRender anymore, you should call `await chromeRender.destroyRender()` to kill chrome add release all resource.\n\nsee more demo in [unit test](test/index.test.js)\n\n## API\n#### `ChromeRender.new()` method support options:\n- `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. \n- `chromeRunnerOptions`: `object` same as chrome-runner's options, can config chrome's startup options, detail see [chrome-runner options](https://github.com/gwuhaolin/chrome-runner#options)\n\n#### `chromeRender.render()` method support options:\n- `url`: `string` is required, web page's URL \n- `cookies`: `object {cookieName:cookieValue}` is an option param. set HTTP cookies when request web page\n- `headers`: `object {headerName:headerValue}` is an option param. add HTTP headers when request web page\n- `useReady`: `boolean` whether use `window.isPageReady=1` to notify chrome-render page is ready. default is false chrome-render use `domContentEventFired` as page has ready.\n- `script`: `string` is an option param. inject script source to evaluate when page on load\n- `renderTimeout`: `number` in ms, `render()` will throw error if html string can't be resolved after `renderTimeout`, default is 5000ms.\n- `deviceMetricsOverride`: `object` overrides the values of device screen dimensions for responsive websites, detail use see [here](https://chromedevtools.github.io/devtools-protocol/tot/Emulation/#method-setDeviceMetricsOverride)\n- `clearTab`: `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.\n\n\u003e all request from chrome-render will take with a HTTP header `x-chrome-render:${version}`\n \n## Friends\n- chrome-render dependent on [chrome-pool](https://github.com/gwuhaolin/chrome-pool) headless chrome tabs manage pool.\n- [chrome-runner](https://github.com/gwuhaolin/chrome-runner) run chrome with nodejs in code.\n- [koa-chrome-render](https://github.com/gwuhaolin/koa-chrome-render) chrome-render middleware for koa.\n- [koa-seo](https://github.com/gwuhaolin/koa-seo) SEO middleware for koa base on chrome-render substitute for [prerender](https://prerender.io).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgwuhaolin%2Fchrome-render","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgwuhaolin%2Fchrome-render","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgwuhaolin%2Fchrome-render/lists"}