Prilis dlouhy redrawControl() pres AJAX

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
blueticket
Člen | 41
+
0
-

Zdravim Vas, nevim jestli je to normalni, ale muj redraw control trva prilis dlouhu (na core i5 cca 400–500ms) a nevim jestli delam neco spatne.

v sablone mam nadefinovanej ul a v nem foreach:

{snippet bill}
    <ul class="bill">
        {var $total = 0}
        {var $subtotal = 0}
        {var $discount = 0}
        {foreach $items as $item}
            {var $subtotal = $subtotal + $item->base_unit_price_w_tax*$item->quantity}
            {var $discount = $discount + $item->discount_value_w_tax*$item->quantity}
            <li>
                <div class="col-xs-2 padding-side-0">
                    <span class="item_registration_code">{$item->product_code}</span>
                    <span class="vat_info">{_"DPH"}: {$item->product_tax}%</span>
                </div>
                <div class="col-xs-5 padding-side-0">
                    <span class="item_name">{$item->product_name}</span>
                </div>
                <div class="col-xs-4 padding-side-2">
                    <span class="item_price">{$item->base_unit_price_w_tax*$item->quantity|number:2} {!_"&euro;"}</span>
                    <span class="item_info_price">{$item->quantity|number:3} {$item->product_unit} x {$item->base_unit_price_w_tax|number:2} {!_"&euro;"}</span>
                </div>
                <a class="edit_item col-xs-1 padding-side-0" data-toggle="modal" data-target="#ModalEditItem">
                    <i class="ion-compose"></i>
                </a>
                {if strlen($item->note) > 0}
                    <span class="item_note">
                        <i class="ion-information-circled"></i>
                        {$item->note}
                    </span>
                {/if}
            </li>
        {/foreach}
        {var $total = $subtotal - $discount}
    </ul>
{/snippet}

a nasledne pak v presenteru:

public function render() {
    $items_count = $this->database->table("sma_document_items_tmp")->where("cart_nr=?", $this->cart_nr)->count();

    if ($items_count > 0) {
        $items = $this->database->table("sma_document_items_tmp")->where("cart_nr=?", $this->cart_nr)->order("id DESC")->fetchAll();

        $this->template->items = $items;
    }

    $this->template->items_count = $items_count;
    $this->template->setTranslator($this->getPresenter()->translator);
    $this->template->setFile(__DIR__ . "/bill.latte");
    $this->template->render();
}

vyuzivam nette.ajax.js a kdyz volam metodu redrawControl() tak mi nabihaji brutalni casy. 400 – 1500ms na redraw (dle procesoru) i kdyz vypnu debug a zapnu cache pro latte.

Samotna metoda, kdyz nezavolam redrawControl(), ale terminate() na jeji konci, trva cca 20–50ms.
Take pri debugu pres firebug mi vraci pouze snippet s ul-li a nic vice.

Nesetkali ste se nekdo s necim podobnym? Nevite me navest na reseni?

Diky moc predem!

AdamVyborny
Člen | 36
+
+1
-

Jak dlouho trvá samotné načtení stránky? Jde o to, že se znova projede životní cyklus presenteru při redraw(). Občas je lepší se vykašlat na nějaký snippety a řešit to klasicky AJAXem plus .append() / .html() nebo podobně…