2015-12-03 9 views
0

У меня есть PHP-файл, который обрабатывает мои данные из форм, но у меня, похоже, есть проблема с производительностью/памятью, когда я отправляю форму, которая использует другой файл PHP через require_once. В первый раз, когда сообщение обрабатывается, и производительность прекрасна, но с каждым последующим сообщением он становится медленнее и медленнее, пока окно браузера не зависает, и я вижу некоторые занятые потоки php cgi на сервере IIS.Ошибка производительности PHP require_once Обработчик событий AJAX

Я использую PHP 5.6 (php-5.6.11-Win32-VC11-x86) и jQuery 2.1.4.

Короткая публикация всего кода в основном при нажатии кнопки отправки jQuery делает запрос XHR и форма передается в form_handler.php, который затем решает, как обрабатывать данные.

Все формы, обрабатываемые в этом файле, работают нормально, однако у меня есть формы, требующие расширенной обработки. Я пытаюсь разгрузить это в другой файл PHP. Код, который управляет этим выглядит следующим образом:

if($options[0] == "processor"){ 
    //Data can not be handled and must use processor 
    $sql = "select processor_file from dbo.processor where reference_id = '".$options[1]."'"; 
    $result = query_to_field($sql); 
    $processor = '../processors/'.$result; 
    if(file_exists($processor)) require_once $processor; 
    else echo "Error Processor Not Found<br/>"; 
} 

Указанный файл затем делает некоторые вещи и генерирует HTML-код, который возвращается через эхо. Я не уверен, является ли проблема require_once, и я должен использовать curl или exec, чтобы получить результат из другого файла.

Полученное сообщение - одно поле, а файл процессора - modified copy of this example.

Я изменил его, чтобы использовать preg_match вместо ereg и строить $html вместо всех эхо-х и гравюр, так что я могу только повторить $html когда полный.

Любое руководство, которое может быть предложено, будет оценено по достоинству.

+0

Вам необходимо отредактировать свой вопрос, чтобы предоставить более подробную информацию. Какую версию PHP вы используете? Какую версию jQuery вы используете? Насколько велики файлы, которые вы отправляете в этот скрипт? Что конкретно сделал бы вторичный процесс? Какие браузеры/версии вы используете? – JakeGould

+0

, хотя 'require_once' медленнее сравнивается с другими' include', 'include_once' и т. Д., Но это обычно не является источником проблемы ... imho – Andrew

+2

Это почти наверняка не касается самого require_once и, скорее всего, в этом файле процессора. –

ответ

0

Как явствует из некоторых комментариев, я действительно искал не то место, и проблема оказалась JS, которая добавляла обработчик события формы. Другие формы на сайте только на самом деле вызываются и отправляются один раз, поэтому я раньше этого не заметил. В основном, поскольку обработчик событий был просто повторно применен, когда изменился контент, он заставил submit умножить запрос AJAX до тех пор, пока клиент не сказал больше!

Bad Код:

function formhandlers(){   
    $('form').submit(function(e) { 
     // get the form data 
     var id = $(this).attr('id'); 
     // process the form 
     var dsttarg = document.getElementById(id).getAttribute('target'); 
     var fd = new FormData(document.getElementById(id)); 
     postdata(fd,encodeURI('./include/post_handler.php?function='+id),dsttarg); 
     e.preventDefault(); 
    }); 
} 

Хороший код:

function formhandlers(){  
    $('form').off('submit').on('submit', function(e) { 
     // get the form data 
     var id = $(this).attr('id'); 
     // process the form 
     var dsttarg = document.getElementById(id).getAttribute('target'); 
     var fd = new FormData(document.getElementById(id)); 
     postdata(fd,encodeURI('./include/post_handler.php?function='+id),dsttarg); 
     e.preventDefault(); 
    }); 
} 

Основное различие в том, что этот обработчик является выключаться, если он уже существует.