Implement dictionary data serialization to improve startup times

main
Elnu 2 years ago
parent 3d21311f12
commit 91fb5d9e3b

1
dict/.gitignore vendored

@ -1 +1,2 @@
JMdict.xml JMdict.xml
dict.bin

@ -1,6 +1,7 @@
package main package main
import ( import (
"encoding/gob"
"encoding/json" "encoding/json"
"fmt" "fmt"
"log" "log"
@ -16,6 +17,21 @@ import (
var dict map[string]Entry var dict map[string]Entry
func LoadDict() error { func LoadDict() error {
// Loading from binary
const binaryFile = "dict.bin"
file, err := os.Open(binaryFile)
if err != nil {
if !os.IsNotExist(err) {
return err
}
} else {
defer file.Close()
decoder := gob.NewDecoder(file)
err = decoder.Decode(&dict)
return err
}
// Loading from JMdict
const jmdictFile = "JMdict.xml" const jmdictFile = "JMdict.xml"
reader, err := os.Open(jmdictFile) reader, err := os.Open(jmdictFile)
if err != nil { if err != nil {
@ -30,6 +46,19 @@ func LoadDict() error {
entry := ParseEntry(&jmdictEntry) entry := ParseEntry(&jmdictEntry)
dict[entry.Kanji] = entry dict[entry.Kanji] = entry
} }
// Encoding to binary
file, err = os.Create(binaryFile)
if err != nil {
return err
}
defer file.Close()
encoder := gob.NewEncoder(file)
err = encoder.Encode(&dict)
if err != nil {
return err
}
return nil return nil
} }