Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
Intl.collator O(N*M) vs native String.prototype.includes O(N+M)ы
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36
Browser:
Chrome 135
Operating system:
Mac OS X 10.15.7
Device Platform:
Desktop
Date tested:
one year ago
Test name
Executions per second
native String.prototype.includes O(N+M)
9962.9 Ops/sec
Intl.collator O(N*M)
1213.0 Ops/sec
HTML Preparation code:
<!--your preparation HTML code goes here-->
Script Preparation code:
let regions = [ '1. Австралия — Канберра ', '2. Австрия — Вена ', '3. Азербайджан — Баку ', '4. Албания — Тирана ', '5. Алжир — Алжир ', '6. Андорра — Андорра-ла-Велья ', '7. Ангола — Луанда ', '8. Антигуа и Барбуда — Сент-Джонс ', '9. Аргентина — Буэнос-Айрес ', '10. Армения — Ереван ', '11. Афганистан — Кабул ', '12. Багамские Острова — Нассау ', '13. Бангладеш — Дакка ', '14. Барбадос — Бриджтаун ', '15. Бахрейн — Манама ', '16. Белиз — Бельмопан ', '17. Беларусь — Минск ', '18. Бельгия — Брюссель ', '19. Бенин — Порто-Ново ', '20. Бутан — Тхимпху ', '21. Болгария — София ', '22. Боливия — Сукре (конституционная), Ла-Пас (админ.) ', '23. Босния и Герцеговина — Сараево ', '24. Ботсвана — Габороне ', '25. Бразилия — Бразилиа ', '26. Бруней — Бандар-Сери-Бегаван ', '27. Буркина-Фасо — Уагадугу ', '28. Бурунди — Гитега ', '29. Вануату — Порт-Вила ', '30. Ватикан — Ватикан ', '31. Великобритания — Лондон ', '32. Венгрия — Будапешт ', '33. Венесуэла — Каракас ', '34. Восточный Тимор — Дили ', '35. Вьетнам — Ханой ', '36. Габон — Либревиль ', '37. Гаити — Порт-о-Пренс ', '38. Гайана — Джорджтаун ', '39. Гамбия — Банджул ', '40. Гана — Аккра ', '41. Гватемала — Гватемала ', '42. Гвинея — Конакри ', '43. Гвинея-Бисау — Бисау ', '44. Германия — Берлин ', '45. Гондурас — Тегусигальпа ', '46. Гренада — Сент-Джорджес ', '47. Греция — Афины ', '48. Грузия — Тбилиси ', '49. Дания — Копенгаген ', '50. Джибути — Джибути ', '51. Доминика — Розо ', '52. Доминиканская Республика — Санто-Доминго ', '53. Египет — Каир ', '54. Замбия — Лусака ', '55. Зимбабве — Хараре ', '56. Израиль — Иерусалим ', '57. Индия — Нью-Дели ', '58. Индонезия — Джакарта ', '59. Иордания — Амман ', '60. Ирак — Багдад ', '61. Иран — Тегеран ', '62. Ирландия — Дублин ', '63. Исландия — Рейкьявик ', '64. Испания — Мадрид ', '65. Италия — Рим ', '66. Йемен — Сана ', '67. Кабо-Верде — Прая ', '68. Казахстан — Астана ', '69. Камбоджа — Пномпень ', '70. Камерун — Яунде ', '71. Канада — Оттава ', '72. Катар — Доха ', '73. Кения — Найроби ', '74. Кипр — Никосия ', '75. Киргизия — Бишкек ', '76. Кирибати — Южная Тарава ', '77. Китай — Пекин ', '78. Колумбия — Богота ', '79. Коморы — Морони ', '80. Конго (Республика Конго) — Браззавиль ', '81. Конго, Демократическая Республика — Киншаса ', '82. Корея, Северная — Пхеньян ', '83. Корея, Южная — Сеул ', '84. Коста-Рика — Сан-Хосе ', '85. Кот-д’Ивуар — Ямусукро ', '86. Куба — Гавана ', '87. Кувейт — Эль-Кувейт ', '88. Лаос — Вьентьян ', '89. Латвия — Рига ', '90. Лесото — Масеру ', '91. Либерия — Монровия ', '92. Ливан — Бейрут ', '93. Ливия — Триполи ', '94. Литва — Вильнюс ', '95. Лихтенштейн — Вадуц ', '96. Люксембург — Люксембург ', '97. Маврикий — Порт-Луи ', '98. Мавритания — Нуакшот ', '99. Мадагаскар — Антананариву ', '100. Македония (Северная Македония) — Скопье ', '101. Малави — Лилонгве ', '102. Малайзия — Куала-Лумпур ', '103. Мали — Бамако ', '104. Мальдивы — Мале ', '105. Мальта — Валлетта ', '106. Марокко — Рабат ', '107. Маршалловы Острова — Маджуро ', '108. Мексика — Мехико ', '109. Микронезия — Паликир ', '110. Мозамбик — Мапуту ', '111. Молдавия — Кишинёв ', '112. Монако — Монако ', '113. Монголия — Улан-Батор ', '114. Мьянма — Нейпьидо ', '115. Намибия — Виндхук ', '116. Науру — Ярен ', '117. Непал — Катманду ', '118. Нигер — Ниамей ', '119. Нигерия — Абуджа ', '120. Нидерланды — Амстердам ', '121. Никарагуа — Манагуа ', '122. Новая Зеландия — Веллингтон ', '123. Норвегия — Осло ', '124. Объединённые Арабские Эмираты — Абу-Даби ', '125. Оман — Маскат ', '126. Пакистан — Исламабад ', '127. Палау — Нгерулмуд ', '128. Палестина — Рамаллах, Восточный Иерусалим (заявлены) ', '129. Панама — Панама ', '130. Папуа — Новая Гвинея — Порт-Морсби ', '131. Парагвай — Асунсьон ', '132. Перу — Лима ', '133. Польша — Варшава ', '134. Португалия — Лиссабон ', '135. Республика Кот-д’Ивуар — Ямусукро ', '136. Республика Косово — Приштина ', '137. Россия — Москва ', '138. Руанда — Кигали ', '139. Румыния — Бухарест ', '140. Сальвадор — Сан-Сальвадор ', '141. Самоа — Апиа ', '142. Сан-Марино — Сан-Марино ', '143. Сан-Томе и Принсипи — Сан-Томе ', '144. Саудовская Аравия — Эр-Рияд ', '145. Северная Македония — Скопье ', '146. Сейшельские Острова — Виктория ', '147. Сенегал — Дакар ', '148. Сент-Винсент и Гренадины — Кингстаун ', '149. Сент-Китс и Невис — Бастер ', '150. Сент-Люсия — Кастри ', '151. Сербия — Белград ', '152. Сингапур — Сингапур ', '153. Сирия — Дамаск ', '154. Словакия — Братислава ', '155. Словения — Любляна ', '156. Соединённые Штаты Америки — Вашингтон ', '157. Соломоновы Острова — Хониара ', '158. Сомали — Могадишо ', '159. Судан — Хартум ', '160. Южный Судан — Джуба ', '161. Суринам — Парамарибо ', '162. Сьерра-Леоне — Фритаун ', '163. Таджикистан — Душанбе ', '164. Таиланд — Бангкок ', '165. Танзания — Додома ', '166. Того — Ломе ', '167. Тонга — Нукуалофа ', '168. Тринидад и Тобаго — Порт-оф-Спейн ', '169. Тувалу — Фунафути ', '170. Тунис — Тунис ', '171. Туркмения — Ашхабад ', '172. Турция — Анкара ', '173. Уганда — Кампала ', '174. Узбекистан — Ташкент ', '175. Украина — Киев ', '176. Уругвай — Монтевидео ', '177. Фиджи — Сува ', '178. Филиппины — Манила ', '179. Финляндия — Хельсинки ', '180. Франция — Париж ', '181. Хорватия — Загреб ', '182. Центральноафриканская Республика — Банги ', '183. Чад — Нджамена ', '184. Черногория — Подгорица ', '185. Чехия — Прага ', '186. Чили — Сантьяго ', '187. Швейцария — Берн ', '188. Швеция — Стокгольм ', '189. Шри-Ланка — Шри-Джаяварденепура-Котте, Коломбо (адм.) ', '190. Эквадор — Кито ', '191. Экваториальная Гвинея — Малабо ', '192. Эритрея — Асмэра ', '193. Эстония — Таллин ', '194. Эсватини — Мбабане, Лобамба (парламент.) ', '195. Эфиопия — Аддис-Абеба ', '196. Южно-Африканская Республика — Претория (исп.); Кейптаун (законодат.); Блумфонтейн (судебная) ', '197. Южный Судан — Джуба ', '198. Ямайка — Кингстон ', '199. Япония — Токио', ]; async function globalMeasureThatScriptPrepareFunction() { // This function is optional, feel free to remove it. // await someThing(); }
Tests:
native String.prototype.includes O(N+M)
const CONVERTER = { // Казахский алфавит қ: 'к', ғ: 'г', ң: 'н', ү: 'у', ұ: 'у', һ: 'х', ө: 'о', і: 'i', // Турецкий алфавит ı: 'i', }; const converterPattern = Object.keys(CONVERTER) .map(ch => ch.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')) // эскейпим для regexp .join(''); const NEEDS_TRANSLITERATION_REGEXP = new RegExp(`[\\u0300-\\u036f${converterPattern ? converterPattern : ''}]`, 'i'); const transliterateAndNormalize = (str) => { const normalizedStr = str.toLowerCase().normalize('NFD'); if (!NEEDS_TRANSLITERATION_REGEXP.test(normalizedStr)) { return normalizedStr; } return normalizedStr .split('') .map(char => CONVERTER[char] ?? char) .filter(char => !char.match(/[\u0300-\u036f]/)) // Убираем диакритические знаки .join(''); }; const includesSubString = (haystack, needle) => { /** Простейшие оптимизации */ if (needle.length > haystack.length) { return false; } if (haystack.toLowerCase().includes(needle.toLowerCase())) { return true; } const normalizedHaystack = transliterateAndNormalize(haystack); const normalizedNeedle = transliterateAndNormalize(needle); return normalizedHaystack.includes(normalizedNeedle); }; for (const region of regions) { includesSubString(region, 'turkey'); }
Intl.collator O(N*M)
function includesSubString(haystack, needle, locale = undefined, options = { sensitivity: 'base' }) { if (!needle) return true; // пустая строка считается подстрокой любой const collator = new Intl.Collator(locale, options); // Разбиваем исходную строку на символы (code points), чтобы корректно обрабатывать суррогатные пары const letters = Array.from(haystack); for (let i = 0; i <= letters.length - needle.length; i++) { const part = letters.slice(i, i + Array.from(needle).length).join(''); } return false; } for (const region of regions) { includesSubString(region, 'turkey'); }