<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2014-09-25 22:02 GMT+02:00 Marc Delisle <span dir="ltr"><<a href="mailto:marc@infomarc.info" target="_blank">marc@infomarc.info</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hugues Peccatte a écrit :<br>
<div><div class="h5">> 2014-09-25 20:08 GMT+02:00 Chirayu Chiripal <<a href="mailto:chirayu.chiripal@gmail.com">chirayu.chiripal@gmail.com</a>>:<br>
><br>
>><br>
>> On Thu, Sep 25, 2014 at 12:17 AM, Hugues Peccatte <<br>
>> <a href="mailto:hugues.peccatte@gmail.com">hugues.peccatte@gmail.com</a>> wrote:<br>
>><br>
>>> 2014-09-24 14:42 GMT+02:00 Chirayu Chiripal <<a href="mailto:chirayu.chiripal@gmail.com">chirayu.chiripal@gmail.com</a>>:<br>
>>>><br>
>>>> I was just wondering what will be the effect if we make current methods<br>
>>>> as static in those classes?<br>
>>>><br>
>>>> --<br>
>>>> Regards,<br>
>>>> Chirayu Chiripal<br>
>>>> <a href="https://chirayuchiripal.wordpress.com/" target="_blank">https://chirayuchiripal.wordpress.com/</a><br>
>>>><br>
>>> It's almost the same thing to use a static or a non-static function. This<br>
>>> is 2.5x slower than standard PHP function.<br>
>>><br>
>>> See:<br>
>>> Time: 1.7506999969482 //standard PHP function<br>
>>> Time: 4.3722500801086 //object<br>
>>> Time: 4.3722498416901 //object with static function<br>
>>> Time: 3.6722099781036 //PMA function, even this one is 2x slower than<br>
>>> standard PHP function…<br>
>>><br>
>> Are these tests performed on mb_* function or non mb_* one?<br></div></div></blockquote><div><br></div><div>I forgot to answer to this question…</div><div>So the tests are with non mb_* functions.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
>><br>
>> One thing is clear from these results is that even wrapping a built in<br>
>> function in another function (wrapper function) has some significant<br>
>> overhead. And using OOP/Classes is like wrapping that wrapper function<br>
>> further into a another wrapper causing further slowness. So why not just<br>
>> use mb_* function directly everywhere? If we do this, then what to do in<br>
>> case mb_* functions are not available? Maybe we can just define a new mb_*<br>
>> function to use respective non mb_* function for it. For e.g.<br>
>> // Define a function like this<br>
>> function mb_strlen($str) {<br>
>>     return strlen($str);<br>
>> }<br>
>> // or create an alias of strlen() as mb_strlen() (I heard this is possible<br>
>> in PHP 5.6+)<br>
>><br>
>> By doing this, we can get speed advantage of built in mb_* function<br>
>> whenever it is available by avoiding any wrapper function or class. And in<br>
>> cases where it is not available, a wrapper function with standard non mb<br>
>> function can deliver equivalent performance as non mb function is<br>
>> inherently faster than its mb_* mod.<br>
>><br>
>><br>
>>> Hugues.<br>
>>><br>
> Hi,<br>
><br>
> This is a very good idea!<br>
><br>
> Marc, you asked to create PMA_* string functions. Do you agree with the<br>
> Chirayu's proposal? So we won't have PMA_* functions, but only mb_*<br>
> functions.<br>
><br>
> Hugues.<br>
<br>
</div></div>I have not followed the latest test results in this thread. If it's true<br>
that using wrappers has a big cost, I am in favor but I fear that people<br>
reading the code do not realize that the mb_* function could be a wrapper.<br>
<br>
Not sure how to document this.<br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
Marc Delisle (phpMyAdmin)</div></div></blockquote><div><br></div><div>Using wrappers, the time could be doubled.</div><div>So with his proposition, the wrappers would be created only when mb_* doesn't exist.</div><div>If mb_* exist, we won't redefine it, but the execution would be slower because mb_* are slower.</div><div>If mb_* don't exist, the non-mb_* functions would be wrapped, so will be a little bit longer than without wrap.</div><div>And we would also be able to force the use of non-mb_* functions if needed.</div><div><br></div><div>As you said, the only thing that might be difficult, would be to document the fact that mb_* functions could be pMA functions. We should choose between clarity and "performance".</div><div><br></div><div>Hugues.</div></div></div></div>