06.11.2012, 22:45
|
|
Профессор
|
|
Регистрация: 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.
|
|
06.11.2012, 23:26
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
Есть еще вариант почитать книги доки.
Например Закас Оптимизация javascript
|
|
06.11.2012, 23:34
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от dmitriymar
|
Есть еще вариант почитать книги доки.
Например Закас Оптимизация javascript
|
ок, её я ещё не читал
|
|
07.11.2012, 18:29
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
учту, мои рассуждения были из области редактор+браузер
|
|
08.11.2012, 00:44
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от bes
|
помещать весь код в window.onload (хотя это работает, меня почему-то терзают сомнения, что эти динамические подключения всегда учитываются, прежде чем window.onload начнёт работу)
|
этот сомнение развеяно (если я правильно понял, что написано в этой книжке )
Цитата:
|
То же происходит, когда с помощью атрибута
src загружается внешний сценарий; броузер сначала должен загрузить
программный код из внешнего файла, что занимает время, а затем произвести
синтаксический анализ программного кода и выполнить его.
На это время процесс отображения и взаимодействия с пользователем
полностью блокируется.
|
если браузеры следуют этой схеме, то скрипт в head загрузится и выполнится (загрузит все подключаемые), обработка содержимого body будет после => window.onload будет после
читаем дальше (хорошая книжка, этого года оказывается )
PS: и как только некоторые всё успевают (читают наверное слишком быстро )
|
|
08.11.2012, 01:25
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от iMaxmaxmaximus
|
адовый бред если честно.. правда
если эти слова обижают то сори.. но это бред.. обьяснять почему?
|
объистняй, я не обидчивый
|
|
08.11.2012, 20:43
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от iMaxmaxmaximus
|
что мешает сжать все скрипты в один файл и подключить перед закрывающим тегом body,
а все стили сжать и объединить в один файл и подключить в head ?
Подключение скриптов другими скриптами мягко говоря, кхм, не особо благоприятно сказывается на быстродействии.... МЯГКО говоря)
|
ну я спрашивал, а не утверждал
и вопрос
Сообщение от bes
|
стоит ли подключать таким образом скрипты ко всем страницам, даже если, часть из них не будет использоваться
|
также остался открытым
а заниматься компоновкой для каждой страницы скриптов (коих в исходном посте сказано большое количество, как и самих страниц) имхо не меньшая морока, возможно эти процессы уже давно автоматизированы (но я не так быстро читаю, чтобы успеть прочитать всё , на повестке всё ещё
Сообщение от dmitriymar
|
Закас Оптимизация javascript
|
)
jquery и её плагины тоже что ли в один файл компоновать? не дикость, не?
|
|
08.11.2012, 22:36
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от iMaxmaxmaximus
|
в таком случае выдели то что используется везде в один большой сжатый файл, а остальное подключай отдельно на нужные страницы)
|
если не шутишь, то какими средствами делать оценку, что войдёт в это общее? (например, 10 страниц используют 3 скрипта, а 10 других страниц их не используют, но используют 2 других скрипта, выделяем уже два сжатых файла и теоретически это один из простейших вариантов , а в целом сложная математическая задача, хотя может быть существуют автоматизированные средства её решения )
|
|
08.11.2012, 23:04
|
Профессор
|
|
Регистрация: 08.01.2012
Сообщений: 253
|
|
Сообщение от bes
|
если не шутишь, то какими средствами делать оценку, что войдёт в это общее? (например, 10 страниц используют 3 скрипта, а 10 других страниц их не используют, но используют 2 других скрипта, выделяем уже два сжатых файла и теоретически это один из простейших вариантов , а в целом сложная математическая задача, хотя может быть существуют автоматизированные средства её решения )
|
Делается очень просто: на странице остаются только те скрипты, которые не могут быть подключены на другие страницы (т.е. по максимуму запихнуть в один файл, т.к. после первой же загрузки он закешируется браузером и будет отдаваться моментально). Выйгрыш в такой ситуации в меньшем кол-ве запросов, которые идут при загрузке странице.
Например у нас на проекте более 20 различных плагинов и библиотек + свои кастомные скрипты, которые объединены в один файл, хотя на каждой странице используется 3-4 плагина. Еще для каждой страницы есть отдельный скрипт, который отвечает за инициализацию этой страницы (соответственно он не в общем файле).
Последний раз редактировалось Hoshinokoe, 08.11.2012 в 23:11.
|
|
08.11.2012, 23:24
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от Hoshinokoe
|
Делается очень просто: на странице остаются только те скрипты, которые не могут быть подключены на другие страницы (т.е. по максимуму запихнуть в один файл, т.к. после первой же загрузки он закешируется браузером и будет отдаваться моментально). Выйгрыш в такой ситуации в меньшем кол-ве запросов, которые идут при загрузке странице.
|
допустим, есть 25 страниц, каждая страница использует 5 скриптов, для оставления на этой странице только тех скриптов, которые не могут быть подключены на другие страницы, необходимо сделать 5*25=125 операций сравнения, итого 5*25*25=3125 оценок, не геморно ли хотя очевидно так и стоит поступать
|
|
|
|