Ref: #1379 This takes a naive approach to font-width computation, the most compute-intensive part of rendering badges. 1. Add the widths of the individual characters. - These widths are measured on startup using PDFKit. 2. For each character pair, add a kerning adjustment - The difference between the width of each character pair, and the sum of the characters' separate widths. - These are computed for each character pair on startup using PDFKit. 3. For a string with characters outside the printable ASCII character set, fall back to PDFKit. This branch averaged 0.041 ms in `makeBadge`, compared to 0.144 ms on master, a speedup of 73%. That was on a test of 10,000 consecutive requests (using the `benchmark-performance.sh` script, now checked in). The speedup applies to badges containing exclusively printable ASCII characters. It wouldn't be as dramatic on non-ASCII text. Though, we could add some frequently used non-ASCII characters to the cached set.
12 lines
299 B
Bash
Executable File
12 lines
299 B
Bash
Executable File
#!/bin/sh
|
|
|
|
PROFILE_MAKE_BADGE=1 node server 1111 >perftest.log &
|
|
sleep 2
|
|
for ((i=0;i<10000;i++)); do
|
|
curl -s http://localhost:1111/badge/coverage-"$i"%-green.svg >/dev/null
|
|
done
|
|
kill $(jobs -p)
|
|
<perftest.log grep 'makeBadge total' | \
|
|
grep -Eo '[0-9\.]+' | \
|
|
awk '{s+=$1;n++} END {print s/n}'
|