Ответы пользователя по тегу PHP
  • Как грамотно организовать подгрузку html в сложной форме?

    @fattan Автор вопроса
    программист
    Ответ.
    Для подобных задач уже давно придумали AngularJS и прочие фреймворки.
    Также, если использовать PHP-фреймворки, типа Symfony, а не писать свой велосипед как я, вопрос отпадёт сам по себе.
    Там рендер шаблона (или чанка шаблона) происходит прозрачно. Вне зависимости от того, ajax это или GET-запрос
    Ответ написан
    Комментировать
  • Как правильно реализовать logout на php?

    @fattan Автор вопроса
    программист
    Переместил session_destroy(); как можно ближе к session_start(). Проблема решилась.

    session_start();
    
    if (isset($_GET['logout'])) {
        session_destroy();
        header('location: /bla/bla/bla/index.php?module=auth&action=start' );
    
    }
    Ответ написан
    Комментировать
  • PHP — Out of memory - хотя памяти выделили много, так почему?

    @fattan Автор вопроса
    программист
    Выяснилось вот что:
    Есть таблица. В таблице 70 000 записей. Общий объем таблицы = 7 Мб. Периодически происходит выборка всех этих записей, и запись их циклом через mysql_fetch_assoc() в массив. Out of memory происходит в основном во время работы этого цикла. Не справляется с записью такого объема данных в массив.

    Переписали код. Ошибки перестали валиться.
    Ответ написан
    Комментировать
  • Разумно ли использовать xampp в качестве боевого сервера?

    @fattan Автор вопроса
    программист
    И что такого там можно настроить, что существенно изменит работу xampp?
    Какого типа это будут настройки? Настройки по увеличению памяти отводимой серверам? (делаем такие для апача ThreadStack вроде называется). Настройки кеширования? Делаем такие для мускула. Для PHP разве что лимиты по работе с файлами и время выполнения скриптов и error_reporting. На этом наши настройки заканчиваются.
    Ответ написан
    Комментировать
  • Как объективно протестировать производительность node.js и PHP в запросах к mysql БД?

    @fattan Автор вопроса
    программист
    Итак. Спасибо за ответы. Я понял в чем дело. Т.к. программирую на node.js аж целых 2 недели, я неверно трактовал результаты. Изменил тест, и вышло вот что:

    var start = new Date();
    
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '', 
      database : 'epr'
    });
    
    
    for (var i = 0; i < 1000; i++) {
    	connection.query(
    		'SELECT * FROM dreg_document', 
    		function(error, result, fields){
    			
    			var str = '';
    			
    			result.forEach(function(row){
    
    				str += ' ' + row.id + ' ';
    
    			});
    			console.log(str);
    		}
    	);
    }
    
    connection.end();
    
    var end = new Date();
    console.log('node.js %d мс', (end.getTime()-start.getTime()) / 1000);
    	
    client.send('qwerty');


    Если думать по php-шному, после отработки всех запросов, отправляется сообщение клиенту -
    client.send('qwerty');

    Но на деле, сообщение отправляется тогда когда node-server отправит к БД ВСЕ запросы. Затем (! не дожидаясь ответа от БД) сервак отправляет клиенту сообщение. Клиент (браузер) подсчитывает время (вышло, к примеру 2 секунды для 100 000 итераций). А в это время в ноду продолжают поступать ответы от БД. Эти ответы мы видим с помощью
    console.log(str);
    И тут уже получаются совсем другие результаты....

    Далее, изменяем скрипт следующим образом, чтобы подсчитать время выполнения от 1го до последнего асинхронного подключения к БД:
    // начало выполнения скрипта
    var start = new Date();
    // счетчик обращений к БД
    var ConnCountGlobal = 0;
    // Число обращений к БД
    var iLength         = 100;
    
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '', 
      database : 'epr'
    });
    
    for (var i = 0; i < iLength; i++) {
    	connection.query(
    		'SELECT * FROM dreg_document', 
    		function(error, result, fields){
    			
    			// для последнего запроса вычисляем таймер
    			if (ConnCountGlobal == iLength-1){
    			
    				var dateObj   = new Date();
    				var currTime  = dateObj.getTime();
    			
    				console.log(' node.js - %d мс', (currTime-start.getTime()) / 1000);
    			}
    
    			ConnCountGlobal++;
    		}
    	);
    }
    
    connection.end();


    Результат
    Для 100 итераций 2.5 сек (что в 15 раз медленнее чем на PHP)

    Промежуточный ответ на топик:
    Node.js не быстрее PHP в 150 раз в вопросе доступа к БД.
    Напротив, Node.js в этом плане в 15 раз медленнее чем PHP.
    (это если брать оба сервера "из коробки", без улучшательств и настроек)

    Новый вопрос:
    Верен ли мой последний тест? Или я в нём тоже что-то не так сделал?
    Ответ написан
    9 комментариев