Цитата: Тайльнемер от декабря 27, 2013, 11:23
Я полный ламер в сабже, а тут на форуме некоторые разбираются.
Буду тут задавать глупые вопросы.
Начну с начала, с загрузки скрипта. Сейчас у меня так:
У пользователей «ЛФ-фич» локально располагается юзер-скрипт следующего содержания:
// ==UserScript==
// @name LfFeatures
// @namespace lingvoforum
// @version 1.0.4
// @include http://lingvoforum.net*
// ==/UserScript==
if(document.domain == "lingvoforum.net") // по идее, всегда true, но на всякий случай...
{
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://teilnehmer.somee.com/LfFeatures/Content/LfFeaturesUserScript.js";
head.appendChild(script);
}
При загрузке страницы ЛФ он срабатывает (момент времени №1), и начинает грузиться LfFeaturesUserScript.js с teilnehmer.somee.com, который состоит из jQuery и собственно скрипта.
LfFeaturesUserScript.js начинает исполняться (момент времени №2), и там идёт $(function() { ... });
Как я понимаю, тело этого function'а исполняется по событию DOMContentLoaded (момент времени №3).
Момент №3 наступает на сотни миллисекунд позднее момента №2.
Насколько это корректно вообще?
Например, может ли случиться так, что в момент №1 head'а ещё нет в DOM'е, и скрипт вылетит?
В моменты времени 1 и 2 (т. е. до DOMContentLoaded) что уже гарантированно есть в DOM'е, а чего, возможно, нет? Какие действия можно выполнять в моменты 1 и 2?
Тайльнемер, скрипты GreaseMonkey (и совместимые) выполняются только
после DOMContentLoaded страницы.
Опера поддерживает (или поддерживала, я не разбирался с вебкитооперой) несовместимые с GM скрипты (у них ЕМНИП расширение не
.user.js, а
.js) — вот в них надо волноваться о DOMContentLoaded:
Цитата: http://www.opera.com/docs/userjs/examples/#greasemonkey
Greasemonkey scripts
Opera is capable of running many Greasemonkey scripts. These are JavaScripts designed to work with the Greasemonkey enhancement for the Mozilla browser family. To tell Opera that a script file uses Greasemonkey notation, the name of the file containing the script must end with .user.js (all other .js files are assumed to be normal User JavaScripts). Scripts that use Greasemonkey notation are handled slightly differently (in order to be compatible with existing scripts):
- They are not permitted to use window.opera.addEventListener and associated methods, or magic functions and variables.
- They are executed when the page completes loading, after creating the DOM for the page, but before running any onload handlers that have been defined [выделение моё — І. G.].
Because of this different handling, Greasemonkey scripts are often not able to fix problems or errors until after they have already occurred. As a result, such scripts are generally best suited to adding enhancements, and not fixing problematic scripts.
Цитата: Тайльнемер от декабря 27, 2013, 11:23
При загрузке страницы ЛФ он срабатывает (момент времени №1), и начинает грузиться LfFeaturesUserScript.js с teilnehmer.somee.com, который состоит из jQuery и собственно скрипта.
LfFeaturesUserScript.js начинает исполняться (момент времени №2), и там идёт $(function() { ... });
Как я понимаю, тело этого function'а исполняется по событию DOMContentLoaded (момент времени №3).
Момент №3 наступает на сотни миллисекунд позднее момента №2.
На самом деле последовательность такая:
- DOMContentLoaded
- Срабатывает скрипт, прописывает себя в head
- Начинает выполняться прописанный в head скрипт
- $(function() { ... }); — JQuery видит, что DOMContentLoaded уже наступил, и потому выполняет этот код сразу же
- ???????
- PROFIT!
Айджи, чего так палитесь?
Да я уже проверила знание мутаций после определённого артикля в ирландском.
Уже всё понятно...
Цитата: I. G. от декабря 27, 2013, 12:12
Айджи, чего так палитесь?
І. G. же уже давно разоблачилась. :)
Спасибо.
Цитата: І. G. от декабря 27, 2013, 11:55
На самом деле последовательность такая:
DOMContentLoadedСрабатывает
скрипт, прописывает себя в head
Начинает выполняться прописанный в head скрипт
$(function() { ... }); — JQuery видит, что DOMContentLoaded уже наступил, и потому выполняет этот код сразу же
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
Цитата: Тайльнемер от декабря 27, 2013, 13:14
Цитата: І. G. от декабря 27, 2013, 11:55
На самом деле последовательность такая:
DOMContentLoadedСрабатывает
скрипт, прописывает себя в head
Начинает выполняться прописанный в head скрипт
$(function() { ... }); — JQuery видит, что DOMContentLoaded уже наступил, и потому выполняет этот код сразу же
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
А вот даже не знаю.
Возможно ли, что это время тратится на загрузку jQuery?
Цитата: Тайльнемер от декабря 27, 2013, 13:19
Благодаря І. G., тема теперь в двух темах:
НГ/Вопросы по ӂаваскрипту́ (http://lingvoforum.net/index.php/topic,64510.msg1947773.html)
Вообще, вот на таких ответах в разных местах когда-то и основывалась идея агрегатора (http://aluarium.net/forum/thread-631.html). Т.е. каждый отвечает на тему там, где ему удобно (правда, предполагалось, что не в разделах одного форума, а в своих блогах; — но можно и так, как сейчас), а агрегатор потом собирает такие ответы на одной странице.
Правда, у меня так и не дошли руки.
Цитата: І. G. от декабря 27, 2013, 13:47
Цитата: Тайльнемер от декабря 27, 2013, 13:14
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
А вот даже не знаю.
Возможно ли, что это время тратится на загрузку jQuery?
Нет. До $(function() { ... }) jQuery уже работает.
В общем, я не стал вникать и убрал $(function() { ... }).
Работать не перестало.
Стало ли быстрей — я чё-то не понял.
Ну можно я буду интересоваться более близкими моему сердцу вещами?
Чистым си? Ассемблером?
Или на чём там кодют суровые уральские мужики?
Топор!
Цитата: Тайльнемер от декабря 27, 2013, 13:14
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
Я по-прежнему интересуюсь топором, но мне сказали, что это фича: http://bugs.jquery.com/ticket/6781 (если на странице есть другие не-jQuery скрипты, то jQuery пытается убедиться, что они уже загрузились, и только потом запускает обработчики события
ready).
Цитата: Тайльнемер от декабря 28, 2013, 10:44
Чистым си?
Кстати, Деме его любит.
Цитата: I. G. от декабря 28, 2013, 10:42
Ну можно я буду интересоваться более близкими моему сердцу вещами?
Да, конечно. Обещаю, что маска-I. G. больше про программирование ни слова. :dayatakoy:
Цитата: Tайльнемер от декабря 28, 2013, 14:00
(http://lingvoforum.net/avs/avatar_43410_1388232331.png)
Насчёт τ у меня был такой вариант:
(https://sites.google.com/site/formicant/img/TauCeti.png)
«Тау Кита»
Цитата: Тайльнемер от декабря 31, 2013, 13:21
Насчёт τ у меня был такой вариант:
(https://sites.google.com/site/formicant/img/TauCeti.png)
«Тау Кита»
:=
Правда, Лингвофорум почему-то её сделал не очень красивой.
Џаваскрипт ненужен.
del languages['JavaScript']Превосходная работа, self.
Цитата: Tайльнемер от декабря 31, 2013, 13:32
Правда, Лингвофорум почему-то её сделал не очень красивой.
Ты же знаешь, что у него вместо
PNG.rescale не по нят но что.
Я бы прокомментировала мир без JavaScript'а, но я не интересуюсь программированием. :(
Хе, что мир с JavaScriptом, что мир без JavaScriptа...