Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511

Задержки с обновление графика Chart js

13.05.2021, 12:20. Показов 5384. Ответов 29

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть задача, не совсем по web программированию, но напрямую с ним связанная. На микроконтроллер (МК) написал http сервер, который содержит страничку (html) и функции обмена данными с микроконтроллером: отправка данных в МК, а так же отправка GET запросов для получения массива данных, на основании которого строится график (Chart js), который должен обновляться каждую секунду. Проблема в том, что этот график не обновляется ежесекундно. Он может обновится через несколько секунд, потом подвиснуть секунд на 10, потом пару раз обновиться и опять подвиснуть, в общем сплошные тормоза.
При всем при этом судя по HTTP сессии, все приходити уходит нормально, GET запросы отправляются и на них приходит ответ. Ищу уже который день, гле может быть узко место в системе? Есть подозрение, что браузер (Google Chrome) не справляется, но не думаю, что он не способин раз в секунду обновить график. В теме с мк уже спрашивал, ответа не получил. Сколько сам читаю, изучаю, есть подозрение, что мк свою часть выполняет нормально, дело не в нем
Код html страницы:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<!DOCTYPE html>
<html lang="en">
 
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" href="styles.css">
  <script src="js/Chart.min.js"></script>
  <title>Detection System</title>
 
  <script>
    var xhr;
    var myChart;
    var idTimer2;
 
    function onload(){
      xhr = new(XMLHttpRequest);
 
      var ctx = document.getElementById("myChart");
      var data16Array = new Uint16Array(512);
 
      myChart = new Chart(ctx, {
        type: 'line',
        data: {
          labels: ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                    "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""],
          datasets: [{
            label: 'Side',
              data: data16Array,
              backgroundColor: 'rgba(150, 150, 0, 0.0)',
              borderColor: 'rgba(51, 255, 85, 1)',
              borderWidth: 2,
              pointStyle: 'line',
              pointRadius: 0
          }]
        },
        options: {
          tooltips: {
            enabled: false
          },
          animation: {
              duration: 0
          },
          responsive: true,
          scales: {
            xAxes: {                          
              min: 0,
                max: 512,
              stacked: true,
              ticks:{
                  stepSize : 64
              }
            },
            yAxes: {                            
                min: 0,
              max: 4096,
              stacked: true,
                ticks:{
                stepSize : 256
              }
            }
          }
        } 
      });            
    }
 
    function Timer2(){
      xhr.open("GET", "content.bin?r=" + Math.random(), true);
      xhr.responseType = "arraybuffer";
      xhr.onload = function (oEvent) {
          var uint16Array = new Uint16Array(this.response);
          myChart.data.datasets[0].data = uint16Array;
          myChart.update();             
      }
      xhr.send(null);
      idTimer2 = setTimeout(Timer2, 1000);
    }
    function buttom1(){
      xhr.open("GET", "buttom.html?c=1", true);
      xhr.responseType = "text";
      xhr.send(null);
    }
    function buttom2(){
      xhr.open("GET", "buttom.html?c=2", true);
      xhr.responseType = "text";
      xhr.send(null);
    }
    function startwork(){
      document.getElementById('butwork').innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;<input class = "butcolor" type="button" style="color: #ffffff; background-color: #000000;" onclick="stopwork()" value="Stop"/>';
    }
    function stopwork(){
      document.getElementById('butwork').innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;<input class = "butcolor" type="button" style="color: #ffffff; background-color: #000000;" onclick="startwork()" value="Start"/>';
    }
    function startchart(){
      document.getElementById('butchart').innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;<input class = "butcolor" type="button" style="color: #ffffff; background-color: #000000;" onclick="stopchart()" value="Stop Chart"/>';
      Timer2();
    }
    function stopchart(){
      document.getElementById('butchart').innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;<input class = "butcolor" type="button" style="color: #ffffff; background-color: #000000;" onclick="startchart()" value="Start Chart"/>';
      clearTimeout(idTimer2);
    }
  </script>
</head>
 
<body onload="onload()">
  <div id="page">
    <div id="header"><h1>Detection System</h1></div>
 
    <div id="sidebar"> 
      <ul>
        <div id="butwork">
            &nbsp;&nbsp;&nbsp;&nbsp;<input class = "butcolor" type="button" style="color: #ffffff; background-color: #000000;" onclick="startwork()" value="Start"/>              
        </div>
 
        <p></p> 
        <div id="butchart">
          &nbsp;&nbsp;&nbsp;&nbsp;<input class = "butcolor" type="button" style="color: #ffffff; background-color: #000000;" onclick="startchart()" value="Start Chart"/>   
        </div> 
        <p></p>
 
        <div class = "butcenter">
            <input class = "butcolor" type="button" style="color: #ffffff; background-color: #000000" onclick="buttom1()" value="Function1"/>
             <br><br>
             <input class = "butcolor" type="button" style="color: #ffffff; background-color: #000000" onclick="buttom2()" value="Function2"/>
             <br><br>
        </div> 
      </ul>
    </div>
 
    <div id="content">
      <p></p> 
        <canvas id="myChart" width="800" height="300"></canvas>            
      <p></p>
    </div>
 
    <div id="footer"> </div>
  </div>
