Расшифровка отладочной информации
denisov999,
Вероятно все это получится завернуть в другие запросы, все-таки напишите запрос с данными, посмотрим что можно сделать.
Вероятно все это получится завернуть в другие запросы, все-таки напишите запрос с данными, посмотрим что можно сделать.
Дело в том что мучаю бесплатную версию - определяюсь с выбором CMS.
Вообщем какие то здесь ошибки
Вообщем какие то здесь ошибки
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
<xsl:template match="/">
<xsl:apply-templates select="/shop"/>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
<div style="width:100%">
<div style="margin-left: 6%; width:94%">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td valign="top" align="center">
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id" select="@current_group_id"/>
<!-- Если в находимся в группе - выводим название группы -->
<div align="left">
<span style="color: #000; font-size: 10pt;text-decoration:underline;">
<a href="/" style="color: #000; font-size: 10pt">
Главная</a></span>
<span style="color: #000; font-size: 10pt;"> / </span>
<span style="color: #000; font-size: 14pt">
<xsl:if test="$parent_group_id != 0">
<xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/name"/>
</xsl:if>
</span>
<br/>
</div>
<xsl:variable name="count">1</xsl:variable>
<xsl:if test="count(item) > 0 or apply_filter = 1">
<form method="get" action="{/shop/path}{//group[@id=$parent_group_id]/fullpath}">
<br/>
<div align="left" style="background-image: url('/img9/katalog.gif'); width: 658px; height: 39px;vertical-align: middle">
<div style="position:relative; top:6px; left: 15px">
<!-- Если есть доступные производители -->
<table>
<tr><td>
<div style="position:relative;top:2px">
<div class="input_skin1" >
<div class="input_left1" ></div>
<div>
<xsl:if test="count(producerslist/producer) > 0">
<select class="input200" style="width:125px; top:1px; position:relative; height:16px;left:4px; " name="producer_id">
<option value="0">Выбирете бренд...</option>
<xsl:apply-templates select="producerslist/producer"/>
</select> 
</xsl:if>
</div>
</div>
</div>
 
