Comments 39
Годно! Скажем ДА объективным тестам!
Не факт, что этот тест объективен. Неоднозначные результаты по Опере в конце настораживают. Может вообще не то замеряется и не там. Может тут вообще барометром солнечное давление мерят.
Можно было даже не читать, чтобы угадать результат:
IE8 — гавно
Chrome и firefox — стабильно, вполне ожидаемо и довольно хорошо
Opera — все сделала по-своему.
И этот результат не только для этого теста, он справедлив для 95% браузерных тестов.
автору отдельное спасибо за топик, читать все равно было интересно.
IE8 — гавно
Chrome и firefox — стабильно, вполне ожидаемо и довольно хорошо
Opera — все сделала по-своему.
И этот результат не только для этого теста, он справедлив для 95% браузерных тестов.
автору отдельное спасибо за топик, читать все равно было интересно.
По-своему это как? Я вот просто не понял Вы хвалите оперу или ругаете?:)
по-моему очень точно было подмечено, опера всё делает по-своему
это как блондинки и брюнетки — вещи несравнимые.
набрёл на этот топик, в поисках ремня для оперы, она кушает 3гб памяти, а у меня их 4, если открыть ещё пару браузеров и 10 вкладок то крэш становится реальностью, однако я всё равно люблю оперу.
и да: «привет, мне 3Х лет и я табоголик»
это как блондинки и брюнетки — вещи несравнимые.
набрёл на этот топик, в поисках ремня для оперы, она кушает 3гб памяти, а у меня их 4, если открыть ещё пару браузеров и 10 вкладок то крэш становится реальностью, однако я всё равно люблю оперу.
и да: «привет, мне 3Х лет и я табоголик»
Буквально на днях заметил что опера очень течет, выключил все расширения и она вдруг залетала =) еще говорят чистая установка помогает. А вообще опера не жадная, и обычно делится памятью. И кстати «опера всё делает по-своему», есть стандарты, опера очень щепетильно им следует (баги не считаются), и если все делать не по «ожидаемости» а по стандарту ECMA-262, то опера ведет себя вполне ожидаемо. По крайней мере я всегда пишу под фф, а под оперой проверяю, проблем (у меня) обычно нет.
с расширениями это мысль надо попробовать поискать «слабое звено»
жаль в матери нет больше гнёзд, я бы 8гектаров поставил и забил.
стандарты в веб-дизайне эта та штука которой все старательно избегают,
сначала разработчики, создавая браузеров, а потом дизайнеры, вставляя костыли :)
не случайно гугл в своих сервисах регулярно нам говорит о неподдержки оперы, однако сервисы продолжают работать
у меня шрифт в винде 120%, шрифты в опере ползут на 50+% сайтов, не смертельно, но, во первых, иногда неудобно, а во вторых писать «под оперу» уже не получается, так что смотрю в хроме/ФФ, а в ИЕ и Опере уже проверяю
жаль в матери нет больше гнёзд, я бы 8гектаров поставил и забил.
стандарты в веб-дизайне эта та штука которой все старательно избегают,
сначала разработчики, создавая браузеров, а потом дизайнеры, вставляя костыли :)
не случайно гугл в своих сервисах регулярно нам говорит о неподдержки оперы, однако сервисы продолжают работать
у меня шрифт в винде 120%, шрифты в опере ползут на 50+% сайтов, не смертельно, но, во первых, иногда неудобно, а во вторых писать «под оперу» уже не получается, так что смотрю в хроме/ФФ, а в ИЕ и Опере уже проверяю
Спасибо, интересно было взглянуть.
Кстати, вроде как в хроме > 8 новый JS движок, который по заявлениям разработчиков быстрее чем старый :)
Может стоит взять какой нибудь Chromium и глянуть?
Кстати, вроде как в хроме > 8 новый JS движок, который по заявлениям разработчиков быстрее чем старый :)
Может стоит взять какой нибудь Chromium и глянуть?
Если запустить Хром с флажком --js-flags="--expose-gc", то можно получить доступ к функции window.gc(), которая принудит V8 собрать весь мусор.
спасибо. оч полезно
хм… интересная фишка. Только как на практике применить? =)
Интересно, это в node.js можно использовать?
if (! 'gc' in window) alert('Пожалуйста перезапустите хром с параметрами --js-flags="--expose-gc"');
Интересно, это в node.js можно использовать?
на практике не нужно звать GC, он сам придет :-)
Интересно, это в node.js можно использовать?
Можно, но опять же — не нужно.
Интересно, это в node.js можно использовать?
Можно, но опять же — не нужно.
github.com/billywhizz/node-gc
На практике лучше не использовать, он и так справляется хорошо. Это последнее, о чём стоит думать.
На практике лучше не использовать, он и так справляется хорошо. Это последнее, о чём стоит думать.
Мне кажется вы зря статью под замком в блоге держите. Ее не увидят те, кто по каким то причинам не вступили блог «Javascript» и те, кто вообще не зарегистрирован на Хабре.
Где же Safari? Ща маководов злых набежит!
UFO just landed and posted this here
В Chome и Safari разные движки javascript, в первом V8, во втором SquirrelFish. Очевидно что и сборщики мусора разные или как минимум работают отлично друг от друга.
Кстати, ошибочно считать что webkit в различных браузерах (и других программах, которые его используют) одинаковый. Во-первых разные версии. Во-вторых при имплементации webkit в продукт, часть функционала который идет в webkit «из коробки» заменяют на свою реализацию, часть отключают, добавляют новую (которую потом ошибочно считают частью webkit) т.п. То есть то какой функционал предоставляет webkit и, что немаловажно, как его предоставляет (реализация) весьма сильно зависит от приложения, которое его использует. Исходя из этого «примерно такие же результаты» для Chrome и Safari возможны далеко не всегда.
Кстати, ошибочно считать что webkit в различных браузерах (и других программах, которые его используют) одинаковый. Во-первых разные версии. Во-вторых при имплементации webkit в продукт, часть функционала который идет в webkit «из коробки» заменяют на свою реализацию, часть отключают, добавляют новую (которую потом ошибочно считают частью webkit) т.п. То есть то какой функционал предоставляет webkit и, что немаловажно, как его предоставляет (реализация) весьма сильно зависит от приложения, которое его использует. Исходя из этого «примерно такие же результаты» для Chrome и Safari возможны далеко не всегда.
это не отменяет того, что было бы интересно посмотреть результаты для safari :)
Своим каментом я на это и намекал, видимо не очень очевидно. Заодно вставил своих 5 копеек… не знаю за что человека минусуют.
До определенного времени тоже думал, что раз webkit то везде должно быть одинаково, пока не стал получать расхождения в реализации «фич», а порой и вообще странные ситуации.
Так что тестировать в Safari все таки стоит.
До определенного времени тоже думал, что раз webkit то везде должно быть одинаково, пока не стал получать расхождения в реализации «фич», а порой и вообще странные ситуации.
Так что тестировать в Safari все таки стоит.
По поводу теста для IE, от которого вы отказались в самом начале. Есть в IE там такая штука недокументированная как CollectGarbage().
Поправил вашу функцию вот так:
После этого часть памяти освободилась. Но только часть. Почему так, не понимаю
Поправил вашу функцию вот так:
function test1()
{
var sz = 100000;
var buff = [];
for (var i = 0; i < sz; i++)
buff.push(i);
alert(1);
var buff2 = [];
for (var i = 0; i < sz; i++)
buff2.push(sz - i);
alert(2);
//добавлено
buff = null;
buff2 = null;
CollectGarbage();
alert(3);
}
После этого часть памяти освободилась. Но только часть. Почему так, не понимаю
Спасибо! Надо посмотреть на эту штуку поподробнее
Сколько чего читал по браузерам, не разу не натыкался на этот метод в IE.
Спасибо за наводку, плюс вам в карму :)
Спасибо за наводку, плюс вам в карму :)
Провел несколько более подробные тесты. Оказалось, что IE8 все же освобождает память.
Получился у меня примерно такой вот график (потребление памяти процессом IE):
Т.е. получается, сборщик мусора в IE8 запускается не по таймеру, а только тогда, когда ему «мало» памяти
Получился у меня примерно такой вот график (потребление памяти процессом IE):
Т.е. получается, сборщик мусора в IE8 запускается не по таймеру, а только тогда, когда ему «мало» памяти
на самом деле ты поместил вызов в неправильное место :)
я поместил не внутри, а сразу после вызова функции test1() и память вернулась вся!
я поместил не внутри, а сразу после вызова функции test1() и память вернулась вся!
хех… В PHP так вообще нужно ВРУЧНУЮ указывать какие переменные захватить в замыкание…
delete buff ничего не сделает. Оператор delete не применяется к локальным переменным, только к полям объекта.
Попробуйте так:
Попробуйте так:
var obj = {};
obj.buff = [];
// test here
delete obj.buff;
Sign up to leave a comment.
Вынеси мусор!