Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: оптимизация php программ
 
 автор: серый   (06.04.2012 в 14:57)   письмо автору
 
 

очень мне уж не нравиться что некоторые функции много жрут на мой взгляд самые проблемные это функции по работе с базой данных может кто поделиться опытом техники построения очень хрошо оптимезированным кодом
p.s только не sql запросов про них итак все понятно!!!

  Ответить  
 
 автор: Valick   (06.04.2012 в 17:55)   письмо автору
 
   для: серый   (06.04.2012 в 14:57)
 

судя по вопросу вам "про них" (про sql запросы) совсем ничего не понятно
сами по себе функции по работе с БД, если речь конечно о стандартных функциях РНР, оптимизированы дальше некуда, да и оптимизировать там собственно говоря нечего, так как большинство из них просто отдают результат
ну а если непреодолимое желание оптимизировать не покидает вас, то вам нужно записаться в команду разработчиков РНР

  Ответить  
 
 автор: серый   (06.04.2012 в 19:09)   письмо автору
 
   для: Valick   (06.04.2012 в 17:55)
 

я далеко не профи наоборот только начал учить пхп так что среди разработчиков мне делать не чего на форуме зарегистрировался потму что в книгах бывает фига а вот советы людей послушать очень и очень полезно да и сам я судовольствием поделюсь каким небудь советом


меня беспокоит то что при использование базы данных приложение работает медлиней чем при файловой системе однако без базы не как !!!


так как я новичек то я извлекаю данные в цикле
например так

<? 
$db 
mysql_connect("localhost","root","");
mysql_query("SET NAMES 'cp1251'");
mysql_select_db('test',$db);
$result mysql_query("SELECT test FROM test");
$myrow mysql_fetch_array($result);
do
{
echo 
$myrow['test'];
}
while (
$myrow mysql_fetch_array($result) );

?>


при таком коде работает медленно подскажите пожалуйста что тут не так

  Ответить  
 
 автор: confirm   (06.04.2012 в 19:53)   письмо автору
 
   для: серый   (06.04.2012 в 19:09)
 

Вы время обработки ресурса замеряли, время непосредственно выполнения самого запроса к базе? С чем вы сравниваете?
Не так у вас два момента:
1) функция do while в этом случае совсем не к месту, следует использовать while. О разнице этих функций почитайте в учебнике.
2) не к месту применение функции, которой вы получаете строку ресурса - mysql_fetch_array. Кроме нее существуют еще две - mysql_fetch_assoc и mysql_fetch_row. Той, которой вы пользуетесь, по умолчанию возвращает массив данных как два массива, один из которых ассоциативный, а второй индексный. Вы используете, при непосредственно оперировании самими данными, только ассоциативный. Другими словами, вы впустую расходуете и время, и ресурсы. Для такого простого запроса и набора данных как у вас, это конечно мелочь, а вот при большом объеме данных, уже рубль.

Все три функции описаны в мануале, ознакомтесь с ними.

  Ответить  
 
 автор: серый   (06.04.2012 в 20:05)   письмо автору
 
   для: confirm   (06.04.2012 в 19:53)
 

огромное вам спасибо за отзыв сегодня прoтестирую ваше предложение

  Ответить  
 
 автор: серый   (06.04.2012 в 21:35)   письмо автору
 
   для: confirm   (06.04.2012 в 19:53)
 

какя конструкция по вашему более оправдана

вот эта


$result = mysql_query("SELECT test FROM test") or die('здесь или свой текст или вывод ошибки бд');

или вот эта

$result = mysql_query("SELECT test FROM test") ;
if(mysql_num_rows($result )>0);


зарание спосибо!

  Ответить  
 
 автор: confirm   (06.04.2012 в 21:45)   письмо автору
 
   для: серый   (06.04.2012 в 21:35)
 

Ну если учесть, что вторая "конструкция" не закончена, то такая вообще не имеет право на существование. Но если это намеренное сокращение ради вопроса, то вы понимаете какая разница между ними?

  Ответить  
 
 автор: серый   (06.04.2012 в 21:51)   письмо автору
 
   для: confirm   (06.04.2012 в 21:45)
 

это для сокрощения вопроса

а разница в то что первый вориант в случае отрицательного результата остановливает всю

программу второйже обходит участок кода или может нечего не делать

p.sтак как я новичек ямогу ошибаться

  Ответить  
 
 автор: confirm   (06.04.2012 в 21:57)   письмо автору
 
   для: серый   (06.04.2012 в 21:51)
 

