Я выполнил множество тестов и внес несколько изменений в свой сценарий, и теперь знаю, какой был главный виновник.
Исходный случай:
- Размер выборки 10.000;
- Время выполнения: более 600 секунд (превышено максимальное время выполнения).
Контрольный пример:
- Полностью урезанная версия оригинала
- Размер выборки 1000;
- Время выполнения: 24 секунды.
Что имело наибольшее значение?
Самым большим отличием было изменение местоположения следующей строки:
$strippedWords = mb_split(' +', $item[0]);
Я переместил эту строку в первый цикл вместо второго.Таким образом, заголовок из первого цикла делится только один раз каждые 1000 элементов вместо 1000 раз каждые 1000 элементов.Я измерил разницу во времени:
- mb_split во втором цикле:
Общее время выполнения в секундах: 162.17704296112
Общее время выполнения в секундах: 24.564566135406
Это удивительно огромная разница.Я предполагаю, что mb_split не самая простая вещь для PHP.Помещение mb_split в неправильную часть моего кода сделало скрипт почти в 7 раз медленнее: |
strtolower ()
После этого результата мне стало интересно, какие различия я смогусделать изменение местоположения других текстовых модификаторов.Итак, я взял strtolower () и поместил это, где это возможно, в первый цикл.
- strtolower () во втором цикле:
Общее время выполнения всекунд: 44.315208911896
- strtolower () в первом цикле:
Общее время выполнения в секундах: 37.129139900208
Хотя эта разница намного меньше, онавсе еще заметная разница.
Возможная другая причина
Я не уверен - поскольку у меня нет времени, чтобы проверить это - если этоСовершенно верно, но во время тестирования нескольких случаев я обнаружил, что мой браузер работает.Когда я сказал PHP выводить много информации в мой браузер, скрипты чувствовали, что они будут работать дольше, и браузер тоже перестанет показывать информацию через некоторое время.
Если случится случай, и у меня останется немного свободного времени, я буду проверять эту теорию и попытаюсь выяснить, может ли мой браузер реально влиять на продолжительность моих PHP-скриптов.Я не могу найти логическую причину того, почему это повлияет на продолжительность моего PHP-скрипта, так как я ожидаю, что браузер просто рухнет, а мой PHP-скрипт продолжит работать на сервере ... но мысль пришла мне в голову:несколько раз.
в любом случае, вот новый сценарий
function compareArticle() {
//For timing my script
$time_start = microtime(true);
include '../include/write.php';
$readNewsQuery = "select title,text,articleid,name,datetoday from texts";
$readNews = $dbwrite->query($readNewsQuery);
$dateToday = date("Y-m-d");
if ($readNews) {
//Fetch mysql data as an array
$news = $readNews->fetch_all(MYSQLI_NUM);
}
foreach ($news as $item) {
// Decrease the sample pool
if ($item[4] != $dateToday) {
continue;
}
$strippedWords = strtolower($item[0]);
$strippedWords = mb_split(' +', $strippedWords);
// Start another foreach to loop through the articles to compare with
foreach ($news as $compare) {
$compareString = "";
$compareString .= $compare[0];
$compareString .= $compare[1];
$count = 0;
// Start yet another foreach to loop through the words
foreach ($strippedWords as $word) {
// I only want to count the words that are longer than 4 characters
if (strlen($word) > 4) {
if (strpos(strtolower($compareString), $word)) {
$count++;
}
}
}