</body>
 
</html>
Часть кода сервера с формаированием ответа
C
1
2
3
4
5
6
7
8
9
10
else if (strncmp((char const *)buf,"GET /js/Chart.min.js",20)==0)
{
    fs_open(&file, "/js/Chart.min.js");
    netconn_write(newconn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_NOCOPY);
    fs_close(&file);
}
else if (strncmp((char const *)buf,"GET /content.bin",16)==0)
{
    DynWebPage(newconn);    // Формирование массива из 512 16битных рандомных чисел и их отправка
}
Так же скриншот сессии HTTP
Миниатюры
Задержки с обновление графика Chart js  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2021, 12:20
Ответы с готовыми решениями:

обновление графика (Chart)
при изменении значений и выборе другой функции(при помощи RadioButton) надо, чтобы график изменялся, т.е. если при запуске программы 1-ый...

Chart - диаграмма: изменить точность делений графика, установить центр графика в (0,0)
Создал диаграмму (все прекрасно считается точки расставляются), но есть проблемыЖ 1. В случае диаграммы - &quot;Спектр амплитуд&quot;,...

Обновление формы без задержки
Добрый день. Пытаюсь создать утилиту для печати погрузочных ярлыков. Возникло две проблемы с формами. 1я На форме есть подчиненная...

29
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
14.05.2021, 02:49
DmitryDDDD, попробуйте 105 поместить после 102
JavaScript
96
97
98
99
100
101
102
103
104
105
106
function Timer2(){
      xhr.open("GET", "content.bin?r=" + Math.random(), true);
      xhr.responseType = "arraybuffer";
      xhr.onload = function (oEvent) {
          var uint16Array = new Uint16Array(this.response);
          myChart.data.datasets[0].data = uint16Array;
          myChart.update();
          idTimer2 = setTimeout(Timer2, 1000); 
      }
      xhr.send(null);
    }
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 05:45  [ТС]
shvyrevvg, Я, конечно, попроую сейчас, но как это влияет? Там же идет повторный запуск таймера, а тут функция бновления графика

Добавлено через 10 минут
не помогло, запрос теперь идет не цикличный, а разовый, как только кнопку нажимаю, отсылается один GET запрос и все
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
14.05.2021, 06:23
DmitryDDDD, в консоли браузера есть ошибки?
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 07:40  [ТС]
shvyrevvg, как оказалось да, и в wireshark проскакивают ретрансмиты
Миниатюры
Задержки с обновление графика Chart js   Задержки с обновление графика Chart js  
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 07:59  [ТС]
Не силен я в JS, да и в HTML, на стороне мк для тестирования я формирую массив из 512 16битных чисел, которые отправляются клиенту в виде массива из 1024 8битных чисел. Соответственно он должен пересобрать их обратно в 16 битные и отразить на графике. Судя по куче ошибок такого плана, где-то что-то идет с этим массивом не так
Миниатюры
Задержки с обновление графика Chart js  
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
14.05.2021, 08:14
DmitryDDDD, попробуйте так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function Timer2() {
    xhr.open('GET', 'content.bin?r=' + Math.random(), false);
    xhr.responseType = 'arraybuffer';
    xhr.send(null);
 
    if (xhr.status != 200) {
      console.log('Error: ' + xhr.status);
      return;
    }
    
    var byteArray = new Uint8Array(xhr.response);
    console.log('length: ' + byteArray.byteLength)
    var uint16Array = new Uint16Array(xhr.response);
    myChart.data.datasets[0].data = uint16Array;
    myChart.update();
 
 
  idTimer2 = setTimeout(Timer2, 1000);
}
и посмотрите что в консоль выводится
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 08:20  [ТС]
shvyrevvg, Вот
Миниатюры
Задержки с обновление графика Chart js  
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
14.05.2021, 08:26
DmitryDDDD, хм, тогда так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function Timer2() {
  xhr.open('GET', 'content.bin?r=' + Math.random(), true);
  xhr.responseType = 'arraybuffer';
  xhr.onload = function (oEvent) {
    if (xhr.status != 200) {
      console.log('Error: ' + this.status);
      return;
    }
    var byteArray = new Uint8Array(this.response);
    console.log('length: ' + byteArray.byteLength)
 
    var uint16Array = new Uint16Array(this.response);
    myChart.data.datasets[0].data = uint16Array;
    myChart.update();
    idTimer2 = setTimeout(Timer2, 1000)
  };
  xhr.send(null);
 
}
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 08:29  [ТС]
shvyrevvg,
Миниатюры
Задержки с обновление графика Chart js  
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
14.05.2021, 08:38
DmitryDDDD, массивы разной длины приходят
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 08:44  [ТС]
shvyrevvg, Это они похоже принимаются разной длины, вот например 2 запроса и 2 ответа
Т.е. уходят пакеты по 1078 где 1024 это данные, а 54 это заголовки, а принимается уже что-то не то
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 08:46  [ТС]
Скриншоты
Миниатюры
Задержки с обновление графика Chart js   Задержки с обновление графика Chart js  
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
14.05.2021, 08:51
DmitryDDDD, а в каком виде данные отправляются?
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 08:54  [ТС]
shvyrevvg,
Вот функция формирующая эти данные и отправляющая
Генератор случайных чисел, заголовки прикрепляются
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
static const unsigned char PAGE_HEADER_200_OK[] = {
  //"HTTP/1.1 200 OK"
  0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
  0x0a,
  //zero
  0x00
};
static const unsigned char PAGE_HEADER_SERVER[] = {
  //"Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)"
  0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
  0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
  0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
  0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
  //zero
  0x00
};
static const unsigned char PAGE_HEADER_CONTENT_TEXT[] = {
  //"Content-type: text/html"
  0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
  0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a,
  //zero
  0x00
};
//*
static const unsigned char PAGE_HEADER_CONTENT_STREAM[] = {
  //"Content-Type: application/octet-stream"
  0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x54,0x79,0x70,0x65,0x3a,0x20,0x61,0x70,
  0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2f,0x6f,0x63,0x74,0x65,0x74,0x2d,
  0x73,0x74,0x72,0x65,0x61,0x6d,0x0d,0x0a,
  //zero
  0x00
};
static const unsigned char PAGE_HEADER_LEN[] = {
  //"Content-Length: "
  0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20,
  //zero
  0x00
};
static const unsigned char PAGE_HEADER_BYTES[] = {
  //"Accept-Ranges: bytes"
  0x41,0x63,0x63,0x65,0x70,0x74,0x2d,0x52,0x61,0x6e,0x67,0x65,0x73,0x3a,0x20,0x62,
  0x79,0x74,0x65,0x73,0x0d,0x0a,0x0d,0x0a,
  //zero
  0x00
};
 