die (псевдоним функции exit) - выводит сообщение и прекращает выполнение текущего скрипта (а это не программа в прямом понимании), и у вас это определяет результат запроса к базе.
А вторая предполагает действие в случае, если запрос вернет хотя бы один ряд, в противном случае нет.
Вопрос - это равнозначные по логике действия?

  Ответить  
 
 автор: серый   (06.04.2012 в 22:13)   письмо автору
 
   для: confirm   (06.04.2012 в 21:57)
 

ну в том что они оба отлавливают ошибки -они одинаковы

а вот не всигда нужно остонавливать скрипт тут второй вориант подойдет больше

  Ответить  
 
 автор: confirm   (06.04.2012 в 22:14)   письмо автору
 
   для: серый   (06.04.2012 в 22:13)
 

Это каким образом второе отлавливает ошибки?

  Ответить  
 
 автор: серый   (06.04.2012 в 22:21)   письмо автору
 
   для: confirm   (06.04.2012 в 22:14)
 

ну если второй будет отрицательным значит мы пропускаем код где обрабатываються даные из бд


иначе повылетают ошибки хотя можно сабакой воспользываться но лутче собак не трогать

  Ответить  
 
 автор: confirm   (06.04.2012 в 22:31)   письмо автору
 
   для: серый   (06.04.2012 в 22:21)
 

Отрицательный ответ, это не обязательно ошибка. У вас может просто не быть запрашиваемых данных в таблице, или вообще она пуста, поэтому и не получите ничего. В этом случае с таким же успехом можно проверить if($result), не прибегая к проверке количества рядов.
А если вы имеете ввиду возможные ваши ошибки синтаксиса, и именно сообщения mysql об ошибках, то первое как раз и предполагает их выдачу, если например так:
$result = mysql_query("SELECT test FROM test") or die(mysql_error());
Вот этот результат и анализируйте, чтобы узнать где вы накосячили.

  Ответить  
 
 автор: серый   (06.04.2012 в 23:57)   письмо автору
 
   для: confirm   (06.04.2012 в 22:31)
 




$result = mysql_query("SELECT test FROM test") or exit (mysql_error());



а вот так лутче будет или нет?

  Ответить  
 
 автор: confirm   (07.04.2012 в 07:25)   письмо автору
 
   для: серый   (06.04.2012 в 23:57)
 

Чем? die, как я вам уже писал, это псевдоним функции exit(), другими словами это одно и тоже.
Вы учитесь, значит php-мануал должен стать вашей настольной (надисплейной) книгой. Заглядывайте в него почаще.

  Ответить  
 
 автор: серый   (08.04.2012 в 21:29)   письмо автору
 
   для: confirm   (07.04.2012 в 07:25)
 


<? 

