| 
    
            
         
         | 
    
  | 
NodeJS большие таблицы скроллинг. с динамической подгрузкой данных. | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        mingw    
     13.04.16 
            ✎
    15:51 
 | 
         
        Сабжем никто не занимался случаем?
 
        Как решали?  | 
|||
| 
    1
    
        badboychik    
     13.04.16 
            ✎
    15:54 
 | 
         
        грузить асинхронно порциями, какие еще могут быть варианты     
         | 
|||
| 
    2
    
        orefkov    
     13.04.16 
            ✎
    15:56 
 | 
         
        какая связь между NodeJS и скроллингом таблиц?
 
        NodeJS - серверный код.  | 
|||
| 
    3
    
        mingw    
     13.04.16 
            ✎
    15:58 
 | 
         
        (1) Варианты в определении нужной порции.     
         | 
|||
| 
    4
    
        mingw    
     13.04.16 
            ✎
    15:59 
 | 
         
        (2) В этом и смысл. БД Постгрес. Через курсоры? А как обновлять. Как синхронить с клиентом?     
         | 
|||
| 
    5
    
        Fragster    
     гуру 
    13.04.16 
            ✎
    16:03 
 | 
         
        (4) в том то и дело, что (2)     
         | 
|||
| 
    6
    
        mingw    
     13.04.16 
            ✎
    16:07 
 | 
         
        (5) Если сервер отправит на вебклиента сразу всю таблицу и далее скроллить средствами броузера или js в нем то будут тормоза.
 
        Задача сделать отзывчивый интерфейс. Чтобы да вебсервер (nodejs) отдавал данные из базы для вебклиента (HTML5 броузер) нужными порциями. Причем какую порцию отдавать еще и "предвидел" по поступающим командам-запросам данных с клиента.  | 
|||
| 
    7
    
        badboychik    
     13.04.16 
            ✎
    16:07 
 | 
         
        (4) при прокрутке до 80% записей клиент запрашивает с сервера новую порцию и получив закидывает в таблицу     
         | 
|||
| 
    8
    
        mingw    
     13.04.16 
            ✎
    16:10 
 | 
         
        (7) Это если простейше. А хочется упредить. Чтобы в фоне подгрузка шла. Но без лишнего.
 
        А куда старые данные. Для прокрутки назад. Как определять старость. Т.е. может у кого уже есть подобный опыт.  | 
|||
| 
    9
    
        badboychik    
     13.04.16 
            ✎
    16:14 
 | 
         
        (8) запоминать начальную и конечную строку полученного набора, при прокрутке назад выбирать меньшие значения чем начальный номер
 
        В фоне и будет идти пока пользователь оставшиеся 20% записей будет докручивать  | 
|||
| 
    10
    
        badboychik    
     13.04.16 
            ✎
    16:15 
 | 
         
        есть подход когда каждая следующая порция в 2 раза больше предыдущей, тогда реже приходится обращаться на сервер. И в 1С вроде такой же способ     
         | 
|||
| 
    11
    
        mingw    
     13.04.16 
            ✎
    16:19 
 | 
         
        (9) (10) ОК.
 
        А если сортировка по полям таблицы. Сортировать на сервере? Как после сортировки текущей строкой сделать эту же. Или пофиг и сбрасываем. Потом поиск по полю. Тоже на сервере сразу искать и нужный кусок отправлять? Понятно что с отбором попроще. Кстати так и делал давно просто показ первых 100 записей и далее отбор на сервере.  | 
|||
| 
    12
    
        trdm    
     13.04.16 
            ✎
    16:19 
 | 
         
        Хорошая задачка для программиста.
 
        Я бы повозился. Но таблица - таблице рознь.  | 
|||
| 
    13
    
        badboychik    
     13.04.16 
            ✎
    16:21 
 | 
         
        (11) условия отбора и сортировки передавать на сервер, конечно     
         | 
|||
| 
    14
    
        Fragster    
     гуру 
    13.04.16 
            ✎
    16:23 
 | 
         
        я забил и сделал без динамической подгрузки: http://fragster.ru/perfomanceTest/results.php
 
        но вообще экспериментировал с отправкой на клиента размера (для рисования скролла) и текущего "фрэйма" + два "фрэйма" в обе стороны. Когда запас в какую-то сторону становился меньше одного фрэйма - подсасывал новые данные асинхронно. при этом дергать скролл можно было в любую сторону на любое расстояние - он показывал некоторое время пустую табличку, а потом в ней подгружались данные. ноде для этого не обязателен, работало на хттп-сервисах 1с + сериализация json  | 
