Лингвофорум

Общий раздел => Игры => Просто общение => Новогодний маскарад => Тема начата: І. G. от декабря 27, 2013, 11:51

Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: І. G. от декабря 27, 2013, 11:51
Цитата: Тайльнемер от декабря 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.
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: І. G. от декабря 27, 2013, 11:55
Цитата: Тайльнемер от декабря 27, 2013, 11:23
При загрузке страницы ЛФ он срабатывает (момент времени №1), и начинает грузиться  LfFeaturesUserScript.js  с  teilnehmer.somee.com, который состоит из jQuery и собственно скрипта.
LfFeaturesUserScript.js  начинает исполняться (момент времени №2), и там идёт $(function() { ... });
Как я понимаю, тело этого function'а исполняется по событию DOMContentLoaded (момент времени №3).
Момент №3 наступает на сотни миллисекунд позднее момента №2.
На самом деле последовательность такая:
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: I. G. от декабря 27, 2013, 12:12
Айджи, чего так палитесь?
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: Alexandra A от декабря 27, 2013, 12:14
Да я уже проверила знание мутаций после определённого артикля в ирландском.

Уже всё понятно...
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: І. G. от декабря 27, 2013, 12:17
Цитата: I. G. от декабря 27, 2013, 12:12
Айджи, чего так палитесь?
І. G. же уже давно разоблачилась. :)
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: Тайльнемер от декабря 27, 2013, 13:14
Спасибо.
Цитата: І. G. от декабря 27, 2013, 11:55
На самом деле последовательность такая:
DOMContentLoadedСрабатывает
скрипт, прописывает себя в head
Начинает выполняться прописанный в head скрипт
$(function() { ... }); — JQuery видит, что DOMContentLoaded уже наступил, и потому выполняет этот код сразу же
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: І. G. от декабря 27, 2013, 13:47
Цитата: Тайльнемер от декабря 27, 2013, 13:14
Цитата: І. G. от декабря 27, 2013, 11:55
На самом деле последовательность такая:
DOMContentLoadedСрабатывает
скрипт, прописывает себя в head
Начинает выполняться прописанный в head скрипт
$(function() { ... }); — JQuery видит, что DOMContentLoaded уже наступил, и потому выполняет этот код сразу же
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
А вот даже не знаю.

Возможно ли, что это время тратится на загрузку jQuery?
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: І. G. от декабря 27, 2013, 15:39
Offtop
Цитата: Тайльнемер от декабря 27, 2013, 13:19
Благодаря І. G., тема теперь в двух темах:
НГ/Вопросы по ӂаваскрипту́ (http://lingvoforum.net/index.php/topic,64510.msg1947773.html)
Вообще, вот на таких ответах в разных местах когда-то и основывалась идея агрегатора (http://aluarium.net/forum/thread-631.html). Т.е. каждый отвечает на тему там, где ему удобно (правда, предполагалось, что не в разделах одного форума, а в своих блогах; — но можно и так, как сейчас), а агрегатор потом собирает такие ответы на одной странице.

Правда, у меня так и не дошли руки.
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: Тайльнемер от декабря 28, 2013, 04:33
Цитата: І. G. от декабря 27, 2013, 13:47
Цитата: Тайльнемер от декабря 27, 2013, 13:14
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
А вот даже не знаю.
Возможно ли, что это время тратится на загрузку jQuery?
Нет. До $(function() { ... }) jQuery уже работает.

В общем, я не стал вникать и убрал $(function() { ... }).
Работать не перестало.
Стало ли быстрей — я чё-то не понял.
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: I. G. от декабря 28, 2013, 10:42
Ну можно я буду интересоваться более близкими моему сердцу вещами?
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: Тайльнемер от декабря 28, 2013, 10:44
Чистым си? Ассемблером?
Или на чём там кодют суровые уральские мужики?
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: I. G. от декабря 28, 2013, 11:09
Топор!
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: І. G. от декабря 28, 2013, 11:35
Цитата: Тайльнемер от декабря 27, 2013, 13:14
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
Я по-прежнему интересуюсь топором, но мне сказали, что это фича: http://bugs.jquery.com/ticket/6781 (если на странице есть другие не-jQuery скрипты, то jQuery пытается убедиться, что они уже загрузились, и только потом запускает обработчики события ready).

Цитата: Тайльнемер от декабря 28, 2013, 10:44
Чистым си?
Кстати, Деме его любит.
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: Tайльнемер от декабря 28, 2013, 14:00
Цитата: I. G. от декабря 28, 2013, 10:42
Ну можно я буду интересоваться более близкими моему сердцу вещами?
Да, конечно. Обещаю, что маска-I. G. больше про программирование ни слова. :dayatakoy:
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: Тайльнемер от декабря 31, 2013, 13:21
Цитата: Tайльнемер от декабря 28, 2013, 14:00
(http://lingvoforum.net/avs/avatar_43410_1388232331.png)
Насчёт τ у меня был такой вариант:

(https://sites.google.com/site/formicant/img/TauCeti.png)
«Тау Кита»
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: Tайльнемер от декабря 31, 2013, 13:32
Цитата: Тайльнемер от декабря 31, 2013, 13:21
Насчёт τ у меня был такой вариант:

(https://sites.google.com/site/formicant/img/TauCeti.png)
«Тау Кита»
:=

Правда, Лингвофорум почему-то её сделал не очень красивой.
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: Рython от декабря 31, 2013, 15:26
Џаваскрипт ненужен.

del languages['JavaScript']

Превосходная работа, self.

Цитата: Tайльнемер от декабря 31, 2013, 13:32
Правда, Лингвофорум почему-то её сделал не очень красивой.
Ты же знаешь, что у него вместо PNG.rescale не по нят но что.
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: І. G. от декабря 31, 2013, 15:56
Я бы прокомментировала мир без JavaScript'а, но я не интересуюсь программированием. :(
Название: НГ/Вопросы по ӂаваскрипту́
Отправлено: Sneguro4ko от декабря 31, 2013, 16:03
Хе, что мир с JavaScriptом, что мир без JavaScriptа...