function gettime(){ 
$start_time explode(' ',microtime()); 
$real_time $start_time[1].substr($start_time[0],1); 
return 
$real_time

$start_time gettime(); 


//здесь код 



$stop_time gettime(); 
$diff_time bcsub($stop_time,$start_time,6); 
echo 
$diff_time.'<br/>'

?> 



это правельный замер или ошибочный заранее спосибо за ответ

  Ответить  
 
 автор: Роккер Руслан   (06.04.2012 в 18:14)   письмо автору
 
   для: серый   (06.04.2012 в 14:57)
 

А можно спросить какие функции у вас вызывают возмущение?

  Ответить  
 
 автор: серый   (06.04.2012 в 19:31)   письмо автору
 
   для: Роккер Руслан   (06.04.2012 в 18:14)
 

может я новерное что то не так понял в учебнике написано что само обращение к базе очень накладно на ресурсы -значит и функции обращения к базе в том числе.

  Ответить  
 
 автор: Valick   (06.04.2012 в 20:02)   письмо автору
 
   для: серый   (06.04.2012 в 19:31)
 

что само обращение к базе очень накладно
читайте внимательнее...
не обращение к БД, а установка соединения с БД
как бы вам не хотелось, но это разные понятия
от установки соединения вам ничем не избавиться, разве что отказаться от БД совсем
__
и кстати о каком учебнике идет речь? если о видеокурсе Попова, то это "ученье" достойное инквизиции

  Ответить  
 
 автор: серый   (06.04.2012 в 20:10)   письмо автору
 
   для: Valick   (06.04.2012 в 20:02)
 

а при кождом запросе к бд в скрепте происходит соединения?

  Ответить  
 
 автор: Valick   (06.04.2012 в 20:20)   письмо автору
 
   для: серый   (06.04.2012 в 20:10)
 

если так, то это грубейшая логическая ошибка
соединение должно устанавливаться один раз на "страницу"
и желательно после выполнения запросов к БД связь с ней разорвать, а не дожидаться окончания выполнения скрипта

  Ответить  
 
 автор: серый   (06.04.2012 в 20:31)   письмо автору
 
   для: Valick   (06.04.2012 в 20:20)
 



<?  
//начоло соединения
$db mysql_connect("localhost","root",""); 
mysql_query("SET NAMES 'cp1251'"); 
mysql_select_db('test',$db); 

//обращение к бд
$result mysql_query("SELECT test FROM test"); 
$myrow mysql_fetch_array($result); 
do 

echo 
$myrow['test']; 

while (
$myrow mysql_fetch_array($result) ); 


//закрытие соединеня с бд
mysql_close($db);

?> 




так вы имели в виду?

  Ответить  
 
 автор: Valick   (06.04.2012 в 21:24)   письмо автору
 
   для: серый   (06.04.2012 в 20:31)
 

<?php
//начоло соединения
$db mysql_connect("localhost","root",""); 
mysql_query("SET NAMES 'cp1251'"); 
mysql_select_db('test',$db); 

//обращение к бд
$result mysql_query("SELECT test FROM test"); 
while (
$myrow mysql_fetch_assoc($result)){ 
echo 
$myrow['test']; 


//закрытие соединеня с бд
mysql_close($db);

?>

  Ответить  
 
 автор: серый   (06.04.2012 в 21:43)   письмо автору
 
   для: Valick   (06.04.2012 в 21:24)
 

спасибо за ответ мне уже двое сказали про цикл и про то что


 mysql_fetch_assoc(); лутсше чем mysql_fetch_array();

  Ответить  
 
 автор: confirm   (06.04.2012 в 21:48)   письмо автору
 
   для: серый   (06.04.2012 в 21:43)
 

Она не лучше, вы и mysql_fetch_array можете использовать, но тогда хотя бы указывайте необходимый вам тип, чтобы не получать попутно мусор, а делается это вторым аргументом этой функции. Вы прочтите о них, а не выбирайте их потому, что вам так сказали.

  Ответить  
 
 автор: Valick   (06.04.2012 в 21:56)   письмо автору
 
   для: confirm   (06.04.2012 в 21:48)
 

вы несколько сгущаете краски...
это юношеский максимализм или старческий маразм? :)

  Ответить  
 
 автор: confirm   (06.04.2012 в 21:58)   письмо автору
 
   для: Valick   (06.04.2012 в 21:56)
 

Я говорю то, что думаю и считаю нужным.

  Ответить  
 
 автор: серый   (06.04.2012 в 22:01)   письмо автору
 
   для: Valick   (06.04.2012 в 21:56)
 

честно говоря не знаю максимализм или старческий маразм просто мне все очень интересно!!!

  Ответить  
 
 автор: серый   (06.04.2012 в 21:56)   письмо автору
 
   для: confirm   (06.04.2012 в 21:48)
 

а если типы разные но их надо вывести например в сылке где якорь строковой тип а втребут передать числовой как обычно id

  Ответить  
 
 автор: confirm   (06.04.2012 в 22:00)   письмо автору
 
   для: серый   (06.04.2012 в 21:56)
 

Причем тут числовой id? Я не говорю о типах данных вашей таблицы, я говорю о типе возвращаемого массива. Вы прочли об этой функции?

  Ответить  
 
 автор: серый   (06.04.2012 в 22:04)   письмо автору
 
   для: confirm   (06.04.2012 в 22:00)
 

извените просто вопрос не сразу понил

  Ответить  
 
 автор: Киналь   (06.04.2012 в 19:45)   письмо автору
 
   для: серый   (06.04.2012 в 14:57)
 

Выбросьте это из головы. Когда (и если) вы доберётесь до разработки высоконагруженных приложений, вы сами половину поймёте, а половину спросите иначе. А пока, повторю, выбросьте это из головы.

  Ответить  
 
 автор: серый   (06.04.2012 в 19:55)   письмо автору
 
   для: Киналь   (06.04.2012 в 19:45)
 

приложение уже почти готово так как там будет много аякс запросов (для удобства пользователей ) потому и интересуюсь. как говориться осведомлен-значит вооружон !

  Ответить  
 
 автор: серый   (07.04.2012 в 12:08)   письмо автору
 
   для: серый   (06.04.2012 в 19:55)
 

всем доброго дня !!!

продолжая вчерашию тему хочу спросить




<?

function gettime(){
$start_time explode(' ',microtime());
$real_time $start_time[1].substr($start_time[0],1);
return 
$real_time;
}
$start_time gettime();


//здесь код



$stop_time gettime();
$diff_time bcsub($stop_time,$start_time,6);
echo 
$diff_time.'<br/>';

?>



это правельный замер или ошибочный заранее спосибо кто ответит

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования