Пришлось тут на неделе решать проблему одного давным давно разработанного решения. По мере наполнения базы инкрементальный поиск почему-то стал жутко тормозить.

В Mozilla 1.x отрисовка показуемого элемента, насколько я понимаю, происходит стразу после .style.display = 'block'; В результате весь скрипт висит ~секунду, пока всем строчкам проставятся нужные дисплеи, после чего один раз рисуется вся таблица.

Firefox делает "умнее". Что именно он делает, сложно предположить, но судя по всему выполнение JS, присвоение CSS-свойств и отрисовка происходит в параллельных потоках. В результате таблица начинает рисоваться *до* того, как проставятся свойства всем элементам, несмотря на то, что таблица.style.display = 'block'; делается в *самом* конце скрипта. Естественно, что по мере проставления свойств вся таблица перерисовывается заново каждый раз. Все это кино для тех же тысячи элементов работает 15 (!) секунд при полной загрузке процессора.

"Решение" -- поставить показывание таблицы на таймер. Экспериментальным путем установлено, что если показать таблицу через ~4 секунды *после* выполнения скрипта, тормозов не происходит. Это для тысячи элементов. Какой интервал понадобится для двух или трех тысяч -- посчитать невозможно. Отследить завершение непонятно_какого_процесса - тем более.

Пришлось сделать кнопку "поиск" вместо инкремента и попросить клиента пользовать античную Mozilla Suite 1.7 или Оперу (с которой особо ничего не тестировалось). Слава богу, решение интранетовское, пользователей -- меньше десяти. С пабликом я бы застрелился.

Такой вот прогресс и развитие нашего любимого браузера.

Комментарии (37)

Виртулис (35) 23. июля, 2007.г.  
 0 0
гы, кстати второй вариант с strcpy на ipv6 вылетел бы с сегфолтом (на строки я щедро выделил по 20 байт), а это слегка хуже на мой взгляд. или нет? надо нарисовать дискуссию.
wad (56) 23. июля, 2007.г.  
 0 0
нельзя один оставлять, иначе фак будет показывать :)

кстати, числа там будут в mac-е те же самые, потому что network bytes order. это я не подумавши спи*дел.

Виртулис (35) 23. июля, 2007.г.  
 0 0
я всю жизнь наивно верил, что результат операций "сдвиг вправо" и "сдвиг влево" над числом не зависит от архитектуры, операционной системы или фазы луны. другой вопрос, что за число там лежит, но это опять же потому что положила его туда системная функция )
Виртулис (35) 23. июля, 2007.г.  
 0 0
забыл. и в данном случае если б я о нем помнил, это бы ничего не изменило.

по-моему непереносимыми программы делает именно чрезмерное использование системных ф-ций.
MaCmEp 23. июля, 2007.г.  
 0 0
Короче мы тут с партсобранием посовещались и решили избавить господина Извиртулиса от компьютерной зависимости посредством ломания 9 пальцев на руке. Вы меня спросите, зачем оставлять один ?  - Чтоб в носу ковыряться.  Оканчательная дата приговора будет вынесена на следующем собрании.  Перерасмотрению дело не подлежит.
wad (56) 23. июля, 2007.г.  
 0 0
"избегание таких уёбищных функций" делает программы непереносимыми.
ты ведь забыл про ipv6? и про то, что существует mac, в котором порядок байт другой совсем, правда?
Виртулис (35) 23. июля, 2007.г.  
 0 0
потому что я изначально избегаю таких уёбищных функций ;)

до половины максимального значения число со знаком и без знака выглядит одинаково ) поэтому при том, что максимальное значение -- 255, глюка там из за этого быть не может. отвык я разделять инты на знаковые и беззнаковые, сорри уж, несколько лет пофигистического пхп делают свое )

можно подумать тов. Торвальдс был офигенно готов :D первый блин полюбому комом, главное -- начать. тем более, я не один буду
wad (56) 23. июля, 2007.г.  
 0 0
да, верно, там внутренний Tls буфер используется. так что в разных тредах можно вызывать одновременно, а в одном нельзя.
но замена неправильная. %d это число со знаком. правильно писать %u.

а почему "естественно, я этого никогда не знал"? это неестественно. :)
вот и выяснили, что к написанию ОС ты не готов. :))
Виртулис (35) 23. июля, 2007.г.  
 0 0
бля, опять ирцелве жжот )
http://pastebin.ca/630483
Виртулис (35) 23. июля, 2007.г.  
 0 0
Естественно, я этого никогда не знал и не сталкивался и узнал только что экспериментальным путем (; но судя по всему оно возвращает указатель на одну и ту же область памяти.
    //Проще всего заменить на
    printf("%s ", inet_ntoa(a1));
    printf("%s\n", inet_ntoa(a2));
    
    //Правильней, конечно, но в конкреном примере незачем
    strcpy(s1, inet_ntoa(a1));
    strcpy(s2, inet_ntoa(a2));
    printf( "%s %s\n", s1, s2);
    
    //А *лучше* по-моему так. Почему - объяснить?
    printf("%d.%d.%d.%d %d.%d.%d.%d\n",
        (a1.s_addr
wad (56) 23. июля, 2007.г.  
 0 0
хм, ну давай проверим знание С ;)

вопрос: будет ли работать такая строка в программе:
printf( "%s %s\n", inet_ntoa( a1), inet_ntoa( a2));

дополнительные вопросы: как, почему, и чем можно заменить.
Виртулис (35) 23. июля, 2007.г.  
 0 0
"не очень дружу с Cплюсплюс" -- очередные глюки нашего любимого ирцэлвэ
Виртулис (35) 23. июля, 2007.г.  
 0 0
напомни, когда я это говорил )) очень интересно. может, ты что-то путаешь?

я говорил, что не очень дружу с С  , что переводится как "я не писал на нем ни одного серьезного проекта". *что* можно не знать в C я не представляю, это же примитивнейший язык...
wad (56) 23. июля, 2007.г.  
 0 0
паскаль, ява, пхп и хтмл не считаются, Virtulis :)
про то, что ты не знаешь С ты сам и говорил.
VEDJMAK-MONAH 23. июля, 2007.г.  
 0 0
как-бы когда тебе исполнилось 18 ?О_О
Виртулис (35) 23. июля, 2007.г.  
 0 0
Хотя Майкрософт действительно вряд ли. Гугл - запросто. В отличие от нас, догадывающихся, они знают, что и как надо сделать и у них для этого есть все, что нужно. Скорее всего -- уже делают, просто особо не палятся.
Виртулис (35) 23. июля, 2007.г.  
 0 0
> Майкрософт никогда не создаст продукт который будет конкурировать с ее же собственным
DOS и Windows NT не считаются?

> Линукс как был в Жо, так там и остался.
Чем определяется "жо"? (:
MaCmEp 23. июля, 2007.г.  
 0 0
Все это бред из области фантастики... Майкрософт никогда не создаст продукт который будет конкурировать с ее же собственным. Линукс как был в Жо, так там и остался. Процент всех их просто ничтожен если брать простого пользователя. Это все просто ля ля... П.С. а у меня теперь любимый язык - Brainfuck. Пиши на нем ос - классная штука =)
Виртулис (35) 23. июля, 2007.г.  
 0 0
wad, кто тебе сказал, что я знаю только PHP? (:

просто он мне нравится. конечно, есть в мире языки в которых то-то сделано лучше, то-то сделано быстрее, там-то вообще пиздец, и вообще все серьезные дядьки... но речь-то не об этом. мне язык нравится, а не интерпретатор. интерпретатор -- говно. в общем-то поэтому мы начинаем писать свой )
Загрузка комментариев...
Похожие записи