</td>
<td>
<div class="input_skin" >
<div class="input_left" ></div>
<input class="input100" name="price_from" size="7" type="text" value="Цена от">
<xsl:if test="/shop/price_from != 0">
<xsl:attribute name="value">
<xsl:value-of disable-output-escaping="yes" select="/shop/price_from"/>
</xsl:attribute>
</xsl:if>
</input>
<div class="input_right" ></div>
</div>
</td><td>
<span style="color:white">   - </span>
</td>
<td>
<div class="input_skin" ><div class="input_left" ></div>
<input class="input100" name="price_to" size="7" type="text" value="Цена до">
<xsl:if test="/shop/price_to != 0">
<xsl:attribute name="value">
<xsl:value-of disable-output-escaping="yes" select="/shop/price_to"/>
</xsl:attribute>
</xsl:if>
</input>
<div class="input_right" ></div>
</div>
</td>
<td>  
<button style="padding:0;border:none;background:transparent;cursor:pointer;" type="submit/" value="Найти"><img src="/img9/find7.gif" alt="Подписаться"/></button>
</td>
<td>      
<span style="color:black">
<!-- Сортировка товаров -->
<!-- Определяем ссылку с параметрами фильтра -->
<xsl:variable name="filter">
<xsl:if test="/shop/apply_filter/node()">?action=apply_filter&producer_id=<xsl:value-of select="/shop/producer_id"/>&saller_id=<xsl:value-of select="/shop/saller_id"/>&price_from=<xsl:value-of select="/shop/price_from"/>&price_to=<xsl:value-of select="/shop/price_to"/>&on_page=<xsl:value-of select="/shop/on_page"/>
<xsl:if test="/shop/property_xml/node()">
<!-- GET для доп. свойств -->
<xsl:value-of select="/shop/property_xml"/>
</xsl:if>
</xsl:if>
</xsl:variable>
<!-- Определяем первый символ вопрос или амперсанд -->
<xsl:variable name="first_symbol">
<xsl:choose>
<xsl:when test="$filter != ''">&</xsl:when>
<xsl:otherwise>?</xsl:otherwise>
</xsl:choose>
</xsl:variable>
по алфавиту
<xsl:choose>
<xsl:when test="/shop/sort_by_field = 1 and /shop/order_direction = 'ASC'">
<img src="/hostcmsfiles/images/arrow_up.png" style="margin: 0px 0px -4px 0px" alt="по возрастанию"/>
</xsl:when>
<xsl:otherwise>
<a href="{$filter}{$first_symbol}sort_by_field=1&order_direction=1" class="without_decor">
<img src="/hostcmsfiles/images/arrow_up_gray.png" style="margin: 0px 0px -4px 0px" alt="по возрастанию"/>
</a>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/shop/sort_by_field = 1 and /shop/order_direction = 'DESC'">
<img src="/hostcmsfiles/images/arrow_down.png" style="margin: 0px 0px -4px 0px" alt="по убыванию"/>
</xsl:when>
<xsl:otherwise>
<a href="{$filter}{$first_symbol}sort_by_field=1&order_direction=2" class="without_decor">
<img src="/hostcmsfiles/images/arrow_down_gray.png" style="margin: 0px 0px -4px 0px" alt="по убыванию"/>
</a>
</xsl:otherwise>
</xsl:choose>, по цене
<xsl:choose>
<xsl:when test="/shop/sort_by_field = 2 and /shop/order_direction = 'ASC'">
<img src="/hostcmsfiles/images/arrow_up.png" style="margin: 0px 0px -4px 0px" alt="по возрастанию"/>
</xsl:when>
<xsl:otherwise>
<a href="{$filter}{$first_symbol}sort_by_field=2&order_direction=1" class="without_decor">
<img src="/hostcmsfiles/images/arrow_up_gray.png" style="margin: 0px 0px -4px 0px" alt="по возрастанию"/></a>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/shop/sort_by_field = 2 and /shop/order_direction = 'DESC'">
<img src="/hostcmsfiles/images/arrow_down.png" style="margin: 0px 0px -4px 0px" alt="по убыванию"/>
</xsl:when>
<xsl:otherwise>
<a href="{$filter}{$first_symbol}sort_by_field=2&order_direction=2" class="without_decor">
<img src="/hostcmsfiles/images/arrow_down_gray.png" style="margin: 0px 0px -4px 0px" alt="по убыванию"/>
</a>
</xsl:otherwise>
</xsl:choose>
</span>
</td>
</tr>
</table>
</div>
</div>
<br/>
<div width="100%">
<img src="/img9/warning.gif"/>
</div>
<div style="position:relative;top:-72px;left:-333px">
<img src="/img/buble.gif"/>
</div>
</form>
</xsl:if>
<xsl:apply-templates select="item" />
</td></tr></table>
</div>
</div>
</xsl:template>
<!-- Шаблон для фильтра производителей -->
<xsl:template match="producerslist/producer">
<xsl:param name="id_prod" select="@id"/>
<option value="{@id}">
<xsl:if test="@id = /shop/producer_id">
<xsl:attribute name="selected"> </xsl:attribute>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</option>
</xsl:template>
<!-- Шаблон для товара -->
<xsl:template match="item">
<div style='float:left; padding:20px 20px; 20px; 20px; height:290px; width:180px'>
<div align="left" valign="top">
<div style="position:relative;" onmouseout="javascript: displ('{@id}');javascript: displ('{@id}2');javascript: displ('{@id}1')" onmouseover="javascript: displ('{@id}2');javascript: displ('{@id}');javascript: displ('{@id}1')">
<div id="{@id}" style="position: absolute; top: 0px; display: none; height: 19px; font-size: 8pt; color: #333; width: 150px">
<div style="float:left; background-color: #FFF;height: 19px; width: auto">
<xsl:if test="count(modifications/item) > 0">
 <span style="font-size: 10px;">Размеры:  <xsl:apply-templates select="modifications/item"/></span>
