Compare commits

...

2 Commits

Author SHA1 Message Date
Junegunn Choi f97d275413
0.50.0 2024-04-15 00:02:27 +09:00
Junegunn Choi 3acb4ca90e
Fix streaming filter mode by not running reader callback concurrently
Close #3728
2024-04-14 23:34:25 +09:00
7 changed files with 14 additions and 34 deletions

View File

@ -4,38 +4,13 @@ CHANGELOG
0.50.0
------
- Search performance optimization. You can observe 50%+ improvement in some scenarios.
```sh
$ time wc < $DATA
```
$ rg --line-number --no-heading --smart-case . > $DATA
$ wc < $DATA
5520118 26862362 897487793
real 0m1.320s
user 0m1.236s
sys 0m0.075s
$ time fzf --sync --bind load:abort < $DATA
real 0m0.479s
user 0m0.427s
sys 0m0.176s
$ hyperfine -w 1 -L bin fzf-0.49.0,fzf-7ce6452,fzf-a5447b8,fzf '{bin} --filter "///" < $DATA | head -30'
Benchmark 1: fzf-0.49.0 --filter "///" < $DATA | head -30
Time (mean ± σ): 2.002 s ± 0.024 s [User: 14.447 s, System: 0.300 s]
Range (min … max): 1.964 s … 2.042 s 10 runs
Benchmark 2: fzf-7ce6452 --filter "///" < $DATA | head -30
Time (mean ± σ): 1.627 s ± 0.019 s [User: 10.828 s, System: 0.271 s]
Range (min … max): 1.596 s … 1.651 s 10 runs
Benchmark 3: fzf-a5447b8 --filter "///" < $DATA | head -30
Time (mean ± σ): 1.524 s ± 0.025 s [User: 9.818 s, System: 0.269 s]
Range (min … max): 1.478 s … 1.569 s 10 runs
Benchmark 4: fzf --filter "///" < $DATA | head -30
Time (mean ± σ): 1.318 s ± 0.025 s [User: 8.005 s, System: 0.262 s]
Range (min … max): 1.282 s … 1.366 s 10 runs
Summary
fzf --filter "///" < $DATA | head -30 ran
1.16 ± 0.03 times faster than fzf-a5447b8 --filter "///" < $DATA | head -30
@ -60,6 +35,7 @@ CHANGELOG
```sh
fzf --bind 'space:jump,jump:accept,jump-cancel:transform:[[ $FZF_KEY =~ ctrl-c ]] && echo abort'
```
- fzf can be built with profiling options. See [BUILD.md](BUILD.md) for more information.
- Bug fixes
0.49.0

View File

@ -2,7 +2,7 @@
set -u
version=0.49.0
version=0.50.0
auto_completion=
key_bindings=
update_config=2

View File

@ -1,4 +1,4 @@
$version="0.49.0"
$version="0.50.0"
$fzf_base=Split-Path -Parent $MyInvocation.MyCommand.Definition

View File

@ -9,7 +9,7 @@ import (
"github.com/junegunn/fzf/src/protector"
)
var version string = "0.49"
var version string = "0.50"
var revision string = "devel"
//go:embed shell/key-bindings.bash

View File

@ -21,7 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
..
.TH fzf-tmux 1 "Apr 2024" "fzf 0.49.0" "fzf-tmux - open fzf in tmux split pane"
.TH fzf-tmux 1 "Apr 2024" "fzf 0.50.0" "fzf-tmux - open fzf in tmux split pane"
.SH NAME
fzf-tmux - open fzf in tmux split pane

View File

@ -21,7 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
..
.TH fzf 1 "Apr 2024" "fzf 0.49.0" "fzf - a command-line fuzzy finder"
.TH fzf 1 "Apr 2024" "fzf 0.50.0" "fzf - a command-line fuzzy finder"
.SH NAME
fzf - a command-line fuzzy finder

View File

@ -3,6 +3,7 @@ package fzf
import (
"fmt"
"sync"
"time"
"unsafe"
@ -164,14 +165,17 @@ func Run(opts *Options, version string, revision string) {
found := false
if streamingFilter {
slab := util.MakeSlab(slab16Size, slab32Size)
mutex := sync.Mutex{}
reader := NewReader(
func(runes []byte) bool {
item := Item{}
if chunkList.trans(&item, runes) {
mutex.Lock()
if result, _, _ := pattern.MatchItem(&item, false, slab); result != nil {
opts.Printer(item.text.ToString())
found = true
}
mutex.Unlock()
}
return false
}, eventBox, opts.ReadZero, false)