|||
| 
    15
    
        orefkov    
     13.04.16 
            ✎
    16:43 
 | 
         
        Можно конечно послать изучать код реализации ТабличногоПоля и ПоставщикаДанныхODBC в 1С++, но это очень жестоко.
 
        А так - согласно REST серверу вообще должно быть пофиг, что на клиенте. Клиент должен посылать запросы, в которых указывать, которая порция данных ему нужна. Сервер должен выполнить запрос и вернуть данные. А вот как оптимально написать запрос, который получит именно порцию данных - это уже надо смотреть в каждом конкретном случае. В 1С++ это решалось тем, что всегда был уникальный ключ упорядочивания в запросе, а клиент передавал значение ключа и направление выборки. Например, получение справочника с сортировкой по наименованию: Первый запрос, клиент не передает ключ: select from ttt order by descr, id limit 100 Клиента скроллят, нужны данные, последний полученный ключ - "Варежки", 23 select from ttt where descr>'Варежки' or (descr='Варежки' and id>23) order by descr, id limit 100 Клиента скроллят в конец: select from ttt order by descr desc, id desc limit 100 Клиента скроллят перед 'яблоки', 113 select from ttt where descr<'яблоки' or (descr='яблоки' and id<113) order by descr desc, id desc limit 100 Но не знаю, сможет ли постгресс правильно оптимизнуть эти условия и попасть в индекс.  | 
|||
| 
    16
    
        orefkov    
     13.04.16 
            ✎
    16:44 
 | 
         
        Блин, из-за звёздочек курсив включился.     
         | 
|||
| 
    17
    
        sash-ml    
     13.04.16 
            ✎
    17:42 
 | 
         
        https://datatables.net/examples/ajax/simple.html 
 
        хороший бесплатный JS Фреймворк для табличек, таких полно. но это на фронте. Есть примеры со скролом.  | 
|||
| 
    18
    
        mingw    
     13.04.16 
            ✎
    18:44 
 | 
         
        (17) JS UI  фреймворком с гридами много.
 
        Но хочется то нечто вроде как на vaadin https://vaadin.com/elements/-/element/vaadin-grid Lazy loading a large data set - ленивая загрузка из больших источников данных  | 
|||
| 
    19
    
        trdm    
     13.04.16 
            ✎
    18:49 
 | 
         
        (18) Там другой риск, будет подтягивать много данных - у браузера может оперативки не хватить. А принцып тот-же.     
         | 
|||
| 
    20
    
        mingw    
     13.04.16 
            ✎
    18:50 
 | 
         
        (19) Старые данные нужно из памяти броузера того. Потом если что снова.     
         | 
|||
| 
    21
    
        trdm    
     13.04.16 
            ✎
    19:03 
 | 
         
        Ну и как ты устаревшие данные отличишь от актуальных?     
         | 
|||
| 
    22
    
        Карупян    
     13.04.16 
            ✎
    19:08 
 | 
         
        вон ваадин говорит, что реюзинг дом, так что проблемы старых данных не должно быть     
         | 
|||
| 
    23
    
        mingw    
     13.04.16 
            ✎
    19:08 
 | 
         
        (21) По времени их непоказа на экране.     
         | 
|||
| 
    24
    
        Карупян    
     13.04.16 
            ✎
    19:09 
 | 
         
        (23) не вариант, можно очень быстро скролить     
         | 
|||
| 
    25
    
        Карупян    
     13.04.16 
            ✎
    19:09 
 | 
         
        кстати почему собственно ваадин не берешь?     
         | 
|||
| 
    26
    
        Aceforg    
     13.04.16 
            ✎
    19:15 
 | 
         
        (16) тест
 
        не курсив * курсив * не курсив  | 
|||
| 
    27
    
        mingw    
     13.04.16 
            ✎
    19:15 
 | 
         
        (24) Скорость скроллинга можно учесть. Как параметр для старения.
 
        (25) Попробую vaadin elements. Вдруг что другое есть.  | 
|||
| 
    28
    
        Cyberhawk    
     13.04.16 
            ✎
    19:50 
 | 
         
        (26) Это работает только у модераторов     
         | 
|||
| 
    29
    
        romix    
     13.04.16 
            ✎
    23:48 
 | 
         
        А по-моему скроллинг - зло. Сразу проблема с простановкой точной ссылки и поиском, если содержимое будет индексироваться.     
         | 
|||
| 
    30
    
        mingw    
     13.04.16 
            ✎
    23:55 
 | 
         
        (29) Не понял. А понял. Раздел/секцию поменяли. Был "Убийцы 1С".     
         | 
|||
| 
    31
    
        mingw    
     14.04.16 
            ✎
    00:02 
 | 
         
        Проблему для броузера решил.
 
        В https://vaadin.com/docs/-/part/elements/vaadin-grid/datasources.html есть grid.items = function(params, callback) { setTimeout(function() { callback(employees.slice(params.index, params.index + params.count)); }, 400); }; grid.size = employees.length; На сервер буду передавать params.index (верхний видимый) и params.count (количество видимых). Сервер по последовательности их заранее (упреждающее чтение) подготовит данные из БД. Далее будет отсылать сразу готовые данные без запроса к БД. Еще можно сделать кэш на JS в броузере. В виде массива полученных данных. Куда складывается все пришедшее с сервера. И грид будет слайсить из этого кэш массива.  | 
|||
| 
    32
    
        mingw    
     14.04.16 
            ✎
    00:04 
 | 
         
        (31)+ Осталось придумать алгоритмы для сервера. По таблице ВремяЗапроса|ИндексНачальнойСтроки|КоличествоСтрок. 
 
        Предсказывать следующие данные которые будут запрошены.  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |