diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2015-08-02 14:00:18 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2015-08-02 14:00:18 +0900 |
| commit | 0ea66329b84cc6e4f8ff61ee99c00bb238070247 (patch) | |
| tree | 72c3bc62ec491246390b56b2aac5b33645839503 /src/reader.go | |
| parent | 634670e3ea51a2fa1498a3de0c074b819828e2d8 (diff) | |
| download | fzf-0ea66329b84cc6e4f8ff61ee99c00bb238070247.tar.gz | |
Performance tuning - eager rune array conversion
> wc -l /tmp/list2
2594098 /tmp/list2
> time cat /tmp/list2 | fzf-0.10.1-darwin_amd64 -fqwerty > /dev/null
real 0m5.418s
user 0m10.990s
sys 0m1.302s
> time cat /tmp/list2 | fzf-head -fqwerty > /dev/null
real 0m4.862s
user 0m6.619s
sys 0m0.982s
Diffstat (limited to 'src/reader.go')
| -rw-r--r-- | src/reader.go | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/reader.go b/src/reader.go index aab8b02a..d979eb6a 100644 --- a/src/reader.go +++ b/src/reader.go @@ -5,13 +5,14 @@ import ( "io" "os" "os/exec" + "unicode/utf8" "github.com/junegunn/fzf/src/util" ) // Reader reads from command or standard input type Reader struct { - pusher func(string) bool + pusher func([]rune) bool eventBox *util.EventBox delimNil bool } @@ -37,13 +38,25 @@ func (r *Reader) feed(src io.Reader) { } reader := bufio.NewReader(src) for { - line, err := reader.ReadString(delim) - if line != "" { - // "ReadString returns err != nil if and only if the returned data does not end in delim." + // ReadBytes returns err != nil if and only if the returned data does not + // end in delim. + bytea, err := reader.ReadBytes(delim) + if len(bytea) > 0 { + runes := make([]rune, 0, len(bytea)) + for i := 0; i < len(bytea); { + if bytea[i] < utf8.RuneSelf { + runes = append(runes, rune(bytea[i])) + i++ + } else { + r, sz := utf8.DecodeRune(bytea[i:]) + i += sz + runes = append(runes, r) + } + } if err == nil { - line = line[:len(line)-1] + runes = runes[:len(runes)-1] } - if r.pusher(line) { + if r.pusher(runes) { r.eventBox.Set(EvtReadNew, nil) } } |
