Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 349

Оптимальный алгоритм формирования констант при использовании их в в разных местах кода

21.12.2024, 10:54. Показов 2176. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подумал, не помешает обратиться за советом, м.б. кто-нибудь более умный подскажет вариант, который не увидел:

Формируются исходные данные, например массив регионов:
JavaScript
1
m_reg = new Array ("Москва и область", "Нижний Новгород и область");
Данные данные используются в разных частых кода (функциях).
Возможно, потребуется данный массив отредактировать или добавить новый регион.
Не могу решить вопрос, где и как размещать такие данные .

Какие вижу варианты:
• Объявлять в каждой функции как const ?
Но, если их (данные) объявлять в каждой из них, есть вероятность, что где-то можно забыть внести исправления.

• Во многих источниках написано, что использование глобальных переменных - плохой тон. Хотя сам и придерживаюсь иной точки зрения, но в данном случае (если такие данные не распространяются на весь код) считаю этот вариант неразумным (особенно, если таких данных м.б. много).

• Использовать БД ? Вряд ли лучший вариант

• Динамическая загрузка таких данных ? Но, опять же, если их много и они используются в разных местах кода будет ли она оптимальной ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2024, 10:54
Ответы с готовыми решениями:

lwjgl и баг(артефакты в разных местах при повторе одного и того же кода)
Всем доброго вечера. Недавно занимаюсь c lwjgl. Вот просто рисуя старым добрым способом от руки, заметил вот такую интересную вещь. Может...

lwjgl и баг(артефакты в разных местах при повторе одного и того же кода)
Всем доброго вечера. Недавно занимаюсь c lwjgl. Вот просто рисуя старым добрым способом от руки, заметил вот такую интересную вещь. Может...

Отображение кода в разных местах на разных разрешениях
Всем доброго времени суток! Возникла задача отображать код в разных местах на разных разрешениях. Прилагаю картинку, там все...

60
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3807 / 1644 / 428
Регистрация: 14.03.2022
Сообщений: 4,091
21.12.2024, 19:37
Студворк — интернет-сервис помощи студентам
755, так и есть... Мы с тобой говорим о разном.

Я писал про получение данных запросом, используя тот же fetch()...
Твой же вариант - это динамическое подключение.
1
 Аватар для voraa
1235 / 1130 / 176
Регистрация: 21.01.2024
Сообщений: 5,144
21.12.2024, 19:43
Цитата Сообщение от 755 Посмотреть сообщение
Посмотрел пару серьезных сайтов, где работают профессиональные программисты (типа авито или яндекса) просто для интереса - в html странице было очень мало данных,
А сколько js и css посмотрели?
Не надо заниматься такой ерундой, как подгрузка маленького файла, только тогда, когда он понадобился.
(Ну или используйте модули).
Сейчас в сайтах используются кучи сторонних библиотек. И никто не переживает, что грузится 100К библиотеки, а реально из нее используется 3-4 функции.
1
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 349
21.12.2024, 20:59  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Я писал про получение данных запросом, используя тот же fetch()...
Твой же вариант - это динамическое подключение.
Спасибо, krvsa, хотя и удивился, что говорим о разном, ибо и мой вариант хоть и называется динамической загрузкой, но по умолчанию асинхронная. А вот изучение fetch(), когда о нем упоминали, оставил на потом - решил, что хватает и такой загрузки - по принципу, описанному ранее barabarОМ - вначале запуск сайта, а потом уже его улучшение или модификация. А самое главное, не увидел у него плюсов по сравнению с моим вариантом использования загрузки.

Цитата Сообщение от voraa Посмотреть сообщение
А сколько js и css посмотрели?
Совсем не смотрел, даже не разбирался, как можно смотреть. кстати и сам html смотрел только по причине - было интересно, используют ли они минификацию или нет.
Спасибо, voraa, за комментарий - теперь, действительно не буду в какой-то мере зацикливаться на том, как загружать файлы - тем более, что в плане реализации алгоритм может быть заметно проще - у меня иногда бывает при первоначальной динамической загрузке модулей функция не определена (ошибка понятна, файл не успел загрузиться, а я его на окончание загрузки не проверяю - алгоритм не доработан)

