Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   вопрос по require.js (https://javascript.ru/forum/offtopic/46605-vopros-po-require-js.html)

Shaci 16.04.2014 17:50

вопрос по require.js
 
В статье http://habrahabr.ru/post/145269/ про загрузку и инициализацию js были показаны различные попытки ускорить загрузку приложения на медленном интернете (7кб/c).
Например, сначала просто загрузили скрипты последовательно/параллельно, затем попытались сконкатенировать все и минифицировать, -> запросов стало меньше, скорость улучшили, затем
решили использовать require.js, из статьи:

Цитата:

1. Грузим основные части
2. Остальное по необходимости
3. Автодогрузка зависимостей
То есть загрузили основную часть, остальное по требованию, не смотря на то что запросов больше, основная часть загрузится быстрее.

Это случай, когда мне понятно, зачем использовать require.js.

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

То есть "обычный" случай:
Наши скрипты, подгружаются все сразу
<script src="dep-for-module-A.js"></script>
<script src="dep2-for-module-A.js"></script>
<script src="moduleA.js"></script>
<script src="dep-for-module-B.js"></script>
<script src="dep2-for-module-B.js"></script>
<script src="module-B.js"></script>
<script src="main.js"></script>


Мы не можем здесь разместить модуль A над модулем dep-for-module-A, из за зависимостей, поэтому порядок нужно соблюдать.

Сами модули что-то вроде этого:

( function( global ) {
  var dep1 = global.depA1;
  var dep2 = global.depA2;
  function ModuleA() {
    // ...
  }
  // export
  global.ModuleA = ModuleA;
})( this );



Ну и соответственно в продакшне мы это все конкатенируем-минифицируем, в девелопменте оставляем как есть.

Для чего в таком случае(когда нет подгрузки скриптов по требованию) использовать require.js, и нужно ли?

1. Как я понял одна из причин - когда js файлов становится слишком много, чтобы не париться и не следить какой расположить выше другого.
2.Второе - не засоряется глобальное пространство имен (Require.js вроде как способствует этому).
3.Вроде как хороший встроенный оптимизатор для склейки/минификации файлов.

kobezzza 16.04.2014 19:09

Ну в первую очередь - это очередная попытка решить проблему модулей. В связи с добавлением нативных модулей в JS данная технология скорее всего станет использоваться лишь в качестве полифилов.

nerv_ 17.04.2014 00:22

Цитата:

Сообщение от kobezzza
Ну в первую очередь - это очередная попытка решить проблему модулей

и их зависимостей

Цитата:

Сообщение от Shaci
Но мне не совсем понятны преимущества его использования если мы, например, просто загружаем все скрипты сразу, и не используем асинхронную подгрузку по требованию(но нажатию на кнопку например), нам этого не надо.

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

Цитата:

Сообщение от Shaci
Для чего в таком случае(когда нет подгрузки скриптов по требованию) использовать require.js, и нужно ли?

на мой взгляд не нужно

Лично я в последнее время пишу:
а) либо с применением фреймворка ангуляр, кот. сам подгружает шаблоны
б) либо на чистом js специфич. проекты, где использую свой синхронный загрузчик проекта

Цитата:

Сообщение от Shaci
1. Как я понял одна из причин - когда js файлов становится слишком много, чтобы не париться и не следить какой расположить выше другого

Слишком много - понятие субъективное. В первом случае при самых скромных подсчетах у меня получается только скриптов 18+ файлов. Во втором тех же скриптов >160 файлов (но это не продакшн).

Цитата:

Сообщение от Shaci
2.Второе - не засоряется глобальное пространство имен (Require.js вроде как способствует этому).

Это уже из ряда вон. Если ты какаешь в глобал, ты сам расставляешь для себя капканы :)

Цитата:

Сообщение от Shaci
3.Вроде как хороший встроенный оптимизатор для склейки/минификации файлов.

Не понятно каким боком. Должно быть на сервере.

Shaci 17.04.2014 02:07

Цитата:

Сообщение от nerv_
Если ты какаешь в глобал

умеренно), один глобальный объект, у него уже свойства

Shaci 17.04.2014 12:01

Цитата:

Сообщение от nerv_
Не понятно каким боком. Должно быть на сервере.

ну, это да

vflash 19.04.2014 00:19

require.js - говно
размазывать загрузку скиптов ради пары килобай - глупость


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