Don't use input.count in PrefixThrough and PrefixUpTo for speedup. #354
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I have made a simple HTML tokenizer and noticed using Instruments that
PrefixThrough
was spending a lot of time inSubstring.count
, which in turn was callingdistance(from:to:)
. I assume this is because the character count of a substring isn't known until calculated due to how Unicode works. This patch replaces the substring count check with a match end index check instead.I was unable to make sense of the results from the benchmark app, but in my HTML project (link provided) there was a substantial speedup. In that repo there is a benchmark app in the branch
swift-parsing
, and you can switch between swift-parsing versions inPackage.swift
.https://github.com/BjornRuud/HTMLLexer.git