</xsl:if>
</div>
<div style="float:left;height: 19px ;width: 5px;"><img src="/img9/size3.png"/></div>
</div>
<!-- Изображение для товара, если есть -->
<xsl:choose>
<xsl:when test="small_image!=''">
<a href="{/shop/path}{fullpath}{path}/"><img style="border: none;" src="/radius15.php?filename=http://casadimoda.ru{small_image}" width="150"/></a>
</xsl:when>
<xsl:otherwise>
<img src="/img2/skoro.jpg" style="background-color: #000;border: 1px; border-style: solid; border-color:#333; border-top-width: 0px;"/>
</xsl:otherwise></xsl:choose>
<div style="position: absolute; top: 35px; left: 158px;">
<xsl:if test="property[@xml_name = 'new']/value != '' and property[@xml_name = 'new']/value = '1'"><img style="border: none;" src="/img2/star.png"/></xsl:if></div>
<div id='{@id}2' style="position: absolute; top: 150px; left: 0px;">
<xsl:if test="producer/image!=''"><img style="border: none;" src="{producer/image_path}" width="90px" height="33px"/></xsl:if></div>
</div>
</div>
<div align="left" valign="top">
<xsl:choose>
<xsl:when test="small_image!=''">
<div style="width:150px">
<a href="{/shop/path}{fullpath}{path}/" class="cat_title">
<span style="font-size: 11pt">
<xsl:value-of disable-output-escaping="yes" select="name"/></span></a>
<br/>
</div>
</xsl:when>
</xsl:choose>
</div>
<div align="left" valign="top">
<!-- Цена товара товара -->
<span style="font-size: 14pt; algin:center;color:#660c47">
<xsl:variable name="price" select="price"/>
<xsl:value-of select="format-number($price, '### ###', 'my')"/>
руб.</span> 
<br/><span style="font-size: 8pt; color: gray;text-decoration: line-through;">
<xsl:variable name="price_tax" select="price_tax"/>
<xsl:value-of select="format-number($price_tax, '### ###', 'my')"/></span>
</div>
</div>
</xsl:template>
<!-- Шаблон для модификаций -->
<xsl:template match="modifications/item">
<xsl:value-of select="property[@xml_name='razm_odez']/value"/> 
</xsl:template>
</xsl:stylesheet>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
<xsl:template match="/">
<xsl:apply-templates select="/shop"/>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
<div style="width:100%">
<div style="margin-left: 6%; width:94%">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td valign="top" align="center">
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id" select="@current_group_id"/>
<!-- Если в находимся в группе - выводим название группы -->
<div align="left">
<span style="color: #000; font-size: 10pt;text-decoration:underline;">
<a href="/" style="color: #000; font-size: 10pt">
Главная</a></span>
<span style="color: #000; font-size: 10pt;"> / </span>
<span style="color: #000; font-size: 14pt">
<xsl:if test="$parent_group_id != 0">
<xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/name"/>
</xsl:if>
</span>
<br/>
</div>
<xsl:variable name="count">1</xsl:variable>
<xsl:if test="count(item) > 0 or apply_filter = 1">
<form method="get" action="{/shop/path}{//group[@id=$parent_group_id]/fullpath}">
<br/>
<div align="left" style="background-image: url('/img9/katalog.gif'); width: 658px; height: 39px;vertical-align: middle">
<div style="position:relative; top:6px; left: 15px">
<!-- Если есть доступные производители -->
<table>
<tr><td>
<div style="position:relative;top:2px">
<div class="input_skin1" >
<div class="input_left1" ></div>
<div>
<xsl:if test="count(producerslist/producer) > 0">
<select class="input200" style="width:125px; top:1px; position:relative; height:16px;left:4px; " name="producer_id">
<option value="0">Выбирете бренд...</option>
<xsl:apply-templates select="producerslist/producer"/>
</select> 
</xsl:if>
</div>
</div>
</div>
 
