大多数域名使用 ASCII 编码(例如,yahoo.com)。但是,您可以注册几乎包含任何字符的域名。例如,有一个网站位于.la称为 poopla。然而,底层基础设施基本上是纯 ASCII。为了使其正常工作,首先使用一种称为“ punycode ”的特殊编码将您域的文本翻译成 ASCII。 poopla 网站实际上位于https://xn--ls8h.la/ 。
Punycode 是一种棘手的格式。值得庆幸的是,域名是由标签组成的(例如,在 microsoft.com 中,microsoft 就是一个标签),每个标签最多可以使用 63 个字节。总的来说,一个域名不能超过 255 个字节,这是在必要时将其编码为 punycode 之后的结果。
前段时间,Colm MacCárthaigh 建议我看看 punycode 的性能影响。为了回答这个问题,我快速实现了一个功能来完成这项工作。它是一个没有大张旗鼓的单一功能。它大致源自标准中的代码,但对我来说看起来更简单。重要的是,我并不声称我的实施速度特别快。
作为数据集,我使用了 punycode 维基百科条目中的所有示例。
GCC 11,英特尔冰湖 | 75 纳秒/串 |
苹果 M2,LLVM 14 | 27 纳秒/串 |
它可能“足够快”并且 punycode 编码不太可能成为性能瓶颈。格式相对复杂,因此速度有限。尽管如此,应该可以走得更快。
原文: https://lemire.me/blog/2023/01/04/emojis-in-domain-names-punycode-and-performance/