Če primerjamo posledice uspešnosti uporabe ujemanja matchers v primerjavi s surovimi vrednostmi, pride v poštev več dejavnikov, odvisno od konteksta, v katerem se uporabljajo. Tu je podrobna razčlenitev:
na splošno programiranje
Pri programiranju se matcherji pogosto uporabljajo pri testiranju okvirov, kot sta Mockito ali Googlest, za trditve ali metode škrbine. Pri uporabi Matchers morajo vse argumente predložiti Matchers, da se izognejo napakam, kot je `invalidUseOfMatcherSexception" v Mockito [5] [8]. Ta zahteva lahko privede do nekoliko več režijskih stroškov zaradi dodatnih klicev funkcije v primerjavi z neposredno uporabo surovih vrednosti.
Vendar je razlika v uspešnosti običajno zanemarljiva, razen če se ukvarjate z zelo velikim številom klicev ali v kritičnih odsekih kode. V večini primerov berljivost in prilagodljivost, ki jo zagotavljajo Matchers, odtehtata vse manjše stroške uspešnosti.
v iskanju in ujemanju operacij
V scenarijih, ki vključujejo iskalne operacije, na primer v Rustovih izražanjih "Match" v primerjavi z iskalnimi tabelami, se lahko zmogljivost razlikuje glede na več dejavnikov:
- Napoved podružnic: `Match` Izrazi so lahko hitrejši, če napoved veje dobro deluje, kar pomeni, da lahko CPU natančno napoveduje, katera veja bo naslednja. Če pa je vzorec naključen, je lahko tabela iskanja hitrejša, ker se izogne neuspehom pred napovedovanjem vej [3] [6].
- Inline in predpomnilnik: Tabele za iskanje je lahko hitrejše, če pravilno vgrajene in predpomnjene, zlasti za večje nabore podatkov. Vendar izrazi "Match" na splošno ustvarjajo manj navodil in so lahko hitrejši, razen če inlining povzroči mikroarhitekturne nevarnosti [3] [6].
v rednih izrazih in ujemanju vzorcev
Pri uporabi rednih izrazov (regex) za ujemanje vzorcev lahko na delovanje pomembno vpliva kompleksnost regexa in velikost obdelanih podatkov. Medtem ko je Regex močan in prilagodljiv, lahko preveč zapleteni vzorci vodijo do počasnejših zmogljivosti zaradi povratnih in drugih režijskih stroškov [9].
V nasprotju s tem je uporaba surovih vrednosti ali enostavnejših mehanizmov ujemanja hitrejša za preproste primerjave, vendar nima prožnosti in ekspresivnosti regexa.
V opazljivosti in podatkovnih sistemih
V sistemih, ki obravnavajo podatke o visoki kardalnosti (npr. Dnevniki, meritve, sledi), lahko uporaba Matchers ali zapletenih poizvedb vodi do težav z uspešnostjo. Visoka kardinalnost se nanaša na veliko število edinstvenih vrednosti, ki lahko preplavijo sisteme, zasnovane za učinkovito shranjevanje in iskanje podatkov [1]. V takih primerih lahko optimizacija poizvedb ali uporaba učinkovitejših podatkovnih struktur ublaži vplive učinkovitosti.
Če povzamemo, medtem ko matcherji in kompleksni mehanizmi ujemanja ponujajo fleksibilnost in berljivost, lahko v primerjavi z neposredno uporabo surovih vrednosti uvedejo manjše zmogljivosti. Vendar so ti režijski stroški običajno zanemarljivi, razen v razdelkih s kritično kodo ali pri obravnavi zelo velikih naborov podatkov. Izbira med matcherji in surovimi vrednostmi bi morala temeljiti na posebnih zahtevah aplikacije, vključno z berljivostjo, vzdrževanjem in potrebami uspešnosti.
Navedbe:[1] https://last9.io/blog/high-vs-low-cardinality/
[2] https://stats.stackexchange.com/questions/651015/use-smd-or-gor-difference-in-proportions-whe-comparing-balance-oof-binary-covari
[3] https://users.rust-lang.org/t/why-as-a-lookup-table-faster-than-atch-expression/24233
[4] https://docs.splunk.com/documentation/scs/current/searchreference/conditionalfunctions
[5] https://zsoltfabok.com/blog/2010/08/jmock-versus-mockito/
[6] https://kevinlynagh.com/notes/match-vs-lookup/
[7] https://docs.vespa.ai/sl/reference/schema-reference.html
[8] https://www.digitalocean.com/community/tutorials/mockito-argument-matchers-any-eq
[9] https://newrelic.com/blog/how-to-relic/extracting-log-nata-with-regex
[10] http://google.github.io/googlest/reference/matchers.html