Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   ajax тормоза (https://javascript.ru/forum/dom-window/71059-ajax-tormoza.html)

гуня 23.10.2017 14:23

ajax тормоза
 
на странице есть див, в этот див аяксом грузится 3000 элементов, каждый элемент это див с текстом
3000 элементов генерятся на сервере, и затем отдаются клиенту в виде строки
проблема в том что при их рендеринге браузер подвисает
как ускорить? кроме уменьшения количества элементов

Nexus 23.10.2017 14:49

Можно избавиться от необходимости выводить на страницу 3к элементов.
Можно попробовать отрисовывать контент постепенно (с timeout).
Можно попробовать увеличить вычислительные мощности устройства, которое вы насилуете.

ksa 23.10.2017 14:56

Реализовать листание, если это какой-то список... Тогда можно подгружать информацию кусками. Но это все можификации одного подхода
Цитата:

Сообщение от Nexus
избавиться от необходимости выводить на страницу 3к элементов


гуня 24.10.2017 09:15

уменьшить количество не подходит на данном этапе
как вариант это отрендерить первые 100 видимых итемов а дальше рендерить постепенно по 100 штук с таймаутом
это возможно?

ksa 24.10.2017 09:38

Цитата:

Сообщение от гуня
отрендерить первые 100 видимых итемов а дальше рендерить постепенно по 100 штук с таймаутом
это возможно?

Да. :yes:

Но даже получение сразу большого количества данных не есть хорошо. Запрос "по соточке" с последующей отрисовкой всяко лучше... ;)

гуня 24.10.2017 10:13

как такое сделать?
счас у меня сделано так
<script id="leadTemplate" type="text/x-jquery-tmpl">

<div class="draggable-item" id="${id}">


    <div class="min-hd" id="${id}">

    {{if status==1}}
    <input type='checkbox' value='{id}' class='raw' />
    {{/if}}

    ${retail}
    </div>


    <div class="item">${name}</div>

    <div class="item">${phone}</div>

    <div class="item">${cel}</div>

    <div class="item">{{html email}}</div>

</div>

</script>

 $("#leadTemplate").tmpl(data.leads).appendTo('.box-min-'+data.status+' .main_box');

ksa 24.10.2017 10:24

Цитата:

Сообщение от гуня
как такое сделать?

Получив данные, добавляешь первый кусок на страницу... Остальные денные передаешь в функцию, которая запустится через setTimeout().


Часовой пояс GMT +3, время: 08:27.