Объединение нескольких JS-файлов [дубликатов]

Node.js использует libuv за кулисами. libuv имеет пул потоков (по умолчанию размер 4). Поэтому Node.js использует потоки для достижения параллелизма.

Однако ваш код работает в одном потоке (т. Е. Все обратные вызовы функций Node.js будут вызываться тот же поток, так называемый loop-thread или event-loop). Когда люди говорят, что «Node.js работает на одном потоке», они действительно говорят «обратные вызовы Node.js запускаются в одном потоке».

4
задан Bruce 29 August 2014 в 01:36
поделиться

2 ответа

Как правило, неплохо объединить и минимизировать собственный JavaScript разработки. Наличие нескольких HTTP-запросов может замедлить время загрузки, если запросов слишком много (особенно если есть несколько небольших файлов). [Page]

Поскольку @veroxii говорит, что большинство людей в конечном итоге используют «сборку» с момента извлечения и объединение всего вручную было бы огромной тратой времени. Для небольших сайтов, на которых я работаю, у них нет встроенной системы миниатюризации, мне нравится использовать gulpjs вместе с gulp-uglify и gulp-concat , чтобы минимизировать и объединить ресурсы javascript.

Вы должны быть осторожны при объединении, хотя, поскольку часто время, сценарии будут зависеть от других скриптов. Скажем, у вас есть два сценария, которые вы комбинировали, где scriptB зависит от scriptA. Если браузер загружает и запускает scriptB перед scriptA, потому что он появился первым в объединенном файле, тогда произойдут плохие вещи. Либо будьте осторожны с вашей комбинацией скриптов, либо используйте что-то вроде requirejs .

Вы не можете много сделать с точки зрения минимизации или комбинации при использовании стороннего скрипта, загруженного с CDN (например, jQuery), за исключением использования ресурса production.min.js, который они предоставляют. Вы могли бы загрузить их скрипт и бросить его в свой процесс миниатюризации, но большинство пользователей, скорее всего, уже имеют версию CDN, кэшированную их браузером.

Самое главное, когда дело доходит до JavaScript, загрузка скриптов не блокирует рендеринг страницы. Большинство JavaScript бесполезно без контента, так почему бы не сначала загрузить контент, а затем загрузить его в сценарий? Сначала пользователи будут видеть контент и затем взаимодействовать, поэтому, вероятно, неплохо загрузить эти ресурсы в этом порядке. Подробнее об этом здесь . Поместите теги скриптов в нижней части страницы, используйте атрибут async или используйте асинхронный загрузчик javascript, такой как loadJS или requirejs.

4
ответ дан tylerargo 24 August 2018 в 05:37
поделиться

Какую структуру вы используете на стороне сервера? В большинстве инфраструктур есть «конвейер активов», уже встроенный или как плагин.

Например, django имеет https://django-pipeline.readthedocs.org/en/latest / и grails http://grails.org/plugin/asset-pipeline

Это делает все, о чем вы просили и многое другое. Я уверен, что что-то похожее на то, что вы используете на обслуживающей стороне.

Изменить: уточнить - я не думаю, что это то, что люди делают вручную. У них есть инструмент, который делает это «на лету» или время сборки / развертывания.

0
ответ дан veroxii 24 August 2018 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: