Ru-Board.club
← Вернуться в раздел «Ikonboard v.2»

» Оптимизация кода IB (увеличение скорости работы)

Автор: alexei
Дата сообщения: 08.05.2003 22:27
Grey2002
Ну незнаю, прикинь если надо будет удалить второй пост в теме на 500 ответов?
Shurik
Хтмл генератор есть, но я его пока не юзаю, а работаю над улучшеной индексацией динамики. Результаты очень неплохие....
Скрипт для архивации отдельно написан был А так будет конечно у меня возможность быстрого слива всей инфы с базы в файл +потом сжатие...
Автор: Shurik
Дата сообщения: 08.05.2003 22:52
alexei

Цитата:
Хтмл генератор есть, но я его пока не юзаю, а работаю над улучшеной индексацией динамики. Результаты очень неплохие....

а поконкретнее? что есть "улучшенная индексация"? Поделись плиз мыслями...
мой хтмл генератор, например, спокойно ссылался вперед/назад, так что поисковик мог спокойно все обойти. Теперь интересно узнать про "улучшенную индексацию".
Автор: alexei
Дата сообщения: 08.05.2003 23:07
Shurik
А хтмл каждый день генерить? Ведь каждый день в теме появляются новые сообщения, а хтмл архив сделан один раз.... У меня немного другая схема, после выхода собственного движка на MySQL+Perl будет инфа
Автор: Shurik
Дата сообщения: 09.05.2003 11:04
alexei

Цитата:
А хтмл каждый день генерить? Ведь каждый день в теме появляются новые сообщения, а хтмл архив сделан один раз....

не, у меня хтмл генерился раз в неделю... вряд ли чаще надо поисковикам.
а твоя идея, видать, заключается в том, что надо добавлять хтмлки, так? а если мессагу изменяют?
Автор: alexei
Дата сообщения: 09.05.2003 12:12
Shurik
Нет, каждый раз генерить хтмл не есть гуд. Разве что полностью на статику перейти. +Еще одна трабла. Допустим поисковик проиндексил тови хтмлкы archive/forum1/topic2.html, в поисковике будет выводится ссылка именно на archive/forum...2.html. Тоесть надо будет еще какой-то java скрипт сваять для редиректа юзеров на нормальную динамику.
Автор: Shurik
Дата сообщения: 09.05.2003 21:17
alexei

Цитата:
Разве что полностью на статику перейти.

так эти хтмлки полностью статичны! Разве что я оставил ссылки сверху на оригинальный форум... Мне ж нужно, чтобы мессаги были в базе... а ссылки я как раз уже для юзера оставил. Захочет регнуться, а ссылка как раз на скрипт ведет.

Цитата:
Еще одна трабла. Допустим поисковик проиндексил тови хтмлкы archive/forum1/topic2.html, в поисковике будет выводится ссылка именно на archive/forum...2.html.

не такая уж и большая трабла...
я форму ответа вообще убрал, т.е. хтмльная версия чисто почитать. Вот теперь еще тока что мысля пришла - вместо формы ответа накатать инфу челу, мол, хочешь ответить, идти сюда. А ссылка на оригинальную тему будет вести. Так что не нужны там скрипты.
Автор: lynx
Дата сообщения: 10.05.2003 04:01
alexei
Shurik


Можно я чуть-чуть вас прерву, может, кому помогу.


Рассказываю свой эксперимент использывания по совету Батвы
use strict
в скрипте главной паги (пока для эксперименту).
Ясен перец, скриптина не запустилась, а выдала на стандартный вывод кучу ошибок, все они сводились к тому, что требуется явное объявление переменных.
В итоге написала:

use vars qw($thisprog $action $query $inmembername $inpassword $cookiepath $filetoopen $ikondir и т.д. и т.п. - много довольно-таки);

После этого скриптинка обрадовалась и очень шустренько стала работать и на локалхосте и на сервере.