</td>
<td>
<div class="input_skin" >
<div class="input_left" ></div>
<input class="input100" name="price_from" size="7" type="text" value="Цена от">
<xsl:if test="/shop/price_from != 0">
<xsl:attribute name="value">
<xsl:value-of disable-output-escaping="yes" select="/shop/price_from"/>
</xsl:attribute>
</xsl:if>
</input>
<div class="input_right" ></div>
</div>
</td><td>
<span style="color:white">   - </span>
</td>
<td>
<div class="input_skin" ><div class="input_left" ></div>
<input class="input100" name="price_to" size="7" type="text" value="Цена до">
<xsl:if test="/shop/price_to != 0">
<xsl:attribute name="value">
<xsl:value-of disable-output-escaping="yes" select="/shop/price_to"/>
</xsl:attribute>
</xsl:if>
</input>
<div class="input_right" ></div>
</div>
</td>
<td>  
<button style="padding:0;border:none;background:transparent;cursor:pointer;" type="submit/" value="Найти"><img src="/img9/find7.gif" alt="Подписаться"/></button>
</td>
<td>      
<span style="color:black">
<!-- Сортировка товаров -->
<!-- Определяем ссылку с параметрами фильтра -->
<xsl:variable name="filter">
<xsl:if test="/shop/apply_filter/node()">?action=apply_filter&producer_id=<xsl:value-of select="/shop/producer_id"/>&saller_id=<xsl:value-of select="/shop/saller_id"/>&price_from=<xsl:value-of select="/shop/price_from"/>&price_to=<xsl:value-of select="/shop/price_to"/>&on_page=<xsl:value-of select="/shop/on_page"/>
<xsl:if test="/shop/property_xml/node()">
<!-- GET для доп. свойств -->
<xsl:value-of select="/shop/property_xml"/>
</xsl:if>
</xsl:if>
</xsl:variable>
<!-- Определяем первый символ вопрос или амперсанд -->
<xsl:variable name="first_symbol">
<xsl:choose>
<xsl:when test="$filter != ''">&</xsl:when>
<xsl:otherwise>?</xsl:otherwise>
</xsl:choose>
</xsl:variable>
по алфавиту
<xsl:choose>
<xsl:when test="/shop/sort_by_field = 1 and /shop/order_direction = 'ASC'">
<img src="/hostcmsfiles/images/arrow_up.png" style="margin: 0px 0px -4px 0px" alt="по возрастанию"/>
</xsl:when>
<xsl:otherwise>
<a href="{$filter}{$first_symbol}sort_by_field=1&order_direction=1" class="without_decor">
<img src="/hostcmsfiles/images/arrow_up_gray.png" style="margin: 0px 0px -4px 0px" alt="по возрастанию"/>
</a>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/shop/sort_by_field = 1 and /shop/order_direction = 'DESC'">
<img src="/hostcmsfiles/images/arrow_down.png" style="margin: 0px 0px -4px 0px" alt="по убыванию"/>
</xsl:when>
<xsl:otherwise>
<a href="{$filter}{$first_symbol}sort_by_field=1&order_direction=2" class="without_decor">
<img src="/hostcmsfiles/images/arrow_down_gray.png" style="margin: 0px 0px -4px 0px" alt="по убыванию"/>
</a>
</xsl:otherwise>
</xsl:choose>, по цене
<xsl:choose>
<xsl:when test="/shop/sort_by_field = 2 and /shop/order_direction = 'ASC'">
<img src="/hostcmsfiles/images/arrow_up.png" style="margin: 0px 0px -4px 0px" alt="по возрастанию"/>
</xsl:when>
<xsl:otherwise>
<a href="{$filter}{$first_symbol}sort_by_field=2&order_direction=1" class="without_decor">
<img src="/hostcmsfiles/images/arrow_up_gray.png" style="margin: 0px 0px -4px 0px" alt="по возрастанию"/></a>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/shop/sort_by_field = 2 and /shop/order_direction = 'DESC'">
<img src="/hostcmsfiles/images/arrow_down.png" style="margin: 0px 0px -4px 0px" alt="по убыванию"/>
</xsl:when>
<xsl:otherwise>
<a href="{$filter}{$first_symbol}sort_by_field=2&order_direction=2" class="without_decor">
<img src="/hostcmsfiles/images/arrow_down_gray.png" style="margin: 0px 0px -4px 0px" alt="по убыванию"/>
</a>
</xsl:otherwise>
</xsl:choose>
</span>
</td>
</tr>
</table>
</div>
</div>
<br/>
<div width="100%">
<img src="/img9/warning.gif"/>
</div>
<div style="position:relative;top:-72px;left:-333px">
<img src="/img/buble.gif"/>
</div>
</form>
</xsl:if>
<xsl:apply-templates select="item" />
</td></tr></table>
</div>
</div>
</xsl:template>
<!-- Шаблон для фильтра производителей -->
<xsl:template match="producerslist/producer">
<xsl:param name="id_prod" select="@id"/>
<option value="{@id}">
<xsl:if test="@id = /shop/producer_id">
<xsl:attribute name="selected"> </xsl:attribute>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</option>
</xsl:template>
<!-- Шаблон для товара -->
<xsl:template match="item">
<div style='float:left; padding:20px 20px; 20px; 20px; height:290px; width:180px'>
<div align="left" valign="top">
<div style="position:relative;" onmouseout="javascript: displ('{@id}');javascript: displ('{@id}2');javascript: displ('{@id}1')" onmouseover="javascript: displ('{@id}2');javascript: displ('{@id}');javascript: displ('{@id}1')">
<div id="{@id}" style="position: absolute; top: 0px; display: none; height: 19px; font-size: 8pt; color: #333; width: 150px">
<div style="float:left; background-color: #FFF;height: 19px; width: auto">
<xsl:if test="count(modifications/item) > 0">
 <span style="font-size: 10px;">Размеры:  <xsl:apply-templates select="modifications/item"/></span>
