【问题标题】:How to speed up bookdown generation?如何加快 bookdown 的生成?
【发布时间】:2019-10-25 17:43:20
【问题描述】:

我目前正在使用 bookdown 编写一本书。它使用一些需要时间来编译、执行和获取输出的代码 sn-ps。我使用以下命令为这本书构建 HTML、PDF 和 EPUB 文件:

Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::gitbook')"
Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::pdf_book')"
Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::epub_book')"

因此,每次生成书籍文件时,都会进行实际计算,从而增加总生成时间 ×3。

有什么方法可以在第一次运行时生成一些中间文件,然后用它来构建 HTML、PDF 和 EPUB 输出?

【问题讨论】:

标签: r r-markdown knitr bookdown


【解决方案1】:

通过将以下 sn-p 添加到我的index.Rmd,我设法显着减少了重新生成时间:

```{r include=FALSE}
knitr::opts_chunk$set(cache = TRUE)
```

更新:

正如Yuriy BarvinchenkoYihui Xie 都建议的那样,最好是cache only time-consuming 代码块:

```{go time-sleep-demo cache = TRUE}
package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Print("Hello ")
    time.Sleep(10 * time.Second)
    fmt.Println("world!")
}
```

【讨论】:

  • 我建议你只缓存那些耗时的代码块而不是所有的代码块,因为缓存没有免费的午餐,例如yihui.name/en/2018/06/cache-invalidation
  • @YihuiXie,感谢您的澄清。我的“书”实际上是 Go 编程语言的学习课程内容,所以我相信缓存所有“Hello, world!”、Fibonacci 和(尤其是)time.Sleep 代码 sn-ps 并没有什么坏处。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 2017-06-16
相关资源
最近更新 更多