PDA

Просмотр полной версии : быстродействие


Илья К
18.01.2006, 22:04
Всем приветы!
Есть примерно такой скрипт:<?php
function return_entry($result, $row, $field)
{
$echo_return_entry = "";
$echo_return_entry = mysql_result($result, $row, $field);
if(!$echo_return_entry)
{
$echo_return_entry = false;
}
return $echo_return_entry;
}
?><?php
$result = mysql_query("SELECT field_1, field_2, field_3 FROM `table`");
?>
<table>
<?php
for($counter = 0; $counter < mysql_num_rows($result); $counter++)
{
?>
<tr>
<td><?= return_entry($result, $counter, "field_1"); ?></td>
<td><?= return_entry($result, $counter, "field_2"); ?></td>
<td><?= return_entry($result, $counter, "field_3"); ?></td>
</tr>
<?php
}
?>
</table>Теперь данные должны выдаваться в полях формы (точнее форм), чтобы их можно было, не отходя от кассы, обработать и отослать измененные на сервер. Пишу:<?php
$result = mysql_query("SELECT field_1, field_2, field_3 FROM `table`");
?>
<table>
<form action="action.php">
<?php
for($counter = 0; $counter < mysql_num_rows($result); $counter++)
{
?>
<tr>
<td>
<input type="text" name="set[type]" size="10" value="<?= return_entry($result, $counter, "field_1"); ?>">
</td>
<td>
<input type="text" name="set[type]" size="10" value="<?= return_entry($result, $counter, "field_2"); ?>">
</td>
<td>
<input type="text" name="set[type]" size="10" value="<?= return_entry($result, $counter, "field_3"); ?>">
</td>
<td>
<input type="submit" name="command" value="update" onclick="return action_confirm('save')" onFocus="blur()" class="save_SUBMIT" value="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;">
</td>
</tr>
<?php
}
?>
</form>
</table>И тут скрипт начинает тормозить. Первые 50-70 записей выдает в доли секунды, а дальше... На тысячу записей ему требуется минут пять. В чем тут может быть дело, ведь разница только в наличии/отсутствии формы? Это первый вопрос. Второй -- может есть идеи получше, как это реализовать?
Спасибо.

Skubent
23.01.2006, 12:09
Может, браузер тормозит ? А то 3*количество записей полей с одинаковым именем, сабмиты несчитаны...

А получше реализовать...

К примеру, не делать вызов функции 4 раза на запись.
Что мешает вот так:

<?php
$result = mysql_query("SELECT field_1, field_2, field_3 FROM `table`");
?>
<table>
<form action="action.php">
<?php
while($row = mysql_fetch_array($result))
{
?>
<tr>
<td>
<input type="text" name="set[type]" size="10" value="<? echo $row[0];?>">
</td>
<td>
<input type="text" name="set[type]" size="10" value="<?echo $row[1];?>">
</td>
<td>
<input type="text" name="set[type]" size="10" value="<?echo $row[2];?>">
</td>
<td>
<input type="submit" name="command" value="update" onclick="return action_confirm('save')" onFocus="blur()" class="save_SUBMIT" value="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;">
</td>
</tr>
<?php
}
?>
</form>
</table>

Constantine
26.01.2006, 01:24
...Первые 50-70 записей выдает в доли секунды, а дальше... На тысячу записей ему требуется минут пять. В чем тут может быть дело...
Так дело как раз в этом ;)

Илья К
26.01.2006, 14:44
2 Skubent
Пробовал. Результат тот же. Придется, видимо, либо ограничиться примерно 30 строками, либо от красивой идеи и выдавать все простой таблицей.

2 Constantine
"Так дело как раз в этом" – это очень обще и, в общем-то, в молоко… ;) Я же не пишу "первые 50 за 10, а 5000 в сто раз медленнее. Почему?" Дело в том, что, начиная с определенной записи, браузер просто почти умирает и на каждую следующую строку тратит чуть ли не больше, чем на первые, скажем, 30…

Constantine
26.01.2006, 15:10
Так Skubent написал, что тормозит скорее всего браузер... Cтранно, что он вообще что-то показывает, пока не отрендерит всю таблицу (по крайней мере IE)...
Как я понял, у тебя одна форма и куча сабмитов? Стало быть и посылать будешь данные всех полей? Нафига?
Сделай строки дивами и отдельными формами, марджины стилями ;)

Илья К
13.02.2006, 02:56
Не, как раз нет так... :) Не "одна форма и куча сабмитов", а куча форм и в каждой по сабмиту (точнее по три, но не суть). То есть, положим, у таблицы в БД X полей и Y строк. Идея была в том, чтобы выводить все это хозяйство как Y форм с X полями/чекбоксами/радиобатонами в виде таблицы (каждая строка -- форма). Цель главным образом в том, чтобы можно было, "не отходя от кассы", то есть не переходя на отдельную страницу, быстро что-то изменить...