</xsl:if>
</div>
<div style="float:left;height: 19px ;width: 5px;"><img src="/img9/size3.png"/></div>
</div>
<!-- Изображение для товара, если есть -->
<xsl:choose>
<xsl:when test="small_image!=''">
<a href="{/shop/path}{fullpath}{path}/"><img style="border: none;" src="/radius15.php?filename=http://casadimoda.ru{small_image}" width="150"/></a>
</xsl:when>
<xsl:otherwise>
<img src="/img2/skoro.jpg" style="background-color: #000;border: 1px; border-style: solid; border-color:#333; border-top-width: 0px;"/>
</xsl:otherwise></xsl:choose>
<div style="position: absolute; top: 35px; left: 158px;">
<xsl:if test="property[@xml_name = 'new']/value != '' and property[@xml_name = 'new']/value = '1'"><img style="border: none;" src="/img2/star.png"/></xsl:if></div>
<div id='{@id}2' style="position: absolute; top: 150px; left: 0px;">
<xsl:if test="producer/image!=''"><img style="border: none;" src="{producer/image_path}" width="90px" height="33px"/></xsl:if></div>
</div>
</div>
<div align="left" valign="top">
<xsl:choose>
<xsl:when test="small_image!=''">
<div style="width:150px">
<a href="{/shop/path}{fullpath}{path}/" class="cat_title">
<span style="font-size: 11pt">
<xsl:value-of disable-output-escaping="yes" select="name"/></span></a>
<br/>
</div>
</xsl:when>
</xsl:choose>
</div>
<div align="left" valign="top">
<!-- Цена товара товара -->
<span style="font-size: 14pt; algin:center;color:#660c47">
<xsl:variable name="price" select="price"/>
<xsl:value-of select="format-number($price, '### ###', 'my')"/>
руб.</span> 
<br/><span style="font-size: 8pt; color: gray;text-decoration: line-through;">
<xsl:variable name="price_tax" select="price_tax"/>
<xsl:value-of select="format-number($price_tax, '### ###', 'my')"/></span>
</div>
</div>
</xsl:template>
<!-- Шаблон для модификаций -->
<xsl:template match="modifications/item">
<xsl:value-of select="property[@xml_name='razm_odez']/value"/> 
</xsl:template>
</xsl:stylesheet>
не могу понять - удаляю просмотр модификаци
И ничего не меняется - все тоже время генерации и тот же размер xml
Обработка XML 0.25 с, размер XML 3 347 808 байт.
Также убираю в шаблоне товара все кроме имени
получаю:
обработка XML 0.21 с, размер XML 3 347 796 байт.
Откуда берутся 3 МБ xml-я
И ничего не меняется - все тоже время генерации и тот же размер xml
Обработка XML 0.25 с, размер XML 3 347 808 байт.
Также убираю в шаблоне товара все кроме имени
получаю:
обработка XML 0.21 с, размер XML 3 347 796 байт.
Откуда берутся 3 МБ xml-я
denisov999, ну а почему вы сразу в XSL ошибку ищете?
Давайте все-таки начнем с начала, как положено. То есть с формулировки задачи.
Что вы хотите получить в результате?
Потом расскажите, как вы этого пытаетесь добиться.
Зачастую причина ошибок в интеграции кроется именно в этих пунктах
Давайте все-таки начнем с начала, как положено. То есть с формулировки задачи.
Что вы хотите получить в результате?
Потом расскажите, как вы этого пытаетесь добиться.
Зачастую причина ошибок в интеграции кроется именно в этих пунктах

