Skip to content

Commit 7011d36

Browse files
author
839536
committed
[更新] 优化Puppeteer性能与提升执行速度
1 parent 1a2a0bb commit 7011d36

File tree

4 files changed

+70
-44
lines changed

4 files changed

+70
-44
lines changed

bin/config.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@
22
"logs" : "/Volumes/Angela.Fang/Phoebe/uTorrent/logs",
33
"port" : 7003,
44
"debug" : true,
5-
"token" : false
5+
"token" : false,
6+
"size" : 4,
7+
"ignore" : true
68
}

src/app/bootstrap.class.js

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
import Net from 'net';
2-
import Path from 'path';
3-
4-
import Koa from 'koa';
5-
import Cors from 'koa-cors';
6-
import KoaLogger from 'koa-logger';
7-
import KoaConvert from 'koa-convert';
8-
import KoaFavicon from 'koa-favicon';
9-
import KoaBetterBody from 'koa-better-body';
10-
11-
import DefaultConfig from './feature/config/clazz/default.config.class';
12-
13-
import Logger from './frames/core/logger.core.class';
14-
import Service from './frames/core/service.core.class';
15-
import Controller from './frames/core/controller.core.class';
16-
import Router from './frames/core/router.core.class';
17-
18-
import AbstractService from './frames/base/service.base.class';
19-
import AbstractController from './frames/base/controller.base.class';
20-
import AbstractRouter from './frames/base/router.base.class';
21-
import Unify from "./shared/utils/unify.utils.class";
22-
import Result from "./shared/term/result.term.class";
23-
1+
import Net from 'net';
2+
import Path from 'path';
3+
4+
import Koa from 'koa';
5+
import Cors from 'koa-cors';
6+
import KoaLogger from 'koa-logger';
7+
import KoaConvert from 'koa-convert';
8+
import KoaFavicon from 'koa-favicon';
9+
import KoaBetterBody from 'koa-better-body';
10+
11+
import DefaultConfig from './feature/config/clazz/default.config.class';
12+
13+
import Logger from './frames/core/logger.core.class';
14+
import Service from './frames/core/service.core.class';
15+
import Controller from './frames/core/controller.core.class';
16+
import Router from './frames/core/router.core.class';
17+
18+
import AbstractService from './frames/base/service.base.class';
19+
import AbstractController from './frames/base/controller.base.class';
20+
import AbstractRouter from './frames/base/router.base.class';
21+
import Unify from "./shared/utils/unify.utils.class";
22+
import Render from "./shared/utils/render.utils.class";
23+
import Result from "./shared/term/result.term.class";
2424

2525
export default class Bootstrap {
2626

@@ -41,6 +41,7 @@ export default class Bootstrap {
4141
this._xRouter();
4242
this._xResource();
4343
this._xServer();
44+
this._xBrowser();
4445
logger.trace('Server Start Total Cost : ' + (new Date() - this.startTime) + 'ms');
4546
logger.trace('Current Service Version : ' + config.Version);
4647
}
@@ -84,7 +85,6 @@ export default class Bootstrap {
8485
}
8586

8687
_xBetterBody() {
87-
// this.koa.use(new KoaBodyParser());
8888
this.koa.use(KoaConvert(KoaBetterBody({
8989
multipart: true,
9090
formLimit: '500kb'
@@ -151,4 +151,14 @@ export default class Bootstrap {
151151
logger.trace('Finish Load Handle');
152152
}
153153

154+
async _xBrowser() {
155+
logger.trace('Chromium start is : ' + config.size);
156+
let render = [];
157+
for (let i = 0; i < config.size; i++) {
158+
render[i] = await Render.init();
159+
}
160+
global.browser = render;
161+
logger.trace('Chromium start is : ' + config.size);
162+
}
163+
154164
}

src/app/feature/config/clazz/default.config.class.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ export default class DefaultConfig {
99
this.RootPath = rootPath + '/app';
1010
this.setPathConfig();
1111
this.setEnvConfig();
12-
this.setDialectConfig();
1312
this.setServerConfig();
1413
}
1514

@@ -34,12 +33,10 @@ export default class DefaultConfig {
3433
}
3534
}
3635

37-
setDialectConfig() {
38-
this.dialect = this.objConfig.dialect;
39-
}
40-
4136
setServerConfig() {
4237
this.Port = this.objConfig.port;
38+
this.size = this.objConfig.size;
39+
this.ignore = this.objConfig.ignore;
4340
}
4441

4542
}

src/app/shared/utils/render.utils.class.js

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,29 @@
1-
import puppeteer from 'puppeteer';
2-
import _ from 'lodash';
3-
import _C from '../../shared/term/criteria.term.class';
1+
import puppeteer from 'puppeteer';
2+
import _ from 'lodash';
3+
import _C from '../../shared/term/criteria.term.class';
44

55
export default class Render {
66

7+
static async init() {
8+
const browser = await puppeteer.launch({
9+
headless: config.debug,
10+
ignoreHTTPSErrors: config.ignore,
11+
args: [
12+
'--disable-gpu',
13+
'--disable-dev-shm-usage',
14+
'--disable-setuid-sandbox',
15+
'--no-first-run',
16+
'--no-sandbox',
17+
'--no-zygote',
18+
'--single-process',
19+
"--proxy-server='direct://'",
20+
'--proxy-bypass-list=*',
21+
],
22+
sloMo: config.debug ? 250 : undefined
23+
});
24+
return browser.wsEndpoint();
25+
}
26+
727
/**
828
* 根据参数信息,获取内容,生成文件
929
*
@@ -44,18 +64,15 @@ export default class Render {
4464
opts
4565
}));
4666

47-
const browser = await puppeteer.launch({
48-
headless: config.debug,
49-
ignoreHTTPSErrors: opts.ignoreHttpsErrors,
50-
args: ['--disable-gpu', '--no-sandbox', '--disable-setuid-sandbox'],
51-
sloMo: config.debug ? 250 : undefined
52-
});
53-
const page = await browser.newPage();
67+
let browserWSEndpoint = browser[Math.floor(Math.random() * config.size)];
68+
const chrome = await puppeteer.connect({browserWSEndpoint});
69+
logger.trace('RENDER => browserWSEndpoint connect ...'+ Math.floor(Math.random() * config.size));
70+
const page = await chrome.newPage();
5471

5572
page.on('error', (err) => {
5673
logger.error(`RENDER => Error event emitted: ${err}`);
5774
logger.error(err.stack);
58-
browser.close();
75+
page.close();
5976
});
6077

6178

@@ -79,7 +96,7 @@ export default class Render {
7996

8097
let data;
8198
try {
82-
logger.trace('RENDER => Set browser viewport ..');
99+
logger.trace('RENDER => Set chrome viewport ..');
83100
await page.setViewport(opts.viewport);
84101
if (opts.emulateScreenMedia) {
85102
logger.trace('RENDER => Emulate @media screen ..');
@@ -154,8 +171,8 @@ export default class Render {
154171
logger.error(err.stack);
155172
throw err;
156173
} finally {
157-
logger.trace('RENDER <= Closing browser..');
158-
await browser.close();
174+
logger.trace('RENDER <= Closing page..');
175+
await page.close();
159176
}
160177
return data;
161178
}

0 commit comments

Comments
 (0)