Мой «говно код»…

Закончил бету 2-го мини сервиса, выкинул в Интернет, сказал гугл/яндексу что он есть и забыл про него на 1-3 месяца. Посмотрим что даст… Или не даст…

Но пост не об этом. Есть у меня своя система под витрины. Я когда-то писал давно про нее.

В первой версии в ручном режиме приходилось брать XML-ки с admitad, заливать их на витрину. Обновлений потом никаких не было: цен, наличия, новых позиций и т.д. Понятно, что витрина «стреляла», а через месяца 3-6-12 сходила на нет. Так как да же не смотря на сотни тысяч страниц товаров, они теряли свою актуальность. Траф сползал, но все рано народ шел. Где-то через 1 год, половина залитых оферов были уже «мертвы» (магазины то же закрываются). Но проблема была в другом, многие начали требовать актуальной информации (цена, наличие), чтобы не вводить пользователей в заблуждение. Если ты не можешь этого — «досвидос».  Меня эта тенденция тогда испугала…

Сейчас это еще не так актуально, но до поры до времени — это я Вангую, потом гайки закрутят.

И понятно что масштабировать такое было нельзя.

Тогда появилась вторая версия, где была возможность:

а) в ручном режиме добавлять новые выгрузки в текущий проект, нажатием 2-х кнопок;

б) в ручном режиме обновлять уже загруженные XML выгрузки — нажал кнопку, подождал… Нажал другую — подождал…

Это упростило жизнь, и позволило делать актуальные витрины 10-ми.

Когда их стало больше 30, тыкать кнопки для их обновления раз в месяц мне надоело и появилась 3-ия, текущая версия, которая по крону, сама загружает XML-ки актуальные, и обновляет их на текущих витринах.

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

Это позволило держать ~100-ню витрин, не беспокоясь о том, что они будут не работать или информация на них будет не актуальна. Да первичная настройка все еще занимает какое-то время, но дальше — «залил и забыл». Крон запускается раз в час. В среднем, за неделю, обновляются все активные оферы.

Система относительна стабильна, ну то есть год я ее не трогал. Смотрел там логи обновления иногда, что-то подкручивал совсем по мелочи…

Чтобы Вы представляли, за неделю загружается что-то около 250 XML файлов размером от 200кб и до 250 мб, которые  в дальнейшем обновляются, в среднем каждый 10-12 раз (на разных витринах, отдельные БД).

Но рано или поздно, наступает время «Хэ»,когда все перестает работать как нужно  (не может обновить 1-ин файл скажем 10-12 запусков крона, накапливается очередь, сервер начал дико тормозить, я его перегрузил, он не поднялся… короче, первый звоночек, что нужно что-то сделать).

Пришлось залезть в свой «гавно код»…

Ну а дальше как всегда… Для 1-ой таблицы, 1-го поля  не было индекса… Но это замедляло процесс обновления, но не являлось для него фатальным.

Фатальным, оказалась процедура расчета текущего количества товаров в категориях при обновлениях, если у офера было скажем 3-20К категорий. Не знаю зачем я это делал года  2 назад, но я считал что на странице, категории, допустим «Ноутбук (150)», круче чем просто «Ноутбук» (150 это кол-во товаров там).

Смотрю значит я свой код, почти 2-х летней давности и не понимаю, как я мог тогда это написать, почему оно вообще работает (а работает оно верно) ну  и т.д.

В результате, убрал 50% кода (он вообще там был не нужен, то есть по факту ничего не делал), добавил в обход дерева категорий обратный индекс родителей (до этого был цикл «Карл»…, ну то есть от 1 до N, а есть ли у этой категории ребенок, если нет, значит это низ дерева, и можно зафиксировать результат, плюс добавить «папе» тек. кол-во и исключить под-категорию из дальнейшего расчета).

Вместо цикла, а я напоминаю, что при 10К категорий, цикл бежит в среднем до 5К, чтобы проверить 1-ну категорию, стало одно условие, один жалкий if.

Результат, это кусок делался локально за 300 сек, сейчас тот же кусок делается 5 сек на тех же данных, с тем же результатом. Добавил чистку пустых категорий.

Короче, нужно навести в своем сарае не много порядка и наверное расширится еще на ~50 доменов в этом направлении. Тем более за последних 0.5 года, добавилось очень много оферов. Думаю по многим пока еще нет конкуренции и можно что-то отжать.

PS. Взять и переписать всю систему заново, чтобы все было хорошо, с учетом полученного опыта и прочее? А зачем, если она и так работает? Был бы супер доход -нужно было бы и можно было бы сделать…А так…

Так что плодимся дальше. А следующий сервис, все таки будет по товарке я думаю. Есть 2-3 идеи.

Мой «говно код»…: 16 комментариев

  1. Не страдай х-йней с переписываниями. Я так в свое время год убил из принципа переписывая одну систему. А щас тема умерла и я вообще ее не юзаю. Потом плюнул на все и если что и пишу то тупо максимально просто и без заморочек. И такие системы как раз таки и дают доход и все с ними замечательно.

    Я скажу так — в нашем деле зарабатывания бабла важны две вещи: 1) скорость разработки 2) быстродействие кода. ВСЕ! Больше них-я не имеет значения. Это задротство и эстетство никаким образом с доходом от проекта не связано. Наоборот — оно только губительно влияет на него. Проекты надо печь как горячие пирожки. Работает? Быстро? Кода лапша? Да пох-й!

    1. Ну так работает и пофиг) В данный момент по мере крайней необходимости делаю что-то :-)

  2. это называется рефакторинг. При разработке сервисов — годная тема.
    При разработке доров — почти не нужно.

  3. > 2-го
    > 10-ми
    > 100-ню

    Ааааа, мои глаза! Самый пиздец, конечно, это
    > 1-ин
    так сократил!

    А если по теме, то в коде надо оставлять комментарии, описывающие КАК работает код, который не выглядит очевидным. Переписывать всё с нуля, скорее всего, не стоит, но с учётом новых знаний поправить участки говнокода нужно, иначе скилл разработчика не будет расти.

    1. писалось все быстро, менее чем за месяц в доп. время.
      С целью попробовать… Особо не думал про оптимальность, тупо сделать чтобы работало!

  4. А контент на этих витринах какой, только то что даёт иксемелька? или шо-то ещё парсится генерится?

    1. да. ничего не паршу и не генерю.
      Представление «больших данных» в различных вариациях

  5. Пост почти про меня :) Тоже по мере поступления проблем приходится осваивать новые технологии и понимать как это раньше вообще работало :) Но это ничего. Лучше написать говнокод и потом его исправить, чем выучить все как надо и ниасилить или упустить время.

  6. Только я не понял как ты в адмитад оферов одобряешь. В где слон это не надо делать, а адмитад вроде каждый офер нужно открыть

    1. ну в слоне сборная солянка + разрешены доры.
      В адмитад сам выбираешь, и не везде доры можно, зато есть эксклюзивные оферы

Добавить комментарий

Ваш e-mail не будет опубликован.