86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
```go title="simple_benchmark.go"
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
"time"
|
|
|
|
"kreuzberg"
|
|
)
|
|
|
|
func main() {
|
|
config := &kreuzberg.ExtractionConfig{
|
|
UseCache: false,
|
|
}
|
|
client, err := kreuzberg.New(config)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer client.Close()
|
|
|
|
filePath := "document.pdf"
|
|
numRuns := 10
|
|
|
|
fmt.Printf("Sync extraction (%d runs):\n", numRuns)
|
|
start := time.Now()
|
|
for i := 0; i < numRuns; i++ {
|
|
_, err := client.ExtractFile(filePath)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
syncDuration := time.Since(start).Seconds()
|
|
avgSync := syncDuration / float64(numRuns)
|
|
fmt.Printf(" - Total time: %.3fs\n", syncDuration)
|
|
fmt.Printf(" - Average: %.3fs per extraction\n", avgSync)
|
|
|
|
fmt.Printf("\nAsync extraction (%d parallel runs):\n", numRuns)
|
|
start = time.Now()
|
|
var wg sync.WaitGroup
|
|
wg.Add(numRuns)
|
|
for i := 0; i < numRuns; i++ {
|
|
go func() {
|
|
defer wg.Done()
|
|
_, err := client.ExtractFile(filePath)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
asyncDuration := time.Since(start).Seconds()
|
|
fmt.Printf(" - Total time: %.3fs\n", asyncDuration)
|
|
fmt.Printf(" - Average: %.3fs per extraction\n", asyncDuration/float64(numRuns))
|
|
fmt.Printf(" - Speedup: %.1fx\n", syncDuration/asyncDuration)
|
|
|
|
cacheConfig := &kreuzberg.ExtractionConfig{
|
|
UseCache: true,
|
|
}
|
|
clientCached, err := kreuzberg.New(cacheConfig)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer clientCached.Close()
|
|
|
|
fmt.Println("\nFirst extraction (populates cache)...")
|
|
start = time.Now()
|
|
_, err = clientCached.ExtractFile(filePath)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
firstDuration := time.Since(start).Seconds()
|
|
fmt.Printf(" - Time: %.3fs\n", firstDuration)
|
|
|
|
fmt.Println("Second extraction (from cache)...")
|
|
start = time.Now()
|
|
_, err = clientCached.ExtractFile(filePath)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
cachedDuration := time.Since(start).Seconds()
|
|
fmt.Printf(" - Time: %.3fs\n", cachedDuration)
|
|
fmt.Printf(" - Cache speedup: %.1fx\n", firstDuration/cachedDuration)
|
|
}
|
|
```
|