2016-01-12 2 views
0

Я меняю только пару страниц, но docpad, кажется, все делает. Я не использую никаких причудливых плагинов или динамических компонентов - просто базовый шаблон-призрак. Существуют ли какие-то методы, чтобы сделать меньше страниц рендерингом?как ускорить рендеринг docpad?

Возможно, что-то связано с форматом timestamp в 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 

Update2: добавлена ​​

standalone: true 

на некоторые страницы, чтобы проверить, но все равно принимает info: Сгенерировано 40/150 файлов за 7.252 секунд

так что даже отдельная отдельная страница запускает кучу других вещей.

ответ

0

Можно обрабатывать процесс регенерации Docpad вручную. Для этого вам нужно отключить часы Docpad. То есть запустите Docpad с помощью команды docpad server. Что будет здесь, так это то, что неважно, сколько раз вы редактируете документ, он не будет загружен в коллекцию docpad. Затем вам придется загружать все обновления вручную. То есть, есть некоторый код для загрузки документа.

model = @docpad.getCollection('posts').findOne({someValue: someValue}) 
model.load() 

После этого запускается регенерация.

@docpad.action 'generate', reset: false, (err) -> 
    if err 
     @docpad.log "warn", "GENERATE ERROR" 

Это то, что я в моем posteditor plugin

Я подозреваю, что это не совсем то, что вы просите, но это даст вам полный контроль над процессом регенерации.