melky,
во всех броузеров работало отлично.. просто моя позиция если можно исправить что-то, то лучше это сделать... ещё раз спасибо всем.. анимация стала работать в разы быстрее даже на, вечно жрущем память, firefox'е жалко только что IE<9 transition: transform 0.4s linear; box-shadow: 0px 2px 2px rgba(0,0,0,0.7); border-radius: 5px; понимать отказывается, а при подключении PIE.htc вообще как-то странно себя ведёт, но срать на его пользователей.. основная часть анимации меню на js, им этого будет достаточно |
Цитата:
|
Цитата:
|
здесь в теме всё описано, все мои предположения, сомнения, и опровержения со стороны знающих людей
читайте сначала этой темы про скоп замыкания и тд. Цитата:
|
![]() анимация и процессор)) |
Цитата:
Вторая причина - так как setTimeout вложенный, то для поиска локальных переменных интерпретатору придётся каждый раз подниматься всё на большее кол-во скопов. |
Цитата:
В целом про setTimeout vs setInterval http://alljs.ru/articles/timeout/setinterval |
Что меня поражает, то что люди где-то что-то вычитают, и потом всем подряд советую при этом выкрикивая что, что-то там не рекомендуется. Насчет скопов я не соглашусь, наиполнейший бред, никаких скопов там не собирается. Проверено не однократно, загрузка ЦП да чуть выше у setTimeout по известной причине. Так как setTimeout более корректнее работает с задержками, пожирание памяти никакой нет... Если считаете иначе, пример в студию...
От себя добавлю, анимацию через setTimeout делаю и не имею проблем, протестировано временем и жестокими тестирования. Запустите: setTimeout(function blah(){ setTimeout(blah, 1); }, 1);при таком примере, браузер бы умер от загрузки и пожирал бы память как голодный волк. Но этого не происходит. Хватит людям впаривать в мозг всякий бред о ресурсах и т.д. ИМХО |
хмммммм... и все источники противоречат друг другу...
и всётаки хотелось бы больее детальных поянений.. совершенно естествеенно, что мини-турбини функции с одим действием работают примерно одинаково, но если будет больше локальных переменных во внешней функции и их будет много в локальной, ну или они хотябы будут(в примерах статьи их нет)??? что будет?? допустим у меня с итервалом работает быстрее чем с таймаутом.. как люитель асма я немогу этого понять... использовать стек отработавшей функции - как то не очень хорошо.. но раз уж в JS есть замыкания то всёже хотелось бы пояснений... нигде про это ничего не сказано, поэтому я и поднял эту тему.. про скопы, локальные переменные и тд |
я конечно понимаю, что кому то всё равно, но я предпочитаю делать свои коды наиболее оптимальными и читабельными, поэтому мне интересна эта тема с setTimeout'ами и скопами.. не знаю в какое мере они создаются, в большей степени или в той какой вы говорите, но всёже создаются.. вункция работает рекурсивно и вызов следующей итерации не дожидается завершения предыдущей, в отличии от интервала
скачек нагрузки проца при каждой анимации в firefox я наблюдаю на системном мониторе.. см картинку выше |
Kolyaj, devote, век живи - век учись) Но тогда я тоже хочу уточнить, почему не происходит накопления скопов. Казалось бы, такое поведение было бы достаточно логичным...
devote, я доверяю вашему опыту, но хотелось бы узнать чуть больше о теории - почему именно этого не происходит) |
Цитата:
setTimeout(function blah(){ // ... setTimeout(blah, 1); }, 1);Ты передаешь таймеру ссылку на функцию которая не находиться внутри текущего scope, интерпретатор это видит и не сохраняет scope предыдущей функции, если же интерпретатор видит такую конструкцию: setTimeout(function blah(){ // ... setTimeout(function(){ blah(); }, 1); }, 1);Он будет вынужден сохранить scope вызвавшей его функции, так как передана не ссылка а функция, которая находиться в области видимости предыдущей функции... И думать тут не нужно, интерпретатор не дураки писали, и понимали что нет смысла хранить scope в случаях что я указал в первом примере. |
devote, а так?
setTimeout(function blah(){ var i=0;// например setTimeout(blah, 1); }, 1); И кстати - у меня ваш пример из консоли не запустился в ff8. |
Цитата:
Цитата:
function blah(){ // .... setTimeout( blah, 1 ); } setTimeout( blah, 1 );scope сохраняется лишь в том случае, если внутри этой функции была создана другая функция, которой возможно нужно будет обратиться к scope своего потомка. Но только до того как ссылка на функцию не будет утерена. |
Цитата:
|
приведу пример
function blah(){ var a = 1; // scope этой функции будет храниться до тех пор, пока document.body.onclick = function(){ // эта функция имеет жизнь // как только эта функция потеряет связь с миром, все scope будут удалены } } например scope функции blah() будет храниться до тех пор, пока ее внутренний объект(функция) имеет связь с чем-то либо, тоесть в наше случае ссылка на нее висит у объекта BODY, если потеряю ссылку, тоесть выполню где-то: document.body.onclick = null;то scope верхней функции будет уничтожен сборщиком мусора. |
Цитата:
"use strict"; // наш код.. |
Цитата:
function blah() { "use strict"; // - переключили в строгий режим // ... } |
Как много я всего не знаю ещё)
devote, я понимаю, как работает механизм замыканий) Непонятки были только с тем моментом... |
Большое всем спасибо :)
|
Часовой пояс GMT +3, время: 20:06. |