larkery / zsh-histdb

A slightly better history for zsh
MIT License
1.25k stars 74 forks source link

Improve performance #102

Closed Aloxaf closed 2 years ago

Aloxaf commented 3 years ago

This project is cool!

My PR aims to improve its performance with some simple tricks.

  1. Avoid calling the external program, like sed, dirname
  2. Avoid creating the subshell: $(...)

Benchmark

❯ diff <(sql_escape_old $'\'Hello\'\x00\'\'World\'') <(sql_escape_new $'\'Hello\'\x00\'\'World\'')
❯ time ( repeat 500 sql_escape_old $'\'Hello\'\x00\'\'World\'' > /dev/null )
( repeat 500; do; sql_escape_old $'\'Hello\'\x00\'\'World\'' > /dev/null; done
 User: 1.59s    System: 0.66s  Total: 1.567s
 CPU:  143%     Mem:    13 MB
❯ time ( repeat 500 sql_escape_new $'\'Hello\'\x00\'\'World\'' > /dev/null )
( repeat 500; do; sql_escape_new $'\'Hello\'\x00\'\'World\'' > /dev/null; done
 User: 0.01s    System: 0.01s  Total: 0.023s
 CPU:  97%      Mem:    13 MB

❯ time ( repeat 500 echo $(date +%s) >/dev/null )
( repeat 500; do; echo $(date +%s) > /dev/null; done; )
 User: 0.42s    System: 0.24s  Total: 0.630s
 CPU:  104%     Mem:    14 MB
❯ time ( repeat 500 echo $EPOCHSECONDS >/dev/null )
( repeat 500; do; echo $EPOCHSECONDS > /dev/null; done; )
 User: 0.01s    System: 0.00s  Total: 0.006s
 CPU:  91%      Mem:    14 MB
larkery commented 2 years ago

This looks good but has some conflicts, I'll try and find a minute to fix it up.

Thanks