Заказов не беру. Консультирую редко.
Kotoff
3 мб XML тяжело обрабатывать - однако причем он тут не из за колличества позиций (т.е. содержания позиций)
3 мб XML тяжело обрабатывать - однако причем он тут не из за колличества позиций (т.е. содержания позиций)
denisov999 писал(а):
Ну я же писал вам на предыдущей странице:
Kotoff писал(а):
Вот здесь об этом подробнее:
Попробуйте все перечисленные там элементы, начинающиеся с $param['xml_...'] установить в false
Откуда берутся 3 МБ xml-я
Ну я же писал вам на предыдущей странице:
Kotoff писал(а):
а что у вас в ТДС? Точнее даже так — что у вас передается в xml? Есть же управляющие параметры при генерации xml для каталога магазина, в котором задается что должно включаться в xml — ну например доп. свойства товара, доп. свойства групп, комментарии к товару и т.д.
Вот здесь об этом подробнее:
Попробуйте все перечисленные там элементы, начинающиеся с $param['xml_...'] установить в false
Заказов не беру. Консультирую редко.
denisov999,
XML генерируется системой по параметрам, переданным интегратором сайта, XSL их обрабатывает. Меняя XSL-шаблон Вы не уменьшите объем XML, как его уменьшить выше подсказал Kotoff
XML генерируется системой по параметрам, переданным интегратором сайта, XSL их обрабатывает. Меняя XSL-шаблон Вы не уменьшите объем XML, как его уменьшить выше подсказал Kotoff
denisov999, ну и к слову сказать, о вашем xsl-шаблоне. Я проверил его в профайлере на локальной машине. Он практически в полном порядке, там можно оптимизировать только одну вещь.
(она правда дает выигрыш почти в секунду - 1,9 против 2,8 сек, ну так то на локальной офисной машине, Celeron E3300)
У вас в коде шаблона в пределах одного темплейта дважды встречается конструкция
Это довольно таки затратная операция, поэтому ее следует оптимизировать, во1х, вычислив один раз сохранить в переменную, а во2х, ограничить область поиска поставив в начале точку (хотя при данной структуре xml-документа это несущественно).
То есть после вычисления переменной parent_group_id пишем
а ниже, везде до конца текущего темплейта меняем
Приведу тот фрагмент шаблона, в котором сделаны изменения:
Этим мы получаем 0,9 секунды выигрыша, при чем по данным профайлера, на строку
По поводу оптимизации XSL еще очень рекомендую почитать вот эту статью:
Впрочем, отвлекшись на XSL мы потихоньку уходим от основной проблемы.
(она правда дает выигрыш почти в секунду - 1,9 против 2,8 сек, ну так то на локальной офисной машине, Celeron E3300)
У вас в коде шаблона в пределах одного темплейта дважды встречается конструкция
//group[@id=$parent_group_id]
Это довольно таки затратная операция, поэтому ее следует оптимизировать, во1х, вычислив один раз сохранить в переменную, а во2х, ограничить область поиска поставив в начале точку (хотя при данной структуре xml-документа это несущественно).
То есть после вычисления переменной parent_group_id пишем
<xsl:variable name="parent_group" select=".//group[@id=$parent_group_id]"/>
а ниже, везде до конца текущего темплейта меняем
//group[@id=$parent_group_id]
на $parent_group
Приведу тот фрагмент шаблона, в котором сделаны изменения:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
<xsl:template match="/">
<xsl:apply-templates select="shop"/>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
<div style="width:100%">
<div style="margin-left: 6%; width:94%">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td valign="top" align="center">
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id" select="@current_group_id"/>
<xsl:variable name="parent_group" select=".//group[@id=$parent_group_id]"/>
<!-- Если в находимся в группе - выводим название группы -->
<div align="left">
<span style="color: #000; font-size: 10pt;text-decoration:underline;">
<a href="/" style="color: #000; font-size: 10pt">Главная</a>
</span>
<span style="color: #000; font-size: 10pt;"> / </span>
<span style="color: #000; font-size: 14pt">
<xsl:if test="$parent_group_id != 0">
<xsl:value-of disable-output-escaping="yes" select="$parent_group/name"/>
</xsl:if>
</span>
<br/>
</div>
<xsl:variable name="count">1</xsl:variable>
<xsl:if test="count(item) > 0 or apply_filter = 1">
<form method="get" action="{/shop/path}{$parent_group/fullpath}">
<br/>
<div align="left" style="background-image: url('/img9/katalog.gif'); width: 658px; height: 39px;vertical-align: middle">
<div style="position:relative; top:6px; left: 15px">
<!-- Если есть доступные производители -->
... дальше все без изменений ...
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
<xsl:template match="/">
<xsl:apply-templates select="shop"/>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
<div style="width:100%">
<div style="margin-left: 6%; width:94%">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td valign="top" align="center">
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id" select="@current_group_id"/>
<xsl:variable name="parent_group" select=".//group[@id=$parent_group_id]"/>
<!-- Если в находимся в группе - выводим название группы -->
<div align="left">
<span style="color: #000; font-size: 10pt;text-decoration:underline;">
<a href="/" style="color: #000; font-size: 10pt">Главная</a>
</span>
<span style="color: #000; font-size: 10pt;"> / </span>
<span style="color: #000; font-size: 14pt">
<xsl:if test="$parent_group_id != 0">
<xsl:value-of disable-output-escaping="yes" select="$parent_group/name"/>
</xsl:if>
</span>
<br/>
</div>
<xsl:variable name="count">1</xsl:variable>
<xsl:if test="count(item) > 0 or apply_filter = 1">
<form method="get" action="{/shop/path}{$parent_group/fullpath}">
<br/>
<div align="left" style="background-image: url('/img9/katalog.gif'); width: 658px; height: 39px;vertical-align: middle">
<div style="position:relative; top:6px; left: 15px">
<!-- Если есть доступные производители -->
... дальше все без изменений ...
Этим мы получаем 0,9 секунды выигрыша, при чем по данным профайлера, на строку
<xsl:variable name="parent_group" select=".//group[@id=$parent_group_id]"/>
приходится 51% времени от всей длительности обработки XSL-шаблона. По поводу оптимизации XSL еще очень рекомендую почитать вот эту статью:
Впрочем, отвлекшись на XSL мы потихоньку уходим от основной проблемы.
Заказов не беру. Консультирую редко.
P.S. А еще - я только сейчас обратил внимание что у вас xml-документ и xsl-шаблон в кодировке windows-1251.
А чуть раньше
denisov999 писал(а):
В связи с чем закономерный вопрос - а чего ж старую версию-то мучаете? С тех пор уже вышло как минимум 15 больших обновлений, в том числе затрагивающих генерацию XML для магазина. Возможно в новой версии проблема уже отчасти решена, и страничка будет генерироваться быстрее?
А чуть раньше
denisov999 писал(а):
Дело в том что мучаю бесплатную версию — определяюсь с выбором CMS.
В связи с чем закономерный вопрос - а чего ж старую версию-то мучаете? С тех пор уже вышло как минимум 15 больших обновлений, в том числе затрагивающих генерацию XML для магазина. Возможно в новой версии проблема уже отчасти решена, и страничка будет генерироваться быстрее?
Заказов не беру. Консультирую редко.
Авторизация