Как ускорить рендеринг docpad?
Я изменяю только пару страниц, но DocPad, кажется, отрисовывает все снова. Я не использую какие-либо модные плагины или динамические компоненты - просто базовый шаблон-призрак. Существуют ли методы, позволяющие сделать меньше страниц визуализируемыми?
может быть, это как-то связано с форматом отметки времени в docpad.coffee?
moment = require('moment')
docpadConfig = {
templateData:
vars:
appserver: 'http://xxx'
site:
title: 'Pocket Tutor'
tagline: 'English language chat tutor'
description: 'Learn english by chatting'
logo: '/uploads/images/corpid/comiceng/96/logo-96.png'
url: 'http://app:9005'
cover: '/img/cover.jpg'
navigation: [
{
name: 'Home',
href: '/',
section: 'home'
},
{
name: 'About',
href: '/about.html',
section: 'about'
},
{
name: 'Lessons',
href: '/tags/lessons.html',
section: 'tag-lessons'
},
{
name: 'Grammar',
href: '/tags/grammar.html',
section: 'tag-grammar'
}
{
name: 'Teachers',
href: '/tags/tech.html',
section: 'tag-tech'
},
]
author:
name: 'Rikai Labs'
img: ''
url: 'http://rikai.co'
website: 'http://RIKAI.co'
location: 'space',
bio: 'we build chat apps'
getPreparedTitle: -> if @document.title then "#{@document.title} | #{@site.title}" else @site.title
getDescription: -> if @document.description then "#{@document.description} | #{@site.description}" else @site.description
bodyClass: -> if @document.isPost then "post-template" else "home-template"
masthead: (d) ->
d = d || @document
if d.cover then d.cover else @site.cover
isCurrent: (l) ->
if @document.section is l.section then ' nav-current'
else if @document.url is l.href then ' nav-current'
else ''
excerpt: (p,w) ->
w = w || 26
if p.excerpt then p.excerpt else p.content.replace(/<%.+%>/gi, '').split(' ').slice(0, w).join(' ')
encode: (s) -> encodeURIComponent(s)
slug: (s) -> return s.toLowerCase().replace(' ', '-')
currentYear: -> new Date().getFullYear()
time: (ts, format) ->
format = format || 'MMMM DO, YYYY'
ts = new Date(ts) || new Date()
moment(ts).format(format)
collections:
posts: ->
@getCollection("html").findAllLive({active:true, isPost: true, isPagedAuto: {$ne: true}}, {postDate: -1}).on "add", (model) ->
model.setMetaDefaults({layout:"post"})
plugins:
tags:
extension: '.html'
injectDocumentHelper: (doc) ->
doc.setMeta { layout: 'tag' }
rss:
default:
collection: 'posts'
url: '/rss.xml'
marked:
gfm: true
environments: # default
development: # default
# Always refresh from server
maxAge: false # default
# Only do these if we are running standalone via the `docpad` executable
checkVersion: process.argv.length >= 2 and /docpad$/.test(process.argv[1]) # default
welcome: process.argv.length >= 2 and /docpad$/.test(process.argv[1]) # default
prompts: process.argv.length >= 2 and /docpad$/.test(process.argv[1]) # default
# Listen to port 9005 on the development environment
port: 9005 # example
production:
port: 9005
maxAge: false # default
}
module.exports = docpadConfig
обновление: удаление даты и времени
time: -> 'time'
currentYear: -> 'year'
дает небольшую скорость, но все же одно редактирование одного файла дает информацию:
Generated 40/150 files in 7.364 seconds
обновление2: добавлено
standalone: true
на некоторых страницах для тестирования, но все равно принимает информацию: Сгенерировано 40/150 файлов за 7,252 секунды
так что даже одна отдельная страница вызывает кучу других вещей.
1 ответ
Возможно управление процессом регенерации Docpad вручную. Для этого вам нужно выключить часы Docpad. То есть запустите Docpad с docpad server
команда. Здесь произойдет то, что не имеет значения, сколько раз вы редактируете документ, он не будет загружен в коллекцию документов. Затем вам нужно будет загрузить любые обновления вручную. То есть, есть код для загрузки документа.
model = @docpad.getCollection('posts').findOne({someValue: someValue})
model.load()
После этого запускаем регенерацию.
@docpad.action 'generate', reset: false, (err) ->
if err
@docpad.log "warn", "GENERATE ERROR"
Это то, что я делаю в своем плагине
Я подозреваю, что это не совсем то, о чем вы просите, но это дает вам полный контроль над процессом регенерации.