void DynWebPage(struct netconn *conn)
{
  portCHAR PAGE_BODY[1300];
  uint16_t len = 0;
  int i;
  PAGE_BODY[0] = 0;
  int val = 0;
  sprintf(PAGE_BODY,"%s%s%s%s%drn%s",PAGE_HEADER_200_OK,PAGE_HEADER_SERVER,PAGE_HEADER_CONTENT_STREAM,PAGE_HEADER_LEN,1024,PAGE_HEADER_BYTES);
  len = strlen(PAGE_BODY);
  for(i=0;i<512;i++)
  {
      val = HAL_RNG_GetRandomNumber(&hrng)%4096;
      PAGE_BODY[len + i * 2] = (uint8_t)val;
      PAGE_BODY[len + i * 2 + 1] = (uint8_t)(val>>8);
  }
  netconn_write(conn, PAGE_BODY, strlen((char*)PAGE_BODY) + 1024, NETCONN_COPY);
}
По сути просто массив 1024 8битных чисел
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
14.05.2021, 09:36
DmitryDDDD, можно скрин из инструменты разработчика -> Network(XHR) заголовки и тело ответа
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 09:42  [ТС]
shvyrevvg, Скрин структуры ответного пакета с данными на GET запрос клиента из wireshark?
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 09:45  [ТС]
shvyrevvg, Я не о том подумал, нашел
Как тело ответа открыть не могу найти
Миниатюры
Задержки с обновление графика Chart js   Задержки с обновление графика Chart js  
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
14.05.2021, 09:48
DmitryDDDD, вкладка Response
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
14.05.2021, 09:55  [ТС]
shvyrevvg, Тут видимо декодирование какое-то надо
Третий скрин это второй ответ, первые два - первый
Миниатюры
Задержки с обновление графика Chart js   Задержки с обновление графика Chart js   Задержки с обновление графика Chart js  

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2021, 09:55
Помогаю со студенческими работами здесь

Шкала графика Chart Control - Сделать так, чтобы значения графика были с 2 знаками после запятой
Здравствуйте! У меня такая проблема: В базе данных есть числовые данные, на основе которых рисуется график Подскажите, пожалуйста,...

Обновление данных в базе без задержки
Поясните как обойти такой глюк: Я исользую два объекта работающие с одной и той же базой. adoMaterials - ADO Data Control ...

Графика в Chart
Рисую вертикальную линию поверх Chart по событию MouseDown Graphics g = chart1.CreateGraphics(); XX = e.X; ...

Построение графика в chart
Нужно построить график функции ln((x+1)/(x+2)). Когда строю график то строится только 1 часть (от минус бесконечности до 2), и не строится...

Параметры графика в chart
Здравствуйте. По заданию нужно изменять параметры графика chart. Нашёл только толщину и цвет линии. Но ведь есть какие нибудь ещё, напишите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru