|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
jdigreze
God
Joined: 02 Jan 2006 02:28 Posts: 1390 Location: Abakan
|
Это вполне может делать встроенный в венду firewall, или ещё какой-нибудь антивирус.
|
27 Dec 2014 22:59 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Просто очень неожиданный эффект... так подспудно думаешь - "ну это Венда-7...
наверно во всю поддерживает HTML-5... ща всё просто реактивно взлетит на этих
гигагерцах и ядрах..."
И неожиданно видишь " розовую птицу обломинго" там где её не ждал...
_________________ iLavr
|
28 Dec 2014 10:09 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я что-то тут одной JS конструкцией озадачился...
dtimeMS выставляется равным 1 ms.
Значит получается так, если 128 вызовов execute() выполнятся быстрее, чем 1 ms, то возникнет пауза в эмуляции кода 6502.
Но вот если 128 вызовов execute() НЕ успеют выполнится за 1 ms, то таймер всё равно вызовет заново функцию multiexecute(), но вот в какой момент он прервет текущий в этот момент цикл?
Я к тому этим озадачился, не прервет ли таймер эмуляцию прямо в ходе исполнения очередного кода 6502?
Или функция execute() все-таки закончится нормально в этот момент?
_________________ iLavr
|
01 Jan 2015 05:49 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Оказывается, что никак JS не прервет никакую выполняющуюся функцию. | | | | Принцип работы таймеров в JavaScriptМногие начинающие в JavaScript разработчики путают принцип работы его таймеров с принципом работы имеющейся во многих языках функции sleep. sleep приостанавливает выполнение программы на определённый промежуток времени, после чего работа продолжается с того же места, где была остановлена. В JavaScript такое невозможно, по крайней мере в браузерном JavaScript. JavaScript язык однопоточный. Когда он выполняется в браузере, браузер никаких действий не производит. Если скрипт выполняется достаточно долго, становится заметно, что браузер "висит". Поэтому функция sleep вместе с приостановкой скрипта "вешала" бы браузер. Вместо этого функции setTimeout/setInterval " делают отметку", что необходимо запустить некий код через столько-то миллисекунд, а скрипт продолжает работать своим чередом. Из того, что язык однопоточный следует ещё одно следствие — код выполнится не через строго заданный промежуток времени, а не раньше, чем через этот промежуток. Если в нужный момент времени будет выполняться какой-либо код, то интерпретатор дождётся его окончания, после чего только запустит код по таймеру. | | | | |
Но более неприятным оказался другой факт...
Обескураживает такой подход... и нафига тогда указывать задержку в единицах мс, если выполняться это все-равно не будет...
_________________ iLavr
|
02 Jan 2015 06:56 |
|
|
jdigreze
God
Joined: 02 Jan 2006 02:28 Posts: 1390 Location: Abakan
|
Честно сказать, у меня было такое предположение, но так как не подкреплено фактами, я тактично промолчал., итак сильно много имхи выкладываю последнее время. А вот хрен их знает, этих разработчиков. Может это каким-то образом связано с кроссплатформенностью HTML?
|
02 Jan 2015 08:38 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А ты выкладывай не стесняйся! Я же на повод посоветоваться спрашиваю...
Так что мнение человека с опытом хоть какое-то направление поиска задает.
А то я погуглил на тему " как выполняется код JavaScript" - меня убедили, что сейчас быстро,
зачастую с частичной или полной компиляцией на лету...
Ну я и думаю - хотя и подозрительна дискретность в 1 мс, но кто знает - машины быстрые
сейчас, может разработчики и достигли такой точности таймера.
Хотя и в самой Венде знаю, что таймер неточный. Но в Венде-то тебя полюбому выкинет в
функцию таймера, а тут - видишь как необычно...
Так что излагай своё " имхо" не раздумывая, всё может проще поиск получится.
Я ведь случайно нашел про особенности setTimeout/setInterval, в официальных справочных
данных этого почему-то предпочитают не сообщать.
_________________ iLavr
|
02 Jan 2015 10:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Возможно неточность таймеров связана с виндой как таковой - в линухе должно быть лучше...
|
02 Jan 2015 14:41 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Похоже на то - странно было бы, если б у " интерпретатора", работающего в браузере
и под Вендой точность была бы лучше самой Венды.
Я просто немного подзабыл какую точность дают таймеры Венды, но здесь просто
+/- " лапоть" по определению.
И большинство статей про таймер в JS пишут о его неточности.
Но разница 1 - 12 мс всё же неприятна. Это ж ошибка "на порядок" получается...
_________________ iLavr
|
03 Jan 2015 07:09 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Собственно, особенности таймера связаны даже не столько с Вендой, сколько
с самими браузерами и реализацией таймеров в них.
| | | | Quote: Минимальная задержка таймера
У браузерного таймера есть минимальная возможная задержка. Она меняется примерно от нуля до 4мс в современных браузерах. В более старых она может быть больше и достигать 15мс.
По стандарту, минимальная задержка составляет 4мс. Так что нет разницы между setTimeout(..,1) и setTimeout(..,4).
Реальная частота срабатывания
Срабатывание может быть и гораздо реже В ряде случаев задержка может быть не 4мс, а 30мс или даже 1000мс. Большинство браузеров (десктопных в первую очередь) продолжают выполнять setTimeout/setInterval, даже если вкладка неактивна.
При этом ряд из них (Chrome, FF, IE10) снижают минимальную частоту таймера, до 1 раза в секунду. Получается, что в «фоновой» вкладке будет срабатывать таймер, но редко. При работе от батареи, в ноутбуке — браузеры тоже могут снижать частоту, чтобы реже выполнять код и экономить заряд батареи. Особенно этим известен IE. Снижение может достигать нескольких раз, в зависимости от настроек. При слишком большой загрузке процессора JavaScript может не успевать обрабатывать таймеры вовремя. При этом некоторые запуски setInterval будут пропущены.
Вывод: на интервал 4мс стоит ориентироваться, но не стоит рассчитывать. | | | | |
_________________ iLavr
|
04 Jan 2015 10:57 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну надо же... Такая ерундовина - и прямо камень преклонения!
Нашел в сети библиотеку - ifvisible.js - якобы она без проблем отслеживает
активность вкладок...
Но, как выяснилось, она отслеживает то же самое: window.onblur = function(e){...
http://serkanyersen.github.io/ifvisible.js/demo.html
То есть, при переходе вкладки в неактивное состояние - эта библиотека выдает
сразу несколько сообщений " hidden", собственно, дублируя фактически window.onblur....
_________________ iLavr
|
04 Jan 2015 18:33 |
|
|
jdigreze
God
Joined: 02 Jan 2006 02:28 Posts: 1390 Location: Abakan
|
Пару раз подходил к разбору этой задачки, но ровно ничего вразумительного и кроссплатформенного не вышло. Связано это, "как ни странно", с разной реализацией безопасности у разных браузеров, да ещё и от настроек оной зависит.
Кстати, как я понял в ходе экспериментов, мозилка считает фрейм как отдельный документ, опера же считает его за часть основного, соответственно и событийная модель ведёт себя по-разному.
Возможно, к решению нужно подходить не через открытие дочерних окон, а через открытие/сокрытие элементов (типа div) одного окна, и с более мудрёным использованием css.
|
04 Jan 2015 22:00 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да я сам уже много вариантов перепробовал... И не один я, как я вижу в поиске, этой проблемой озадачен.
Довольно перспективным казалось мне параллельно с window.onblur отслеживать события мыши (клик вне вкладки),
но тут другая проблема вырисовалась - окно может стать неактивным чисто от событий горячих клавиш клавиатуры...
В общем сейчас остановился на варианте - "если браузер Опера" - закрываем окно по window.onblur,
во всех других ситуациях - окно не закрывается.
И здесь опять что неприятно - в зависимости от браузера следующий вызов pop-up окна может направить новый
контент в уже открытое окно, а может и новое окно создать - что приводит к путанице с открытыми окнами.
_________________ iLavr
|
05 Jan 2015 08:19 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Самое неприятное, что все эти коллизии проявляются только при работе в офф-лайн с диска.
В он-лайне всё это совершенно не имеет места: 6502 CPU Emulator... - в основном всё корректно.
Всякие неприятные заморочки есть только в каких-то мелких особенностях внешнего интерфейса.
Хотелось просто сделать для своих целей эмулятор 65хх, в работу которого можно оперативно
вмешаться, если что-то надо быстро изменить в его поведении.
_________________ iLavr
|
05 Jan 2015 08:20 |
|
|
jdigreze
God
Joined: 02 Jan 2006 02:28 Posts: 1390 Location: Abakan
|
А если попробовать сделать HTA ( Hyper Text Application)?
Решение только под венду, но в некоторых случаях очень полезное.
Из особенностей - при создании опираемся исключительно на DOM IE5 или выше. Некоторые защитные механизмы при этом не работают.
P.S. Эмулятор на народе у меня не открылся, как собственно почти любой проект на народе - випсанбэс хренов вылазит, опять юкозовцы что-то мутят со своими скриптами.
|
05 Jan 2015 22:38 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да - мутят они там свои скрипты, как всё отлажу, займусь тем чтобы отключать их приблуды
через 1..3 секунды после старта страницы.
Совсем выкидывать нельзя, это условие "бесплатности" их хостинга.
У меня видно вот такое всплывающее окно:
Ну и по тексту замечаю, что они вставляют в HTML-код 2 своих скрипта:
В начале:
И в самом конце документа:
_________________ iLavr
|
06 Jan 2015 07:53 |
|
|
Who is online |
Users browsing this forum: No registered users and 33 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|