parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

да, показал что правильные

Constantine 15.08.2004 00:47

Я нашёл в чём проблема! Большая часть времени тратиться на вывод таблицы парсером. Когда я закомментировал все ^.menu{}, то страница начала создаваться за 0,25 секунд против 0,56 с выводом результатов.

Очевидно, парсер очень ресурсоёмкий: я вывожу все до единого поля, которые я взял из sql, размер выдаваемого HTML-файла на нашем любимом запросе -- всего 100 килобайт (выводятся 325 записей).

Другая страница, с тем же запросом, но с намного меньшим количеством результатов (другое значение у $form:uri4) имеет показатель 0,08, так что база данных сейчас должна быть в порядке.

Вот код, я исключил только то, что я выбираю, так как там очень много кода, фактически, всё форматирование идёт на sql:
$offers[^table::sql{
  SELECT 
	$separateThingsToSelect

$fromWhere[
  FROM 
    `catalogue_course_description` as catalogue, 
    `course_offerings` as offer
  WHERE 
    (
      (catalogue.cName = offer.cName)
        AND
      (catalogue.cNumber = offer.cNumber)
    )
    AND
    (
    `course_year` = ^form:uri2.int[]
      AND
    `course_term` = '^form:uri3.match[_][g]{ }'
      AND
    `offer`.`cName` = '$form:uri4'
    )
]
$fromWhere
}]


$catalogue[^table::sql{
  SELECT 

	$commonThingsToSelect,

	COUNT(CONCAT(offer.cName, offer.cNumber)) as `offers`
$fromWhere
  GROUP BY offer.cName, offer.cNumber

}]

$offersColumns[^offers.columns[]]
$catalogueColumns[^catalogue.columns[]]

$catalogueColumns[^catalogueColumns.select($catalogueColumns.column ne "offers")]




<table border="1">

<tr>
  ^catalogueColumns.menu{
    ^switch[$catalogueColumns.column]{
	^case[Title]{		<th style='width:12em^;'>$catalogueColumns.column</th>}
	^case[Description]{	<th style='width:16em^;'>$catalogueColumns.column</th>}
	^case[DEFAULT]{^untaint{<th>$catalogueColumns.column</th>}}
    }
  }
  ^offersColumns.menu{^untaint{<th>$offersColumns.column</th>}}
</tr>



#initialise
$offersLeft($catalogue.offers)
$showCommon($offersLeft)


^offers.menu{

<tr>

^if($showCommon){
	^if($showCommon > 1){
		$tdParam[ rowspan="$showCommon" valign="top"]
	}{
		$tdParam[]
	}
	^catalogueColumns.menu{
		^untaint{<td$tdParam>$catalogue.[$catalogueColumns.column]</td>}
	}
}

^offersColumns.menu{
	^untaint{<td>$offers.[$offersColumns.column]</td>}
}

</tr>
	^offersLeft.dec[]

	^if($offersLeft == 0){
		^catalogue.offset(1)
		$offersLeft($catalogue.offers)
		$showCommon($offersLeft)
	}{
		$showCommon(0)
	}

}




<tr>
<td colspan='^eval( ^catalogueColumns.count[] + ^offersColumns.count[] )'>Total number of offerings: ^offers.count[]</td>
</tr>
</table>