Это при том, что по совету Батвы же, еще было указано:
my ($title, $dateposted, $trash) = split(/\|/, $announcementdata[0]);
Везде, где это есть.

Это также при том, что было из IkonRussian.lib выкинуто в отдельный библиотечный файл все, что касается админчасти, и это реквестится теперь в файле ikonadmin.lib то есть в нем я написала (только один раз в этом файле) require admincenter.lib и все.

Плюс, сам IkonRussian.lib был сокращен довольно сильно и его урезание планомерно продолжается.
Плюс, где можно обойтись без циклов, я меняю это на констукции вида:
то-то и то-то if се-то и се-то;

Вместо того, чтобы писать:
if(то-то){
се-то;}
else{
не се-то;
}

Например:
$var = qq~html-код~ if $membername ne 'Guest';


Плюс &title - подпрограмма, которая шапку выводит, не вызывается там, где ее не просят - например, при добавлении сообщения.


Не получилось пока не выводить обновления страницы при поиске... То есть рефреши там стоят, не получилось пока их не делать...

Что бы еще такого по мелочи покопать? Ибо на крупное знаний не хватат.

Автор: Grey2002
Дата сообщения: 10.05.2003 08:11
lynx

Цитата:
Вместо того, чтобы писать:
if(то-то){
се-то;}
else{
не се-то;
}

Например:
$var = qq~html-код~ if $membername ne 'Guest';


ну это уже кому как нравится, и кому какой код удобнее читать. В некторых случаех это и удобно...


Цитата:
Плюс, где можно обойтись без циклов, я меняю это на констукции вида:
то-то и то-то if се-то и се-то;

с каких это пор условия стали циклами? это просто разные синтаксисы написания.
Автор: Shurik
Дата сообщения: 10.05.2003 10:31
lynx

Цитата:
Не получилось пока не выводить обновления страницы при поиске... То есть рефреши там стоят, не получилось пока их не делать...

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

Цитата:
Это также при том, что было из IkonRussian.lib выкинуто в отдельный библиотечный файл все, что касается админчасти, и это реквестится теперь в файле ikonadmin.lib то есть в нем я написала (только один раз в этом файле) require admincenter.lib и все.

вообще говоря неплохо IkonRussian.lib разбить на "тематические" части.
Для ПМ можно выдернуть оттуда. Анонсы, всякие checkboard.cgi, forumoptions.cgi, help.cgi, ikonadmin.lib, ikonfriend.lib т.д.
Таким образом получаем раз в 5 меньший код ikonrussian.lib, а поскольку где в основном народ тусуется? В темах, форумах, профиль и ПМ, остальное его почти не касается - получается очень неплохо...
Автор: lynx
Дата сообщения: 11.05.2003 06:04
>с каких это пор условия стали циклами? это просто разные синтаксисы написания.

Ты меня в терминологии не путай, я и сама запутаюсь прекрасно, у меня на столе толстая книжка Ларринова, там черным по белому пример приведен:

$переменная = значение unless условие;

это позволяет избежать расходов, связанных с входом и выходом из блока, то есть предпочтительней чем:

if(условие){
$переменная = значение;
}

Да, не цикл тут, а блок, но про циклы тут тоже написано, не путай меня, я и так путаюсь.

А читаемость мне не так важна на этом фоне, мне надо снизить нагрузку на сервак и повысить скорость. Если для этого придется писать нечитаемый код, буду писать


Я еще снесла из data/progs.cgi всю админчасть, вообще кучу всего посносила, теперь половина не работает, а половина виснет - видимо переменных хочет лол. Но получилось на use strict многое перевести.


Не, если серьезно, то если все корректно сделать и ничего не потерять, то все шустренько пашет, только в post.cgi пришлось отменять в циле прагму:


