the `viewport` version is slightly more readable. Was using `p:viewport`  the bottleneck, or did it only come from using `tokenize` ?
Have you tried a `viewport` version without `tokenize` ?