Но мы немного отклонились от темы вопроса.
А по нему у меня остался один к krvsa, если конечно не затруднит с ответом:
Цитата Сообщение от krvsa Посмотреть сообщение
либо в каждой функции объявлять их как локальные с ведением реестра таких данных на предмет корректировки ?
Это вообще ерунда.
Почему? Как раз думал остановиться на этом варианте
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3807 / 1644 / 428
Регистрация: 14.03.2022
Сообщений: 4,091
21.12.2024, 21:29
Цитата Сообщение от 755 Посмотреть сообщение
Почему?
Источник данных желательно иметь один, а не целый реестр того, где он находится.
1
 Аватар для voraa
1235 / 1130 / 176
Регистрация: 21.01.2024
Сообщений: 5,144
21.12.2024, 21:33
Цитата Сообщение от 755 Посмотреть сообщение
теперь, действительно не буду в какой-то мере зацикливаться на том, как загружать файлы - тем более, что в плане реализации алгоритм может быть заметно проще - у меня иногда бывает при первоначальной динамической загрузке модулей функция не определена (ошибка понятна, файл не успел загрузиться, а я его на окончание загрузки не проверяю - алгоритм не доработан)
Всякие динамические загрузки часто усложняют программу. Ведь приходится выносить в отдельную функцию то, что надо сделать, когда скрипт загрузится.
Что бы понять, что вам нужно, надо знать про какие объемы речь идет. У вас файлы с этими данными на десятки килобайт?
Почему их просто нельзя с самого начала статически подключать на тех страницах, где они нужны?
0
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 349
21.12.2024, 21:39  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Источник данных желательно иметь один, а не целый реестр того, где он находится
Спасибо, но, как часто бывает, каждый вариант имеет свои плюсы и минусы, вопрос в том, что перевешивает. А на мой взгляд не очевидно, что данный плюс (хотя и очень важный) перевешивает плюсы других вариантов (из тех. что увидел). По крайней мере, если это чисто текстовые визуальные поля.
0
21.12.2024, 21:50

Не по теме:

Помню работал я с одним челом. Решил он заняться ЗОЖ и приобрести себе велик. Решил это в начале весны. Очень ответственно к этой задаче подошёл. Стал разбираться во всех моделях и различных запчастях. Зарегился на вело-форуме и там тоже задавал вопросы. На работе постоянно сидел за компом, выбирая себе велик. В итоге купил бэушный только осенью, когда цены упали. Я тогда у него спросил: "Ну и нахрена он тебе сейчас? Уже начались дожди, а скоро полетят белые мухи. На велике сильно не поездишь".

0
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 349
21.12.2024, 21:55  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
Всякие динамические загрузки часто усложняют программу. Ведь приходится выносить в отдельную функцию то, что надо сделать, когда скрипт загрузится.
Действительно с этим столкнулся.. Хотя и не существенно. Как упомянул из десятка файлов, для одной функции надо ставить проверку готовности загрузки. Пока больше ошибок не всплывало.

Цитата Сообщение от voraa Посмотреть сообщение
Что бы понять, что вам нужно, надо знать про какие объемы речь идет. У вас файлы с этими данными на десятки килобайт?
Почему их просто нельзя с самого начала статически подключать на тех страницах, где они нужны?
Пока поступал 2 способами: либо как глобальная переменная (константа), если предполагаю, что она будет использоваться в большинстве страниц либо путем дублирования как const непосредственно в функции (но понял, что надо выработать по возможности единый алгоритм, чтобы потом не запутаться), т.е. именно статически на тех страницах, где они нужны (если правильно понял термин страницы). Если да, то именно такой вариант по мнению krvsa далеко не лучший.

