Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Оптимизация скриптов (https://javascript.ru/forum/misc/81421-optimizaciya-skriptov.html)

Владимѣръ 24.11.2020 23:15

Оптимизация скриптов
 
Здравия! У меня есть проблема, в скрипте много вычислений. Подскажите, пожалуйста, как можно было бы вынести отдельные большие функции отдельными модулями, файлами, подключаемыми к данному скрипту (js). Заранее благодарю!

voraa 25.11.2020 08:29

А в чем проблема? Что оптимизировать нужно?
Долго грузится?
Долго вычисляет? (отдельные модули тут не помогут)
Какие модули вы собираетесь использовать (модули ES6?)

Владимѣръ 25.11.2020 14:45

Нет, грузится не долго. Скрипт получается очень большим, особенно некоторые функции в нем. Хотелось бы вынести отдельные функции в отдельный файл, или файлы, чтобы с основным скриптом было удобно работать. Я читал о модулях (export function(а), import{а}), но что-то наверное делал не так, потому что не заработало. Нужен пример, или что-то другое. Я еще начинающий, и слабозрячий... Пишу в Notepad++, без отладчика...

Владимѣръ 25.11.2020 14:56

Подскажите, если можно.

laimas 25.11.2020 15:08

Цитата:

Сообщение от Владимѣръ
Хотелось бы вынести отдельные функции в отдельный файл, или файлы, чтобы с основным скриптом было удобно работать.

Ну так вынесите и просто подключайте

<script src="path/name1.js"></script>
<script src="path/name2.js"></script>
...

Владимѣръ 25.11.2020 15:24

Благодарю, попробую.

Владимѣръ 25.11.2020 19:26

Так не работает, по всей видимости по тому, что переменные у меня определяются не в вынесенных функциях, а в основном скрипте. Они вводятся пользователем.

laimas 25.11.2020 19:33

Если правильно разнести по файлам, то все будет работать, тем более функции подключаемые.

Владимѣръ 25.11.2020 19:39

У меня пользователь вводит данные, и на их основании выполняется много рассчетов. Когда все пишу одним скриптом - все работает. А как-то вынести функцию, которая оперирует общими данными - не могу. Не понимаю, как сделать, чтобы и функцию вынести, и чтобы она видела переменные общего скрипта...

laimas 25.11.2020 19:43

Значит вы нарушаете связи, вызовы и т.п. при разделении. Ну кто вам может сказать, что вы не так делаете, не зная кода?

Владимѣръ 25.11.2020 20:32

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

voraa 25.11.2020 20:47

Цитата:

Сообщение от Владимѣръ
Просто в функциях, которые я выношу, не объявлены все переменные

Это не имеет значения. Внешняя (глобальная) переменная должна быть объявлена к моменту выполнения функции, а не ее определения.
Как вы загружаете скрипты? Как обычные или как модули? Переменные объявленные в модулях не будут видны, кроме экспортируемых и импортируемых. Для обычных скриптов любая внешняя переменная (объявленная вне функции) будет видна где угодно (если, конечно в данной функции нет локальных переменных с таким же именем)

Владимѣръ 26.11.2020 13:04

Вчера засыпал, и меня осенило: это же у меня весь скрипт идет внутри функции 'on-submit'. Получается, что и функции, которые я выношу не видят переменных. Вот причина! Значит наверное уже ничего не поделаешь... или что-то можно?

voraa 26.11.2020 13:07

Вынести переменные из функции 'on-submit' на глобальный уровень.

Владимѣръ 26.11.2020 13:10

А как это сделать?

voraa 26.11.2020 13:16

Ну писать
var x (или let x) не внутри функции, а снаружи.

Владимѣръ 26.11.2020 13:29

Так в том то и дело, что я извлекаю данные из формы внутри функции 'on-submit' и там же продолжаю работать. Я из функции могу выводить Return'ом только одно значение, а у меня их много. Просто может я как-то своеобразно извлекаю данные из формы, но у меня получилось только так:
$('form').bind('submit', function(e) {
		let Name1 = $(this).children('input[name="Name1"]').val();
		let Name2 = $(this).children('input[name="Name2"]').val();
		let dat = $(this).children('input[name="dat"]').val();
		let tim = $(this).children('input[name="tim"]').is(':checked');

Ну и дальше я начинаю с ними работать. И все это внутри одной функции, как-то так...

voraa 26.11.2020 13:42

let Name1, Name2, dat, tim;

$('form').bind('submit', function(e) {
        Name1 = $(this).children('input[name="Name1"]').val();
        Name2 = $(this).children('input[name="Name2"]').val();
        dat = $(this).children('input[name="dat"]').val();
        tim = $(this).children('input[name="tim"]').is(':checked');

Владимѣръ 26.11.2020 14:03

Надо попробовать, так я еще не пробовал. Ближе к вечеру, Благодарю!

рони 26.11.2020 14:09

Цитата:

Сообщение от Владимѣръ
может я как-то своеобразно извлекаю данные из формы

https://api.jquery.com/serialize/

Владимѣръ 26.11.2020 16:35

Ура, работает. Огромная благодарность за помощь!


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