for ('forum','topic','membername','password','action','postno','inshowsignature','notify',
'inshowemoticons','previewfirst','intopictitle','intopicdescription','inpost','instickytopic',
'poll1','poll2','poll3','poll4','poll5','poll6','poll7','poll8','poll9','poll10','vote','topictitle',
'forumname') {
no strict 'refs';

Иначе Перл ругался на чем свет стоит.
Автор: alexei
Дата сообщения: 11.05.2003 11:59
lynx
Циклы это Repeat ... until var1=var2, While () do ..., For (i=1; i<100; ++i) и т.д.
А $test = 'yes' if ($var eq 'dev') это обычное условие.
Чтоб увеличить скорость надо не только поубирать переменные, но и переделать большинство скриптов с косяками. use strict я, для примера, использую для того чтобы код более менее читаем был когда модулей куча...
Автор: Shurik
Дата сообщения: 11.05.2003 21:12

Цитата:
Циклы это Repeat ... until var1=var2, While () do ..., For (i=1; i<100; ++i) и т.д.

foreach сюда же.

кстати, а зачем use strict нужен?
Автор: lynx
Дата сообщения: 12.05.2003 05:12
Shurik


Цитата:
а зачем use strict нужен?


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

alexei

Цитата:
и переделать большинство скриптов с косяками

Ну, хоть парочку примеров.... Интересует топик.цги и пост.цги особо - бо самые используемые. Ну и главная пага - морд так сказать.

Автор: alexei
Дата сообщения: 12.05.2003 22:23
lynx
Еще надо скрипты стандартные найти... Вообщем есть конструкция

Код: @arr = <FILE>;
foreach (@arr) { ... }
Автор: lynx
Дата сообщения: 13.05.2003 03:21
alexei


Цитата:
@arr = <FILE>;
foreach (@arr) { ... }

удобно конечно, но если файл большой то памяти жрет много. До перехода на БД использовал
Код:while (<FILE>) { ... }

Также есть проблема в доступах к файлам(одновременная запись в файл с двух скриптов).


Не, пока тяжело для меня.
Я пока пытаюсь избавиться от лишних переменных.
Ну, например, $tablewidth поменяла на 90% - это мне сейчас все видно, какие переменные юзаются в скрипте, ибо пока их все не объявишь вначале, с юз стрикт работать то не будет
Ну и всякие $dfontsize1, 2, 3, 4, у меня все равно все на css. Причем их надо не просто сносить, а потом убирать из файлов типа boardinfo.cgi, бо этот файл в каждом скрипте реквестится.

Еще нашла переменную $versionnumber нафига она, мне не понятно, в админцентре разве что, так и там она на что? А юзается везде:

&output(
-Title => "$forumname : Что угодно",
-ToPrint => $output,
-Version => $versionnumber
);

Посносила это.

В общем, у меня сейчас все приемлимо по скорости и жручести памяти, кроме поиска. Поиск, наверное, буду на research переводить - скриптина такая стандартная. Она работает по такому принципу - раз в сутки, например, по крону или руками запускаешь индексатора, он все индексит быстренько (ну не быстренько, но не суть), а потом поиск в секунды делается. Потому что инфа из индекса берется. Конечно, не такой гибкий - нету поиска по автору, по названию и т.д., но можно скомбинировать - глобально будет ресиарч искать, а по теме стандартный, хотя он и по теме тоже тормозит, гад.

Автор: Shurik
Дата сообщения: 13.05.2003 12:00
lynx

Цитата:
В общем, у меня сейчас все приемлимо по скорости и жручести памяти, кроме поиска.

а ты хоть сравнивала то, что было ДО того, как ты начала "чистку" и после этой самой чистки?
Автор: alexei
Дата сообщения: 13.05.2003 18:22
Shurik
Наверно нет Потому, как я понял, кроме сноса лишних переменных ничего нового применено не было.
Автор: lynx
Дата сообщения: 13.05.2003 19:36
Shurik


Цитата:
а ты хоть сравнивала то, что было ДО того, как ты начала "чистку" и после этой самой чистки?


Да, сравнивала - по размеру свопа сервера, он разрастается до неимоверных размеров, когда часы пик и даже сжирает допустимые для него квоты и никс начинает килять процессы - Апача, разумеется. Сейчас такого нет.



alexei


Цитата:
кроме сноса лишних переменных ничего нового применено не было.


Ну, в общем, по большому счету да.
- Переход на css,
- Урез IkonRussian.lib,
- Снос лишних переменных,
- избавление от блоков, где возможно,
- use strict и соотвественно объявление в каждом скрипте переменных пакета, которые будут использованы в данном скрипте.

Что еще можно сделать?


Цитата:
Также есть проблема в доступах к файлам(одновременная запись в файл с двух скриптов).


Вот это нельзя ли разрулить на примере?

Автор: Shurik
Дата сообщения: 13.05.2003 20:27
lynx

Цитата:
Да, сравнивала - по размеру свопа сервера, он разрастается до неимоверных размеров, когда часы пик и даже сжирает допустимые для него квоты и никс начинает килять процессы - Апача, разумеется. Сейчас такого нет.

даже так?!
а теперь типо все ок? И намного лучше стало?
зы. у тебя форум как сильно посещается, что аж процессы киляются?
Автор: lynx
Дата сообщения: 14.05.2003 01:25
Shurik


Цитата:
И намного лучше стало?


Ну, как сказать - при той же посещаемости процессы больше не киляются. Посещаемость не большая, просто сервак слабенький. Но мой!!

Тестинги я делала такие - мы с модерами флуд устраивали. Темы создавали и посты отправляли по 20 штук в 10 секунд. Так вот при таком варианте сервак не загибался, то есть своп не вырастал до квоты, но клиент не дожидался ответа и обрывался по таймауту. Понял, нет? То есть для клиента выглядит так: нажимаешь "Отправить" и получаешь "Страница недоступна" после некоторой паузы (величина таймаута). Но сервак не вис, а тихонько перелопачивал эти процессы, я ему еще снизила KeepAlive timeout, чтобы если уже клиент оборвался, так и сервак процесс завершал.

Но это все лирика.

На самом деле мне не удалось отловить точного момента - из-за чего у меня своп сжирал ресурсы, хотя это не сложно по акксесс.лог было сделать, но когда я прихожу и Апач убит, то рефректорно сначала стратую Апач, а потом несусь в логи системы, смотреть, что это было. Ребута не было, ага - своп сожрал квоту всю доступную и пошли киляния. Я и без акксесс.лога понимаю, что памяти не хватило и не хватило из-за форума. А логи в этой ситуации ясной картины все равно бы не дали.

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


Вы лучше скажите, куда мне еще покопать


Автор: Shurik
Дата сообщения: 14.05.2003 16:06
lynx

Цитата:
Вы лучше скажите, куда мне еще покопать

раз памяти мало, то у тебя топики могут сильно вырасти и обработка их будет немало хавать...
например, тот же topic.cgi считывает весь thd в массив, а это все в памяти хранится.
Постом выше ты перечисляла что ты сделала. Думаю, ты никчемную проверку на badwords тоже снесла?

Цитата:
Снос лишних переменных,

в самих скриптах? а что это дает?
Автор: lynx
Дата сообщения: 14.05.2003 16:23
Shurik


Цитата:
никчемную проверку на badwords тоже снесла?


Да, снесла, оставила ее только в регистер.цги при проверки имени. Мне это надо. Впрочем, я еще буду про это думать.


Цитата:
раз памяти мало, то у тебя топики могут сильно вырасти и обработка их будет немало хавать...
например, тот же topic.cgi считывает весь thd в массив, а это все в памяти хранится.


Буду закрывать многостраничные темы и открывать новые


Цитата:
Снос лишних переменных,

в самих скриптах? а что это дает?


Так все то же, например, если прописать везде вместо $tablewidth 90%, это экономит память, которую занимала бы эта переменная. Глобальная переменная пакета. Когда все поменяно, сношу еще из styles.cgi и она больше не парсится в каждый скрипт.



еще, еще что??
Автор: Shurik
Дата сообщения: 14.05.2003 19:58
lynx

Цитата:
Так все то же, например, если прописать везде вместо $tablewidth 90%, это экономит память, которую занимала бы эта переменная. Глобальная переменная пакета. Когда все поменяно, сношу еще из styles.cgi и она больше не парсится в каждый скрипт.

а в случае необходимости не устанешь менять? По-моему прирост совсем незаметный должен быть... ибо этот tablewidth вообще везде используется.

Цитата:
еще, еще что??

да хватит уже.
Все наверное...
Автор: lynx
Дата сообщения: 14.05.2003 20:42
Shurik


Цитата:
в случае необходимости не устанешь менять?


Не думаю, что это понадобится, дизайн два года не менялся и не планируется


Цитата:
Все наверное...


Жаль.. ОК.
Автор: lynx
Дата сообщения: 14.07.2003 16:33
Небольшой вопрос к программерам по оптимизации кода, в частности:

В register.cgi этот кусок:

### append boardstats.cgi

require "$ikondir" . "data/boardstats.cgi";
$filetomake = "$ikondir" . "data/boardstats.cgi";
$totalmembers++;
open(FILE, ">$filetomake");
flock(FILE, 2);
print FILE "\$lastregisteredmember = \"$inmembername\"\;\n";
print FILE "\$totalmembers = \"$totalmembers\"\;\n";
print FILE "\$totalthreads = \"$totalthreads\"\;\n";
print FILE "\$totalposts = \"$totalposts\"\;\n";
print FILE "\n1\;";
close (FILE);

Зачем нужно писать в файл после регистрации нового мембера всего постов и всего тем? Зачем эта лишняя запись в файл?
Автор: Shurik
Дата сообщения: 14.07.2003 18:54
lynx
действительно, попробуй не писать.
не, не пробуй! не надо
вообщем, смотри:

Цитата:
open(FILE, ">$filetomake");

это говорит о том, что мы ПОЛНОСТЬЮ перезаписываем файл. Если ты уберешь последние 2 строчки, то все, файл мы получаем брякнутый.
так что все надо.
Автор: lynx
Дата сообщения: 15.07.2003 03:33
Shurik


Цитата:
мы ПОЛНОСТЬЮ перезаписываем файл. Если ты уберешь последние 2 строчки, то все, файл мы получаем брякнутый.
так что все надо.


Да, и правда. Спасибо.
Автор: Shurik
Дата сообщения: 16.07.2003 19:44
lynx
смотри чего я для тебя нашел

в ikonboard.cgi че это за батва?

if ($loginmessage) {

проискал по всем файлам - вообще нигде нет $loginmessage.
это выводится внизу, где указывается время сервера...
думаю, этот IF можно смело вырезать.
Автор: lynx
Дата сообщения: 17.07.2003 01:54
Shurik


Цитата:
в ikonboard.cgi че это за батва?

if ($loginmessage) {

проискал по всем файлам - вообще нигде нет $loginmessage.
это выводится внизу, где указывается время сервера...
думаю, этот IF можно смело вырезать.


Ты, наверное, порезал себе, у меня эта переменная жива.
Смотри.


Код:
if ($inmembername eq "Guest") { $folderpicture = qq~<img src="$imagesurl/images/folder.gif" border="0">~; $loginmessage = "Вы должны войти в конференцию, чтобы видеть помеченные сообщения"; }
Автор: Shurik
Дата сообщения: 17.07.2003 10:11
гм... и что же за помеченные такие сообщения?
а так, вообще, мне из своих файлов уже бесполезно коды приводить. надо доставать старый движок.

Страницы: 123456

Предыдущая тема: Подъем темы после редактирования сообщения


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.