Добавлено через 4 минуты
Цитата Сообщение от barabar Посмотреть сообщение
Я тогда у него спросил: "Ну и нахрена он тебе сейчас? Уже начались дожди, а скоро полетят белые мухи. На велике сильно не поездишь".
Вполне разумный подход при покупке серьезной вещи. Он не на один сезон - поездит со следующего года.
В свое время покупали байдарки (годах в 90-х). Еще в том году плавали по Оке.
Ps.
Обычно комментарии не по теме на самом деле имеют отношение к теме (вспоминая ту же мисс Марпл). Но признаюсь, не хватило ума и не уловил связи.
Правда иногда и совсем не по теме не помешает.
0
 Аватар для voraa
1235 / 1130 / 176
Регистрация: 21.01.2024
Сообщений: 5,144
21.12.2024, 21:59
Цитата Сообщение от 755 Посмотреть сообщение
Пока больше ошибок не всплывало.
Не всплывало - не значит, что не всплывут. При работе на реальном сервере любые затыки могут быть.
Цитата Сообщение от 755 Посмотреть сообщение
либо путем дублирования как const непосредственно в функции
Это вообще никуда не годится. Зачем в каждой функции иметь одинаковые данные? И их в каждой функции грузить? Или я чего то глобально не понимаю. Вы хоть примерно кодом упрощенным покажите.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от barabar Посмотреть сообщение
Я тогда у него спросил: "Ну и нахрена он тебе сейчас? Уже начались дожди, а скоро полетят белые мухи. На велике сильно не поездишь".
По Москве курьеры сейчас только так носятся.
Да что курьеры, у меня сосед (возраст за 70) на велике ездит. Вот буквально вчера видел его с великом

1
Заблокирован
21.12.2024, 22:06
Цитата Сообщение от 755 Посмотреть сообщение
Вполне разумный подход при покупке серьезной вещи.
Бэушный велик такая же серьёзная вещь, как и твой сайт. Знаешь что самое главное в сайтостроении? Самое главное это идея. Сама реализация это мелочи. Сейчас вообще можно код писать с помощью ИИ. Чел потратил многие часы, что бы выбрать себе бэушный велик. Мог бы потратить это время намного интереснее. Я всё лето ездил на работу на велике, а он всё лето выбирал себе. Так и ты вместо того, что бы делать сайт занимаешься ерундой. Что бы научиться программировать - надо программировать. Это не я сказал. Но сказано очень верно.

Добавлено через 2 минуты
Цитата Сообщение от voraa Посмотреть сообщение
Вот буквально вчера видел его с великом
По грязи не наездишься. Я пока головой не тронулся, что бы под дождем ездить на велосипеде.
0
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 349
21.12.2024, 22:16  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
Не всплывало - не значит, что не всплывут. При работе на реальном сервере любые затыки могут быть.
Спасибо, буду иметь в виду.

Цитата Сообщение от voraa Посмотреть сообщение
Это вообще никуда не годится. Зачем в каждой функции иметь одинаковые данные? И их в каждой функции грузить? Или я чего то глобально не понимаю. Вы хоть примерно кодом упрощенным покажите.
На счет каждой функции не все так однозначно. А как пример постараюсь подготовить завтра на свежую голову - тут не просто надо будет что-то скопировать.

Поэтому пока попрощаюсь с благодарностью за участие
0
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 349
22.12.2024, 13:17  [ТС]
voraa, публикую пример кода.
Подчеркиваю, пример не рабочий, ибо цель темы - выработать алгоритм.

1.html
HTML5
1
2
3
4
5
6
7
8
9
10
<div id="dKn_dat" class= "rsp "> </div>
<div id="men_dat" class= "rsp "> </div> 
<button  onclick="get_frm ();">Вывод экранной формы </button>
 
<script>
var i_perDat = 0;
let m_periodDat = new Array;
 m_periodDat = ["Сутки",   "Неделя",  "Месяц",  "Квартал" ];
