Расшифровка отладочной информации

Модератор
#
Re: Расшифровка отладочной информации
denisov999,
Вероятно все это получится завернуть в другие запросы, все-таки напишите запрос с данными, посмотрим что можно сделать.
#
Re: Расшифровка отладочной информации
Дело в том что мучаю бесплатную версию - определяюсь с выбором 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;">&#xA0;/&#xA0;</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) &gt; 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>&#xA0;
                                                   </xsl:if>
                                                </div>
                                             </div>
                                          </div>
                                          &#xA0;
                                       </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">&#xA0;&#xA0;&#xA0;-&#xA0;</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>&#xA0;&#xA0;
                                          <button style="padding:0;border:none;background:transparent;cursor:pointer;" type="submit/" value="Найти"><img src="/img9/find7.gif" alt="Подписаться"/></button>
                                       </td>
                                       <td>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;
                                          <span style="color:black">
                                             <!-- Сортировка товаров -->
                                             <!-- Определяем ссылку с параметрами фильтра -->
                                             <xsl:variable name="filter">
                                                <xsl:if test="/shop/apply_filter/node()">?action=apply_filter&amp;producer_id=<xsl:value-of select="/shop/producer_id"/>&amp;saller_id=<xsl:value-of select="/shop/saller_id"/>&amp;price_from=<xsl:value-of select="/shop/price_from"/>&amp;price_to=<xsl:value-of select="/shop/price_to"/>&amp;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 != ''">&amp;</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&amp;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&amp;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>,&#xA0;по цене
                                             <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&amp;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&amp;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) &gt; 0">
                     &#xA0;<span style="font-size: 10px;">Размеры:&#xA0; <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>&#xA0;
            <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"/>&#xA0;
   </xsl:template>
   
   
</xsl:stylesheet>
#
Re: Расшифровка отладочной информации
не могу понять - удаляю просмотр модификаци
И ничего не меняется - все тоже время генерации и тот же размер xml

Обработка XML 0.25 с, размер XML 3 347 808 байт.

Также убираю в шаблоне товара все кроме имени

получаю:

обработка XML 0.21 с, размер XML 3 347 796 байт.

Откуда берутся 3 МБ xml-я
#
Re: Расшифровка отладочной информации
denisov999, ну а почему вы сразу в XSL ошибку ищете?
Давайте все-таки начнем с начала, как положено. То есть с формулировки задачи.
Что вы хотите получить в результате?
Потом расскажите, как вы этого пытаетесь добиться.
Зачастую причина ошибок в интеграции кроется именно в этих пунктах
Заказов не беру. Консультирую редко.
#
Re: Расшифровка отладочной информации
#
Re: Расшифровка отладочной информации
Kotoff

3 мб XML тяжело обрабатывать - однако причем он тут не из за колличества позиций (т.е. содержания позиций)
#
Re: Расшифровка отладочной информации
denisov999 писал(а):
Откуда берутся 3 МБ xml-я

Ну я же писал вам на предыдущей странице:
Kotoff писал(а):
а что у вас в ТДС? Точнее даже так — что у вас передается в xml? Есть же управляющие параметры при генерации xml для каталога магазина, в котором задается что должно включаться в xml — ну например доп. свойства товара, доп. свойства групп, комментарии к товару и т.д.

Вот здесь об этом подробнее: http://hostcms.ru/api/HostCMS_5/shop.html#methodShowShop
Попробуйте все перечисленные там элементы, начинающиеся с $param['xml_...'] установить в false
Заказов не беру. Консультирую редко.
Модератор
#
Re: Расшифровка отладочной информации
denisov999,
XML генерируется системой по параметрам, переданным интегратором сайта, XSL их обрабатывает. Меняя XSL-шаблон Вы не уменьшите объем XML, как его уменьшить выше подсказал Kotoff
#
Re: Расшифровка отладочной информации
denisov999, ну и к слову сказать, о вашем 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;">&#xA0;/&#xA0;</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) &gt; 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 еще очень рекомендую почитать вот эту статью: http://lktalks.blogspot.com/2007/10/xslt.html

Впрочем, отвлекшись на XSL мы потихоньку уходим от основной проблемы.
Заказов не беру. Консультирую редко.
#
Re: Расшифровка отладочной информации
P.S. А еще - я только сейчас обратил внимание что у вас xml-документ и xsl-шаблон в кодировке windows-1251.
А чуть раньше
denisov999 писал(а):
Дело в том что мучаю бесплатную версию — определяюсь с выбором CMS.

В связи с чем закономерный вопрос - а чего ж старую версию-то мучаете? С тех пор уже вышло как минимум 15 больших обновлений, в том числе затрагивающих генерацию XML для магазина. Возможно в новой версии проблема уже отчасти решена, и страничка будет генерироваться быстрее?
Заказов не беру. Консультирую редко.
Авторизация