मेरा एप्लिकेशन एमबी_ स्ट्रिंग फ़ंक्शंस का व्यापक उपयोग करता है और php 7 पर स्विच करता है जिसके परिणामस्वरूप कुल धीमी गति होती है। मैंने mb_ स्ट्रिंग फ़ंक्शंस में समस्याओं को ट्रैक किया।PHP 7 एमबी_ (मल्टीबाइट) फ़ंक्शंस ~ 60% की तुलना में ~ 60% धीमी हैं (विंडोज़ केवल समस्या)
$time = microtime();
$time = explode(' ', $time);
$start = $time[1] + $time[0];
$startms = $time[0];
for ($i=0; $i<100000; $i++) {
$a = mb_strlen("fdsfdssdfoifjosdifjosdifjosdij:ά", "UTF-8");
}
$time = microtime();
$time = explode(' ', $time);
$finish = $time[1] + $time[0];
$finishms = $time[0];
$total_time = round(($finish - $start), 4);
echo "mb_strlen: " . $total_time*1000 ." milliseconds<br/>";
$time = microtime();
$time = explode(' ', $time);
$start = $time[1] + $time[0];
$startms = $time[0];
for ($i=0; $i<100000; $i++) {
$a = mb_stripos("fdsfdssdfoifjosdifjosdifjosdij:ά", "α", 0, "UTF-8");
}
$time = microtime();
$time = explode(' ', $time);
$finish = $time[1] + $time[0];
$finishms = $time[0];
$total_time = round(($finish - $start), 4);
echo "mb_stripos: " . $total_time*1000 ." milliseconds<br/>";
$time = microtime();
$time = explode(' ', $time);
$start = $time[1] + $time[0];
$startms = $time[0];
for ($i=0; $i<100000; $i++) {
$a = mb_substr("fdsfdssdfoifjosdifjosdifjosdij:ά", $i, 1, "UTF-8");
}
$time = microtime();
$time = explode(' ', $time);
$finish = $time[1] + $time[0];
$finishms = $time[0];
$total_time = round(($finish - $start), 4);
echo "mb_substr: " . $total_time*1000 ." milliseconds<br/>";
मंच विंडोज 7 64 बिट है, IIS 7.5:
php 5.3.28
mb_strlen: 250 milliseconds
mb_stripos: 3078.1 milliseconds
mb_substr: 281.3 milliseconds
php 7.1.1
mb_strlen: 406.3 milliseconds
mb_stripos: 4796.9 milliseconds
mb_substr: 421.9 milliseconds
मैं अगर मेरे सेट अप गलत या कुछ और है पता नहीं है, लेकिन समझ से बाहर लगता है यहाँ बेंचमार्क कोड और परिणाम हैं कि multibyte कार्यों धीमी होनी चाहिए। इस बात को हल करने के लिए क्यों और क्या करना है इसके बारे में कोई विचार? पहले ही, आपका बहुत धन्यवाद।
संपादित करें: apokryfos की टिप्पणी से पता चलता है, यह एक विंडोज़ केवल समस्या हो सकती है।
क्षमा करें, मैं सिर्फ यह http://sandbox.onlinephpfunctions.com/code/401f138baf7c4110f1370f8e597bba5610dd0a47 नहीं दिख रहा है – apokryfos
@apokryfos मैं नहीं जानता कि क्या ओएस:
इस कोड (छोटा) है आपके द्वारा प्रदान किए गए टेस्ट लिंक को चलाता है, शायद यह php – MIrrorMirror
के विंडोज संस्करण के साथ एक मुद्दा है, बस पठनीयता के लिए: 'माइक्रोटाइम' एक बूलियन तर्क लेता है जो इसे पहले से ही एक फ्लोट लौटाता है - 'विस्फोट' करने की कोई आवश्यकता नहीं है - इसके बारे में सोचना: यह पूरी समस्या हो सकती है, '$ time = विस्फोट ('', $ time) क्या है; $ start = $ time [1] + $ time [0]; 'प्रतिनिधित्व करना चाहिए? आप बस सेकंड टाइम में वर्तमान टाइमस्टैम्प का msec हिस्सा जोड़ रहे हैं? – ccKep