On 30/05/13 11:33, Tyler Romeo wrote:
> Ran another test. I tested on the string
> '<&<&<&herllowodsiojgd<&sd<^<6&&"""' repeated 50 times, and I ran the
> replacement function 500,000 times. The results were:
>
> htmlspecialchars with ENT_NOQUOTES: 14.025s
> htmlspecialchars without ENT_NOQUOTES: 13.457s
> strtr: 24.842s
> str_replace: 13.184s
>
> Of course, these numbers tend to vary +/- 0.25s every time, so take it with
> a grain of salt.
With the PHP package used at Wikimedia (5.3.10-1ubuntu3.6+wmf1), with
"taskset 1 nice -n-10", I get:
htmlspecialchars with ENT_NOQUOTES: 11.8s
htmlspecialchars without ENT_NOQUOTES: 12.0s
strtr: 24.8s
str_replace: 12.9s
On 30/05/13 12:22, Daniel Friesen wrote:
> * strtr is going to be faster in PHP 5.4 as they've changed the algorithm it
> uses
In 5.4, the strtr() hashtable implementation has been optimised, but
it's still a hashtable. In htmlspecialchars(), the lookup table is
just a plain C array:
static inline void find_entity_for_char_basic(
unsigned int k,
const entity_stage3_row *table,
const unsigned char **entity,
size_t *entity_len)
{
if (k >= 64U) {
*entity = NULL;
*entity_len = 0;
return;
}
*entity = table[k].data.ent.entity;
*entity_len = table[k].data.ent.entity_len;
}
It's hard to beat that.
-- Tim Starling
_______________________________________________
Wikitech-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitech-l