document.querySelector("#dKn_dat").innerHTML = '<button id="kn_dat"  onclick="get_knDat(0);">'+m_periodDat [i_perDat]+'</button>';
</script>
1.js
JavaScript
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
{
  let m_periodDat = new Array;
  m_periodDat = ["Сутки",   "Неделя",  "Месяц",  "Квартал" ];
 
  function get_knDat () {
    for (i= 0; i< m_periodDat.length; i++)  {
     st += '<div id="d_'+i +'" class="stl_1">\
        <button id="b_'+i +'" class="st_men" onclick="'+ nam_func+' ('+i +');"> '+ 
        m_periodDat [i]+
        ' </button> </div>\
        ';
    }
    document.querySelector("#men_dat").innerHTML = st;
    document.addEventListener('keydown', get_key );
  }
 
  function get_key (e) {
    switch (e.keyCode) {
    case 13:            // Ret
        document.querySelector("#kn_dat").textContent = m_periodDat [i_perDat];
        document.removeEventListener('keydown', get_key);   
        break;
    }
  }
}
Формирование экранной формы и вывод на экран

вариант 1 (php формирует ЭФ и в ней же m_periodDat[] )
JavaScript
1
2
3
 function get_frm (e) {
    вызывается через аякс 1.php и передается параметр - индекс m_periodDat
 }
PHP
1
2
3
 $m_k_sek= array ("Сутки",   "Неделя",  "Месяцв",  "Квартал" );
 ...
 echo "<br>Период: ". $query;

вариант 2 (php только формирует данные, а m_periodDat[] выводится в js )
2.js
JavaScript
1
2
3
4
 function get_frm () {
    // вывод экранной формы
    document.querySelector("#__").innerHTML = m_periodDat [i_perDat];
}
Если надо, могу прокомментировать (не стал сразу, потому что они займут не одну строку)

Кстати, в 1.js группу функций, выполняющих одну задачу объединил скобками { } . Не могу вспомнить,
придумал ли сам такую комбинацию (проверил, у меня работает) или нашел в каком-то источнике.
Было бы интересно узнать, можно ли так использовать и есть ли у такого блока функций термин - искал в интернете под данным термином - не нашел.
0
Заблокирован
22.12.2024, 13:23
Цитата Сообщение от 755 Посмотреть сообщение
let m_periodDat = new Array;
 m_periodDat = ["Сутки",   "Неделя",  "Месяц",  "Квартал" ];
Это очень экономично
Цитата Сообщение от 755 Посмотреть сообщение
вызывается через аякс 1.php и передается параметр - индекс m_periodDat
Это вообще супер А что аяксом подтягивать будешь? Неужели в файле php будет просто массив? Раз такое дело с аяксом, то надо этот массив в базу данных засунуть и потом по запросу оттуда доставать
0
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 349
22.12.2024, 13:35  [ТС]
Цитата Сообщение от barabar Посмотреть сообщение
Это вообще супер
Смотрю на смайлик и ухмылку
и думаю, это ирония или действительно супер - вроде бы решение казалось самым обычным.


Цитата Сообщение от barabar Посмотреть сообщение
Неужели в файле php будет просто массив? Раз такое дело с аяксом, то надо этот массив в базу данных засунуть и потом по запросу оттуда доставать
Такой вариант - размещение данных в базе упоминал ранее просто как вариант, но не думаю, что это разумное решение: если бы программа была бы просто для себя - тогда да, это было бы наилучшим вариантом. Но, если будет скажем, хотя бы 100 000 посетителей/сутки, то для каждого из них обращаться в базу за такими данными - думаю, очень плохое решение.
0
Заблокирован
22.12.2024, 13:49
755, перфекционист это диагноз.
Цитата Сообщение от 755 Посмотреть сообщение
Но, если будет скажем, хотя бы 100 000 посетителей/сутки
Никогда у тебя столько не будет. Поверь мне. Тебе хотя бы доделать до конца, что задумал. У меня в этом есть большие сомнения. С таким подходом маловероятно. Два дня разбираться куда массив засунуть. Это пипец...
Другие тебе тоже сказали, что эти несколько строк ни на что не влияют. Сколько байт там? Даже килобайта не будет. А сейчас в инэте есть ресурсы где при открытии страницы грузятся мегабайты.

Добавлено через 49 секунд
Цитата Сообщение от 755 Посмотреть сообщение
это ирония или действительно супер
Это ирония.
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3807 / 1644 / 428
Регистрация: 14.03.2022
Сообщений: 4,091
22.12.2024, 13:52
Цитата Сообщение от 755 Посмотреть сообщение
Но, если будет скажем, хотя бы 100 000 посетителей/сутки, то для каждого из них обращаться в базу за такими данными - думаю, очень плохое решение.
Это обычное дело...

Если данные нужны такому большому числу посетителей - их так и будут раздавать.
1
 Аватар для voraa
1235 / 1130 / 176
Регистрация: 21.01.2024
Сообщений: 5,144
22.12.2024, 14:05
Зачем тянуть из php если они там не вычисляются как то, а статические?
Можно просто fetch закачивать из json
0
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 349
22.12.2024, 14:09  [ТС]
Цитата Сообщение от barabar Посмотреть сообщение
Никогда у тебя столько не будет. Поверь мне. Т
Время покажет.
Будет намного больше, чем 100 000 - поверь мне.
Цитата Сообщение от barabar Посмотреть сообщение
Два дня разбираться куда массив засунуть. Это пипец..
• во-первых, не трачу 2 дня ибо параллельно идет процесс и этот вопрос больше рассчитан на будущее
• во-вторых, и это самое важное, хотя и потратил немало времени на данную тему, но надо быть непорядочным и неблагодарным, чтобы не отвечать на комментарии, ибо сам обратился за помощью и другие тратят свое время на меня.

Цитата Сообщение от barabar Посмотреть сообщение
Это ирония.
Непонятна ирония, ибо не претендовал на что-либо данным примером.
0
Заблокирован
22.12.2024, 14:20
Цитата Сообщение от 755 Посмотреть сообщение
Будет намного больше, чем 100 000 - поверь мне.
10 посетителей в сутки это твой максимум. Я знаю о чём говорю. И даже эти 10 посетителей из круга твоих знакомых и родственников.
Хостинг уже выбрал? Надо уже начинать... за год разберешься и выберешь самый подходящий
0
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 349
22.12.2024, 14:36  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
Зачем тянуть из php если они там не вычисляются как то, а статические?
Можно просто fetch закачивать из json
voraa, php привел как возможный вариант, что и там м.б. объявлена константа и в таком случае данные уже дублируются, если их не разместить в БД.
Реально же пока в php передаю только индекс массива и уже он является фильтром для выборки данных. А статичная информация из массива выводится в другой функции js (get_frm ()). Объединить их все в один блок не думаю разумным решением, ибо они (функции) относятся к разным задачам. И получается то, о чем вы с krvsa, говорили ранее: такие данные д.б. в одном месте (если правильно понял)

fetch когда-то ранее упоминали в другой теме - посмотрел, решил что пока он не стоит того, чтобы тратить время на егоь изучение (могу обойтись и без него). Но, возможно, не прав -надо будет вернуться к нему. Спасибо всем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2024, 14:36
Помогаю со студенческими работами здесь

Изменение глобальных констант при разных процедурах
Здравствуйте, появилась проблема с имзенением глобальных констант. У меня есть игра Сапёр, в которой нужно создать режимы...

Ошибка при использовании WordApplication для формирования отчета
Программа формирует выходной документ Word, используя для этого данные из таблиц BDE. Выходной документ имеет определенный строгий формат,...

Построить несколько графиков параметрически заданной функции при разных значениях констант а, b, λ
Построить несколько графиков параметрически заданной функции при разных значениях констант а, b, λ. Оси графика – х и y, которые...

Как построить несколько графиков параметрически заданной функции при разных значениях констант а, b, λ
Построить несколько графиков параметрически заданной функции при разных значениях констант а, b, λ. Оси графика – х и y, которые...

Построить несколько графиков параметрически заданной функции при разных значениях констант а, b, λ. Оси графика – х и y, которые зависят от аргумен
Построить несколько графиков параметрически заданной функции при разных значениях констант а, b, λ. Оси графика – х и y, которые...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru