Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.11.2012, 22:45
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

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

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

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

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

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

страница
<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 (придётся дождаться загрузки всех картинок).
Как это реализовать более разумно?

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

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

Последний раз редактировалось bes, 06.11.2012 в 23:10.
Ответить с цитированием
  #2 (permalink)  
Старый 06.11.2012, 23:26
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Есть еще вариант почитать книги доки.
Например Закас Оптимизация javascript
Ответить с цитированием
  #3 (permalink)  
Старый 06.11.2012, 23:34
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от dmitriymar
Есть еще вариант почитать книги доки.
Например Закас Оптимизация javascript
ок, её я ещё не читал
Ответить с цитированием
  #4 (permalink)  
Старый 07.11.2012, 18:29
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

учту, мои рассуждения были из области редактор+браузер
Ответить с цитированием
  #5 (permalink)  
Старый 08.11.2012, 00:44
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

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

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

PS: и как только некоторые всё успевают (читают наверное слишком быстро )
Ответить с цитированием
  #6 (permalink)  
Старый 08.11.2012, 01:25
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от iMaxmaxmaximus
адовый бред если честно.. правда
если эти слова обижают то сори.. но это бред.. обьяснять почему?
объистняй, я не обидчивый
Ответить с цитированием
  #7 (permalink)  
Старый 08.11.2012, 20:43
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

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


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

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

а заниматься компоновкой для каждой страницы скриптов (коих в исходном посте сказано большое количество, как и самих страниц) имхо не меньшая морока, возможно эти процессы уже давно автоматизированы (но я не так быстро читаю, чтобы успеть прочитать всё , на повестке всё ещё
Сообщение от dmitriymar
Закас Оптимизация javascript
)
jquery и её плагины тоже что ли в один файл компоновать? не дикость, не?
Ответить с цитированием
  #8 (permalink)  
Старый 08.11.2012, 22:36
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от iMaxmaxmaximus
в таком случае выдели то что используется везде в один большой сжатый файл, а остальное подключай отдельно на нужные страницы)
если не шутишь, то какими средствами делать оценку, что войдёт в это общее? (например, 10 страниц используют 3 скрипта, а 10 других страниц их не используют, но используют 2 других скрипта, выделяем уже два сжатых файла и теоретически это один из простейших вариантов , а в целом сложная математическая задача, хотя может быть существуют автоматизированные средства её решения )
Ответить с цитированием
  #9 (permalink)  
Старый 08.11.2012, 23:04
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

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

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

Последний раз редактировалось Hoshinokoe, 08.11.2012 в 23:11.
Ответить с цитированием
  #10 (permalink)  
Старый 08.11.2012, 23:24
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск