Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Многоскриптие или индиплагин "Всунька 1.0" (https://javascript.ru/forum/misc/32995-mnogoskriptie-ili-indiplagin-vsunka-1-0-a.html)

bes 06.11.2012 22:45

Многоскриптие или индиплагин "Всунька 1.0"
 
Индивидуальный плагин "Всунька один в ноль" предназначен для подключения ваших скриптов на ваши страницы :D

А если серьёзно

Кто как организует подключение скриптов на страницы в случае их большого количества (и тех и других)?

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

моё очень хиленькое решение :yes:

страница
<head>
<script src="loadScripts.js"></script>
</head>
</body>
<script>
var int = setInterval(function () {
	if (scriptsReady[0] == scriptsReady.length) {
		clearInterval(int);
		jQuery(function ($) {
			alert($('body').html());
		});
	}
}, 500);
</script>


loadScripts.js
var scriptsReady = '';
(function () {
	var scripts = [
		'jquery-latest.min.js',
		'myscript.js',
		//и т.д;
	];
	var len = scripts.length;
	scriptsReady = len;
	var head = document.getElementsByTagName('head')[0];
	for (var i = 0; i < len; i++) {
		var script = document.createElement('script');
		script.src = scripts[i];
		head.appendChild(script);
		script.onload = function () {
			scriptsReady += '1'; 
		}
	}
	
})();

Здесь пришлось бахнуть одну глобальную переменную и весь код оборачивать в setInterval (создавая вторую глобальную переменную, конечно, можно ещё раз обернуть, но в идеале хотелось бы, чтобы код не нужно было совсем дополнительно оборачивать), который проверяет загрузились ли подключаемые скрипты.
Ещё вариант вместо setInterval помещать весь код в window.onload (хотя это работает, меня почему-то терзают сомнения, что эти динамические подключения всегда учитываются, прежде чем window.onload начнёт работу), ну и ограничения самой window.onload (придётся дождаться загрузки всех картинок).
Как это реализовать более разумно?

Если решение найдётся, следует вопрос: стоит ли подключать таким образом скрипты ко всем страницам, даже если, часть из них не будет использоваться (по идее после первого просмотра, все они в кеше (на решение, очевидно, должен повлиять их суммарный объём))?

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

dmitriymar 06.11.2012 23:26

Есть еще вариант почитать книги доки.
Например Закас Оптимизация javascript:)

bes 06.11.2012 23:34

Цитата:

Сообщение от dmitriymar
Есть еще вариант почитать книги доки.
Например Закас Оптимизация javascript

ок, её я ещё не читал :)

bes 07.11.2012 18:29

учту, мои рассуждения были из области редактор+браузер :)

bes 08.11.2012 00:44

Цитата:

Сообщение от bes
помещать весь код в window.onload (хотя это работает, меня почему-то терзают сомнения, что эти динамические подключения всегда учитываются, прежде чем window.onload начнёт работу)

этот сомнение развеяно (если я правильно понял, что написано в этой книжке :) )
Цитата:

То же происходит, когда с помощью атрибута
src загружается внешний сценарий; броузер сначала должен загрузить
программный код из внешнего файла, что занимает время, а затем произвести
синтаксический анализ программного кода и выполнить его
.
На это время процесс отображения и взаимодействия с пользователем
полностью блокируется.
если браузеры следуют этой схеме, то скрипт в head загрузится и выполнится (загрузит все подключаемые), обработка содержимого body будет после => window.onload будет после

читаем дальше :) (хорошая книжка, этого года оказывается :) )

PS: и как только некоторые всё успевают (читают наверное слишком быстро :D )

bes 08.11.2012 01:25

Цитата:

Сообщение от iMaxmaxmaximus
адовый бред если честно.. правда
если эти слова обижают то сори.. но это бред.. обьяснять почему?

объистняй, я не обидчивый :haha:

bes 08.11.2012 20:43

Цитата:

Сообщение от iMaxmaxmaximus
что мешает сжать все скрипты в один файл и подключить перед закрывающим тегом body,
а все стили сжать и объединить в один файл и подключить в head ?


Подключение скриптов другими скриптами мягко говоря, кхм, не особо благоприятно сказывается на быстродействии.... МЯГКО говоря)

ну я спрашивал, а не утверждал :)

и вопрос
Цитата:

Сообщение от bes
стоит ли подключать таким образом скрипты ко всем страницам, даже если, часть из них не будет использоваться

также остался открытым

а заниматься компоновкой для каждой страницы скриптов (коих в исходном посте сказано большое количество, как и самих страниц) имхо не меньшая морока, возможно эти процессы уже давно автоматизированы (но я не так быстро читаю, чтобы успеть прочитать всё :haha: , на повестке всё ещё
Цитата:

Сообщение от dmitriymar
Закас Оптимизация javascript

:) )
jquery и её плагины тоже что ли в один файл компоновать? не дикость, не?

bes 08.11.2012 22:36

Цитата:

Сообщение от iMaxmaxmaximus
в таком случае выдели то что используется везде в один большой сжатый файл, а остальное подключай отдельно на нужные страницы)

если не шутишь, то какими средствами делать оценку, что войдёт в это общее? (например, 10 страниц используют 3 скрипта, а 10 других страниц их не используют, но используют 2 других скрипта, выделяем уже два сжатых файла и теоретически это один из простейших вариантов :), а в целом сложная математическая задача, хотя может быть существуют автоматизированные средства её решения :) )

Hoshinokoe 08.11.2012 23:04

Цитата:

Сообщение от bes (Сообщение 214881)
если не шутишь, то какими средствами делать оценку, что войдёт в это общее? (например, 10 страниц используют 3 скрипта, а 10 других страниц их не используют, но используют 2 других скрипта, выделяем уже два сжатых файла и теоретически это один из простейших вариантов :), а в целом сложная математическая задача, хотя может быть существуют автоматизированные средства её решения :) )

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

Например у нас на проекте более 20 различных плагинов и библиотек + свои кастомные скрипты, которые объединены в один файл, хотя на каждой странице используется 3-4 плагина. Еще для каждой страницы есть отдельный скрипт, который отвечает за инициализацию этой страницы (соответственно он не в общем файле).

bes 08.11.2012 23:24

Цитата:

Сообщение от Hoshinokoe
Делается очень просто: на странице остаются только те скрипты, которые не могут быть подключены на другие страницы (т.е. по максимуму запихнуть в один файл, т.к. после первой же загрузки он закешируется браузером и будет отдаваться моментально). Выйгрыш в такой ситуации в меньшем кол-ве запросов, которые идут при загрузке странице.

допустим, есть 25 страниц, каждая страница использует 5 скриптов, для оставления на этой странице только тех скриптов, которые не могут быть подключены на другие страницы, необходимо сделать 5*25=125 операций сравнения, итого 5*25*25=3125 оценок, не геморно ли :) хотя очевидно так и стоит поступать :)


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