Implemented wait in generate function so generation of dynamic routes with ajax calls are not all sceduled simultaneously, possibly flooding the data backend with queries.

Use generate.wait (ms) to stagger route generate calls over time.

Fixes #590.
This commit is contained in:
johan.roxendal@gu.se 2017-04-24 10:30:05 +02:00
parent 8cbdf77c34
commit afa2e6b05c
2 changed files with 19 additions and 1 deletions

View File

@ -89,11 +89,28 @@ export default function () {
this.routes.push(route) this.routes.push(route)
} }
}) })
var n = 0
function timer () {
let promise = new Promise(
(resolve, reject) => {
setTimeout( () => {
resolve()
}, self.options.generate.wait * n)
}
)
n++
return promise
}
let routes = this.routes let routes = this.routes
return co(function * () { return co(function * () {
while (routes.length) { while (routes.length) {
yield routes.splice(0, 500).map((route) => { yield routes.splice(0, 500).map((route) => {
return co(function * () { return co(function * () {
if(self.options.generate.wait) {
yield timer()
}
var { html } = yield self.renderRoute(route, { _generate: true }) var { html } = yield self.renderRoute(route, { _generate: true })
html = minify(html, self.options.generate.minify) html = minify(html, self.options.generate.minify)
var path = join(route, sep, 'index.html') // /about -> /about/index.html var path = join(route, sep, 'index.html') // /about -> /about/index.html

View File

@ -4,6 +4,7 @@ module.exports = {
'/users/1', '/users/1',
'/users/2', '/users/2',
'/users/3' '/users/3'
] ],
wait : 1000
} }
} }