Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Yoda

Користувачі
  • Публікації

    3 172
  • З нами

  • Відвідування

Записи блогу, опубліковані користувачем Yoda

  1. Yoda
    Порадовался я тут значит этой истории
    Сделал промочку на вторую часть... И...  Все опять накрылось медным тазом.
    На следующий день после того как магазин зажил полной грудью он опять начал тупить при чем жестко.
    И если фронт работал кое-как, то вот товары обновить возможности не было никакой.

    Но давайте  с самого начала. 
    С чем мы столкнулись. 
    Магазин на 65 000 товаров, самая большая категория на 10к товаров, у каждого товара 5-8 атрибутов. Из бредомодулей стоит jetcache и filterviewer.
    Жил себе и жил этот магазин на обычном виртуальном хостинге, пока не начал потреблять порядка 30% физического сервера хостинга, превышая в пике допустимый лимит нагрузки пакета в 10 раз. 
     
    Когда я первый раз увидел этот проект, у меня было однозначное мнение, что это мертвый проект, так как скорее всего какой-то сеошник посоветовал сделать вот эти все посадочные под все со всеми и глаз пал на FV. 
    В чем печаль ситуации. Этот фильтр генерит явную ссылку на страницы фильтра в формате все со всеми атрибуты, опции, и еще вот это в наличии и по рейтингу. И вместо того чтобы сделать явными только посадочные, а остальные страницы спрятать за js-редирект, а еще бы и закрыть по какому то признаку в robots, как тот же ?mfp= в Мегафильтр, viewer такой возможности не дает. Так как это же сео, это посадочные, это сеошники так сказали.
    В итоге боты прриходят и застряют в этом болоте из сотен тысяч мусорных страницы фильтра, вместо того чтобы приходить на нормальные страницы товаров, категорий и руками созданные размеченные посадочные с адекватными тайтлами и контентом. Ща прибегут хейторы и скажут йода опять несет чушь. Предлагаю любому хейтеру показать мне проект, где подобный финт ушами от вивер фильтра дали хотя бы +200 уников из органического поиска. 
    И еще, viver говорит, что ну че там - ну у меня ж ноиндекс на второй третий уровень вложенности. Это все прекрасно и волшебно, но для того чтобы увидеть этот ноиндекс все равно надо сгенерить страницу, а их я напомню несколько сот тысяч. На которые пришли гугл, яндекс и бинг бот.
    Как говорит один мой знакомый, тут никакого сервера как у Пентагона не хватит.
    Ну и поверху всей этой красоты еще стоит jetcache, который создает видимость спокойствия. Не ну а че.. Ну из файлика же быстро html подгрузился по готовому кешу. А то что 3+ секунды загрузка на холодную. Так ну то фигня - самое главное же из кеша быстро, все 5 страниц которые туда попали и еще 50 000 страниц фильтра, а нормальный контент как был туп так и остался. Как грузилась категория на 10 000 товаров 5-6 секунд так и грузится (там еще нон стоп обновления товаров) и весь jetcache ходит по бороде так сказать.
    Но вот ложное чувство нормализации процесса давал.
     
     
    Ок. что делать? Перенесли сайт на впс - стало хуже. Так как на шареде, можно было забираться по уши в ресурсы соседей, а тут два ядра - и только они.
    И в этот момент владелец магазина обратился ко мне с вопросом, что же таки куда.

    И самое удивительное, он признал с первого раза всю дичь логики работы фильтер вивер и согласился его убрать. И поменять на  OcFiltere от  @SooR.
    После настройки серванта, после простановки индексов в базу, решения вопроса с кешами, выжигания filterviever и jetcache -  у нас вроде нормализовалась работа. И получились вот те графики которые были в первой статье. Но это была только прелюдия....

    Вчера опять проект лег в момент попытки обновить какие-то 6000 товаров.
    Начали разбираться и обнаружили падение базы. Начали смотреть почему падает, обнаружили нехватку памяти. Начали смотреть куда девается память - обнаружили оверхед потребления php-fpm. Начали разбираться почему - обнаружили, что в момент импорта-обновления таблиц mysql хоть их и не блочит, потому что innodb, но начинает подтупливать, потому что перестраивает индексы на больших таблицах. И в момент тупняка базы, становиться очередь запросов на генерацию страниц из php-fpm потоков, которые резервируют под себя память и в какой-то момент watchdog прибивает базу, как самый жадный процесс по потреблению памяти и пытается ее перезапустить, естественно убивая импорт и создавая проблемы для пользователей. Ну и оно в целом все время висит в момент импорта.

    Начали смотреть внимательней, и обнаружили в логах очень много зверей типа ahrefs, mj12  и других. Закрыли. Не полегчало.
    Попросил я дообавить 2 гигабайта памяти к 2 существующим на сервер. Добавили полегчало. И мало того, еще перенесли VPS на сервер с физической частотой процессоров в 5Ghz и вот тут полегчало глобально, импорт пролетел за какие-то 70 секунд. Все отлично. 
     
    Прошли сутки. И сегодня опять мне прислали вот такой скрин:
     

    Со словами - там в логах очень много гугл бота.
     
     
    Я был готов уже проклять тот день когда я сел за баранку этого паровоза.
    Но нет. Все решили. И сейчас вот так

    И время ответа страниц без каких либо кешей 300-800 мс. С фильтрами, и всем остальным всем, что было до.
     
    Вы спросите, а что же ты йода втираешь дичь. Типа. вот ты там решил потом не решил, потом опять справил и опять нет.
    Ну вот такой вот я Йода, который не может предусмотреть все. 
    Но если вы не хейтор, а вам интересно что же это было и как исправилось. То я вам расскажу, и это очень смешно:
     
    Помните мы убрали фильтр? А помните, по страницам фильтра боты ходили? 
    А теперь они увидели там 404, и что? Да пошли с утроенной силой чтобы проверить весь ресурс. На всю эту прорву мусороного контента, который был в очереди на сканирование. И был уже проиндексирован!
     
    Просто всего ничего к нам зашло за день и только на html контент (обращения к статике в логе не учитываются):
     

     
    Удивительно, чо же там с нагрузкой. 
    Ну ладно. Но у нас же проблема. Боты приходят на чпу ссылки. У нас нет хвоста site.com/filterviewer/какаятотупаястраницафильтра.
    Так бы мы могли спокойно в nginx-конфиге заблочить сразу это все в 404 на корню и забыть про проблему.

    Ок. Смотрим, что у нас есть в ссылках, а у нас там есть ~ в ссылках вида 
    023~500-031621~sp0720-8003-ts~500-0702701~500-0702702~2140-180~2141-228~2516-240~4152-250~4155-213~kr2300-205~tstr6-762ef~500-031616.

    Проверяем таблицу url_alias, там у нас символа ~ нету. Волшебно, БИНГО. Через минуту после блокировки всех ссылок с таким признаком на уровне web-сервера, наша нагрузка пришла в норму и проект зажил ровно так как и должен работать, зарабатывая владельцу деньги а не геморрой и седые волосы. 
     
    Нам еще много предстоит сделать, чтобы гадкий утенок превратился в красивого лебедя.  Но эта моя сказочка про конкретную историю, как бывает когда два неграмотных дополнения могут привести к остановке бизнеса на пару недель, и про то что не всегда стоит бежать покупать стопятидесятиядерные сервера, так как не разобравшись в корне проблем, решить вопрос железом может быть или слишком дорого или невозможно в принципе.
     
    UPD: прошли сутки и у нас новое бинго
     

     
    657 мать его тысяч запросов от гугл бота..
    Как это развидеть! Viiver ты что курил, прежде чем написать этот бред?
    Как тебя выпустили, я не знаю откуда, но людям тебя нельзя показывать!
  2. Yoda
    Тут давеча @ocdev_pro в личной переписке задал вопрос, какую ось поставить под новый проект, типа же вот ты там centos нахваливаешь, а я вот мол к дебиану привык. Ну дебиан - это такое, всем привычнее  чуть допиленная убунта.
    Типа где правда, и что делать.

    Ответ у меня для него было простой: ставь, то что тебе более привычно. Так как это просто в конечном итоге сэкономить время и уменьшит головные боли.
    В свою очередь я на стороне центос вот по каким причинам. centos - это все таки почти RedHat, а это типа enterprise. Понятное дело, что львиная доля понятия enterprise сводиться к качественной быстрой поддержке и экосистеме из специалистов, которые существуют в природе в достаточном количестве с быстрой доступностью, но так или иначе, без качественной оттестированной кодовой базы, сделать хороший сервис не выйдет.
    А так же есть определенный набор инструментов, которые приходиться повседневно использовать, и которые в centos есть в базовых репозиториях, а вот под debian их приходится собирать из пакетов, дружить зависимости и вот это вот все.
     
    А какие у вас на этот счет мнения?   
     
    Огромная просьба, в комментариях не уподобляйтесь яйцеголовым - с тезисами "потому что гладиолус", если  вы имеете что сказать - аргументируйте это фактами, а еще лучше ссылками на публичные авторитетные ресурсы.
  3. Yoda
    Друзья мои, недруги, странные люди типа пашчи и пейсатели модулей.
    Я тут немного совсем по бубенчики занят был последний месяц и очень занят до сих пор, сплю по 4-5 часов в сутки и совсем-совсем не хотел вмешиваться в ваши тухленькие расклады, где вы пишите форыч ордер бай наличие.
     
    Но чет у меня подгорает, поэтому что я имею сказать.
     
     
    За последний месяц на форуме потерялся нашелся maxd с странным лайтнингом, от которого больше вреда чем пользы - но маркетинг, он такой маркетинг.
     
    Руслан Шкварев пролюбил шоколодано свой  сервер лицензий, а у кучи людей, которые купили фильтр про, теперь могут быть проблемы под черную пятиницу, ну и это фейл 2020 однозначный герой-судак всия опынкорда.
     
    Куда то слили моего любимого эндемика с острова святой перфокарты сайт криатора. 
     
    А блин жеже!!! на их решениях работают 100500 магазинов. И вот какая то безответсвенная дичь получается. Форум модуля продал.
    Автора дополнений удалили с площадки, автор потерялся в гештальт головного мозга или автор просто глупый мишка, который забил на опенкарт работая на дядю, а когда его тряпочкой выгнали, вспомнил что форум и идиоты-владельцы магазинов могут заплатить за его кривой фильтр и сеоген  упертый с дед кау сео, вдруг вернулся, пролюбил домен лицнзий и начал активность, я не я, хата не моя. Тут надо сделать отдельную ремарку, что хвала Диноксу, это первый раз когда он не стратил а вовремя упредил проблему кучи магазинов.
     
    Ну это ладно. 
    Там вон где то в теме вещают про зло не зло ионкуб, кодирование, привязка к серверу. 
    Не знаю зло это или нет. Я уже давно про всех героев написал с кем не стоит связываться из-за их личной жадности...
     
     
    Но <!---- здесь очень много ненормативной лексики -->

    Простите меня, а какого лешего, люди которые покупают дополнения должны зависеть от таких странных безответственных судаков, как maxd, freelancer, sitecreator.
    Ну давайте уже по честному, площадка продает? - продает. Эти зашкваренные товарищи продавали? продавали. Если не дай бог они появятся... С повторными исполнениями, ну как фриланеср появился.. А давайте наверное друзья код отдайте сначала открытый владельцам площадки....
     
    Чтобы если вы решите уйти, заболеть, умереть, выйти замуж гей-браком, пролюбить домен лицензий, от ваших личных месячных и жизненных обстоятельств не зависели сотни и тысячи покупателей ваших кривых поделок. Чтобы в случае чего площадка могла обеспечить ответственное исполнение своих  обязательств и не подставлять вот этих всех прекрасных людей, которые умудряются в нынешних ковидных реалиях выживать и делать бизнес...
     
    Я считаю что ни один владелец магазина, не должен страдать от того, что кто-то решил потеряться на полгода и не умеет file_get_content вместо curl, или от того что человек забыл продлить домен лицензий.
     
    И не говорите что я не предупреждал....
    Когда мы вскрыли маркуши проделки, я во все колокола звонил с месседжем, что лицензирование и раздача дополнений авторами и на ресурсах авторов - это зло. И ионкубленные модули без открытых исходников для администрации - еще большее зло...
     

    Ну а те кто не согласен - ну давайте усирайте платформу дальше в угоду своей жабы. Мне с вами не по пути и в аду для вас отдельный казан приготовлен!
  4. Yoda
    Друзья мои.
    Реально у меня очень пригорает еще раз.
    За последнюю неделю порядка 100 обращений. Все одного вида: я поставил джет кеш. Я ходил к роме криатору на хай оптимайзер. Я ходил к максу д на лайтинг, Я купил на рег ру еще себе 500 ядер сервера.... 
    Итог одни - просадка в выдаче и нулевой результат.
     
    И даже если начинаешь диалог. Начинаются какие то pagespeed, gtmetrix и прочая лабуда...
    Сеошники сказали подогнать пейдж спид, друг-конкурент у которого в три раза больше продаж вот у  него там все а у меня не очень...

    Реально очень заколебало слушать ваше нытье....

    Эта статья не для того чтобы ущербить неумелого марка, не для того чтобы загнать рому криатора, и  ни в коем случае, не для того чтобы занизить все кривые решения гештальт-терпапевта maxd.
     
    Эта статья для тех кто умеет думать... ( ну и чтобы я ее всем вопрошающим копипастил, ибо меня заманало всем писать одно и тоже)

    И давайте начнем думать вместе.
     
    У вас есть магазин. 
    В нем есть какое то количестов полезного контента для пользователей, гугл бот он умный - и он тоже понимает что это полезный контент для пользователей.
    НО..... если у вас 5000 страниц контента, и гугл бот к вам придет вдруг за один день за всеми вашими 5000 страниц он вас просто задддосит.
    Поэтому он ходит очень нежно... 
     
    И чем быстрее у вас "холодные страницы" тем быстрее и чаще к вам ходит гугл-бот.
    Не взирая на page speed, не взирая на gmetrix, кстати яндекс бот хоодит так же - оценивая нагрузку на ресурс и тормоза, которые своим посещением он вызывает....
     
    И тут возникает нормальное естественное желание сделать больше и чаще индексацию и более регулярные заходы гугл и яндекс бота. Ок ок...
     
    Вы же идете и думаете опа.. куплю я ща х*й кеш или лайтнинг и у меня будет быстро....
    Ну и да... Все эти моды сохраняют ваши страницы как html тупой и вроде офигеть - было 5 сек, стало 0.2 Круто же...

    Только нифига не круто. Бот ходит не только там где у вас есть сохраненный html,  а туда куда случайно захотел по списку из sitemap.xml если он есть.
    А там кеша нету и ваши те же 5 секунд. Яндекс бот ваще такое не загрузит. Гугл-бот как-то пропустит, но будет ходить мало и не очень...

    А еще, для ваших пользователей, все эти кеши, когда есть корзина вырубаются, и тут оп.. Было быстро, а стало по 5 секунд на странице. А вы же заплатили, чтобы вам сделали быстро. Только все упыри молчат, что все быстрые страницы только из кеша! А для пользовательских сессий - все не очень! И я тут молчу и про фильтры, и про поиск. И про вот это  все - что персонализировано. И не ушло предыдущим посетителем в файловый кеш.

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

    Ну да ладно... У вас типа быстрый сайт. Но гугл бот чет не ходит....
    И пейдж спид красивый, если не зайти на случайную страницу. А еще при втором заходе будет оп оп.. и типа быстро.

    Я это все к чему. Все  реализации, которые делают из вашего магазина html сайт имеют право на жизнь в одном случае - если вы OZON и выходите на IPO. 
    А если вы начинающий интернет-ларек, если хотите бодаться с конкурентами - будьте добры быть быстрее их на холодную. И да... это имеет смысл...
    Допустим мы не берем во внимание байки, что якобы пс учитывают скорость генерации страниц сайта (НЕ ПЕЙДЖ СПИД) а именно скорость ответа, во внимание.
    Вобщем предыдущий тезис - неважен, берем во внимание простой процесс.. чем быстрее сайт,.тем больше краулинговый бюджет, чем боьше краулинговый бюджет - тем луче индексация.
    Быстрый сайт из какого-то файлового кеша, типа быстрая главная страница, а все остальное тупо - не значит ни разу, быстрый сайт для поисковых систем.

    Хотите быстрый  магазин - используйте проверенные решения, быстрый хостинг, делайте оптимизацию всего от фильтра до поиска, требуйте от ваших разработчиков минимизации количества запросов. А то приходят люди и говорят тупит. А у них 70 к запросов на страницу. Даже по тысячной секунды - это семь секунд. Ну как так то нафиг!
     
    Маленький дисклаймер. Я  ни в коем случае не хочу этим постом переубедить секты святых фанатов пейдж спид и джет кеш. Я ни коим разом не хочу, чтобы эти глупые люди, верующие в святую пузомерку и jet-cache, зарабатывали деньги. По моему они должны канавы рыть лопатой землю за дешевый прайс,  а не торговать. И не стоит их ни в коем случае переубеждать.

    Данный пост написан для тех кто умеет слышать и думать. И для того чтобы не отвечать по 20 раз в день на однотипные вопросы.
  5. Yoda
    Расскажу вам интересную технологию, которая позволяет без ущерба для ресурсов выживать под гнетом самодурства странных законов тех или иных правительств.

    Предположим у  нас есть магазин в РБ, которому необходимо держать большую нагрузку.
    Но сервера в РБ стоят диких денег, да и хороших серверов нет. А нам надо разместить сайт где-то на hetzner. По законодательству РБ - это айяй, так как все ресурсы должны быть с айпи, которые принадлежат белорусским провайдерам.
     
    Ок ок.. 
    Берем небольшой сервер в РБ, без всяких там панелей, еще чего-то. Ставим чистый NGINX, берем сервер на Hetzner  и делаем proxy-прокладку с сервера  в РБ на сервер на hetzner.
    И выглядит это так:
     
    мир -> проклада.рб (чистый nginx, который работает как прокси) -> hetzner (с полноценным веб сервером) -> прокладка -> мир.

    Да мы получим небольшой  лаг по времени, но он не сравним с лагами и ценником беларуских хостеров.
    Радуемся.

    Если займетесь подобным процессом, вам очень пригодиться вот этот мануал:
    https://www.digitalocean.com/community/tutorials/how-to-proxy-digitalocean-spaces-with-nginx-on-ubuntu-16-04
    Как разворачивать прокси на nginx.
    И вот этот про то как сделать let's encrypt сертификат для nginx  с помощью cert-bot
    https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-centos-7
     
    Также подобная техника может очень пригодится, если вы находитесь в ру-зоне и по каким-то причинам РКН блокирует ваши домены. Иногда бывают случаи, когда домен блокируется наглухо вместе с аккаунтом у хостера, айпи  и самим доменом. И нет возможности что-либо с этим сделать. Или оперативно склеить трафик со старого на новый домен. 
    Поэтому берем разворачиваем базовый ресурс сайта на любом вменяемом хостинге. Покупаем за 5 евро на Digital Ocean или На хетцнер клауд минимальную ноду, ставим туда NGINX как прокладку и так же запускаем на основной базовый ресурс, если вдруг получили блокировку, за 20 минут, развернули новый домен на новую клауд-ноду, подклеили на старой старый домен редиректом на новую и без потери трафика и позиций, работаем дальше!
     
     
     
  6. Yoda
    Недавно у моего товарища произошло странное. У него перестала ходить почта совсем.
    Идем смотрим в логи Exim - а там все FROZEN.
     
    Запускаем проверку на  https://www.mail-tester.com/ а там 0 баллов из 10(не просто шлем из почтового ящика, а регистрируем на тестовую почту пользователя в магазине к примеру). Неактуально ничего, все мои предыдущие настройки коту под хвост. 
    Ни DKIM ни Spf ни PtR не соответствуют действительно. И за несколько месяцев, из-за таких настроек, айпи попало в спам-базы и в черный список в самом Гугле.
     
    Так произошло по нескольким причинам, хостер поменял IP сервера и товарищ пытался отправлять почту с магазина от имени ящика на GMAIL, а не с почты вида [email protected] или любой другой в контексте домена. В итоге все это привело к очень крепкой блокировке как айпи так и домена почтовиками.
     
    Начинаем с азов. Заходим в  
    https://www.dnsbl.info/
     
    И обнаруживаем айпи в списках http://spfbl.net/en/dnsbl/.
    Это очень быстро реагирующая штука, и чтобы с ней бороться  надо сделать делистинг, а чтобы сделать делистинг нам нужен PTR (запрашиваем у хостера)  и почтовый ящик [email protected], после запроса делиста в наш ящик приходит уведомление, переходим по ссылке - и ура,  нас нет в спам базе.
     
    После этого актуализируем DKIM и SPF записи (средствами ISP панели делается в два клика), и после этого ждем, какое-то время (часов 20), пока обновятся DNS записи и почтовики увидят обновление, как и обновление списков спам-баз.
     
    После этого отправляем из магазина тестовую почту и видим, что у нас все ок. 
     

     
    В целом, если мы видим такую картинку в гугле в исходниках почты - то спам побежден - тут тяжелый случай оказался. 
    Пришлось искать в закромах гугла форму, которая позволяет написать жалобу на ложный спам. 
    ИИИИ... через 2-3 дня домен отпустило и почта пошла как надо.
     
    На все про все ушло очень много времени, тестов и попыток, которые привели к пониманию (в процесс мы сталкивались с глюками exim и isp5, которые не позволяли сделать корректную  DKIM подпись) и большим количеством странных мелочей и совпадений, которые сразу не упомнишь. Но результат того стоил.

    Если бы это был не мой хороший товарищ - а малознакомый пациент, то скорее всего решение было бы простое и однозначное - перенести почту на yandex connect или на платную Gmail для домена и забыть про эти проблемы как страшный сон. Хотя опять же их тоже пришлось настраивать. И DKIM корректный прописывать и SPF. И отправку через SMTP в магазине.
     
     
     
  7. Yoda
    Есть на форуме неплохое дополнение
    Красиво, информативно, кошерно.
    Если у вас 3 товара, все ок!
     
    Но, если у вас их 5000 и на каждый 5 изображений, вот эта штука, чтобы подсчитать размер файлов, сканирует всю структуру папок кеша изображений.
    Зачем и для чего?

    Ниче не имею против автора, и скорее всего он просто про это не думал и не сталкивался, но стоит сделать каким то образом эти данны обновляемыми раз в 15 минут и хранить их где-то и кнопку принудительного пересчета. Ну и вроде - не страшно, что админка тупит - но, если вы подгружаете так постоянно файловую систему - то может тупить и фронт! 
    Так что если вы ощущаете тормоза админки и у вас установлен этот модуль - подумайте, стоит ли оно того!
  8. Yoda
    Несколько дней назад я опубликовал пост про cache cleaner, где я сказал, что его автор - отличный парень, молодец, сделал для всех неплохое бесплатное дополнение.

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

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

    Мне кажется что в ситуации с cache cleaner, я не только никого не обидел, тем что не написал автору, а еще и дал всем людям, кто использует это дополнение возможность лишиться проблем - тоесть поучаствовал в open-source развитии, а также показал пример разрабам, как не надо делать.
    И никого не ущемил!

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

    Ну и ладно, там я. Мне не привыкать. А вот мой друг вурдалак @stickpro, написал отличную статью про гит, две..
    Сколько там хейта и неприятие.
    Я не могу понять, у нас тут совсем все загнило. Продаем продаем и продаем. А если вдруг технологии пошли развиваться и кто-то чуть умнее и лучше - то сразу враг, и надо хейтить?
     
    Может вам дедушкам пора могилку себе подбирать уже, а не каменты про опенкарт постить?
  9. Yoda
    Наверное этот пост должен написать не я, а @dinox, но так уж и  быть.
     
    Регулярно на форуме у нас появляются посты двух видов. Либо несчастный клиент плачет, что заплатил предоплату непонятно кому и человек слился, либо же наоборот несчастный фрилансер взялся за три копейки делать ТЗ, на три тысячи.
     
    На самом деле очень просто избежать подобных проблем. Как одним так и вторым.
    Что касается вопросов разработчиков и претензий их к заказчикам. Я считаю, что  у людей которые давно здесь находятся, должно сформироваться понимание, что иногда проще в угоду заказчику потратить полчаса-час своего времени, пойти на встречу и закрыть все претензии. 
     
    А вот у заказчиков реальные проблемы. Рейтинг пользователей форума не отражает никоим образом реальную картину оценки разработчиков, так как он накручивается парой-тройкой клонов за два месяца до нескольких сотен позиций, а также есть пользователи с очень большим рейтингом, которые не очень разработчики, типа @Tom или @AWARO, но просто они поотвечали в какие-то темы и нахайпили себе репу.
     
    Поэтому для заказчика остается два варианта - тема с отзывами  о разрабе, которая тоже не панацея, так как те же недосео отлично ее раскачали свежерегами. И второе. Есть простой вопрос - а что ты сделал?
     
    Вот я будучи регулярным заказчиком тех или иных решений, всегда спрашиваю, а покажи ка, сынок, что ты сделал? Где у тебя успешные магазины, которые работают по несколько лет, к которым ты приложил руку, где твои те или иные решения для коммьнюнити, где платные модули с  большим количеством продаж. И если я вижу, что человек не просто заливает в уши, а реально ответственно себя ведет. Компетентно быстро отвечает на вопросы и т.д. Это все очень быстро видно.
     
    Но если человек зарегал аккаунт вчера, насыпал в 10 тем однотипные ответы - могу сделать обращайтесь, или написал в личку - от таких надо бежать и никогда с ними не связываться!
     
    А в целом, давно назрела потребность, развесить на ответственных людей стикеры - "авторизованный разработчик" или что-то в этом духе, чтобы всякая шушера не разводила доверчивый народ. 
  10. Yoda
    Если вы все ждете, что я вам ща подробно расскажу, что случилось с бложиком - не дождетесь, просто так получилось, что он не мой. Контент мой, а домен нет!
    Поэтому я принял волевое решение с ними расстаться и его похоронить, хоть он мне и дорог как память.
    Хочу новый бложик, уже неделю не могу придумать доменное имя подходящее! 

    Если есть идеи.. Велкам 2000 рублей приз тому кто придумает подходящее и я его оформлю!
  11. Yoda
    Сейчас можно найти множество инструкций и услуг по настройке VPS серверов. Люди публикуют какие-то твики, фичи, секретные конфиги. Которые нифига не работают!
    Сколько раз я слышал - мы поменяли хостинг на сервер и ничего не произошло. Ну а что должно произойти, если один компьютер поменяли на такой же другой?
    Ничего. Ну да, там выделенный айпи, якобы изолированные ресурсы (что полное вранье в 99% случаев, так как я еще не видел ни  одного VPS провайдера, который бы не оверселлил).
    Но все же при нынешних ценах на выделенные сервера, любому магазину VPS - мастхев. Наверное стоит про это отдельно написать развернуто в следующий раз.
     
    Что же сделать, чтобы увидеть результат?
    1 - У вас должно быть достаточно ресурсов, никаких пакетов (одно ядро один гигабайт памяти), можно долго рассказывать почему, но просто поверьте, даже для стабильной работы магазина на 1000 товаров и 1000 посещений в день нужен запас и хотя бы 2 ядра два гига. Если очень кратко, то ваш сервер не только формирует веб-страницы для пользователей, а делает еще много системных операций от бекапов до блокировки подключений левых ботов, на что тоже тратятся ресурсы. Да и генерация одновременно 5-6 страниц магазина в секунду с раздачей статики на каждую страницу - это тоже чуть больше чем 1гигабайт памяти и 1 ядро.
    Ну и никаких там 10 гигабайт ssd диска 40 гигабайт hdd. Это все жлобство 80 левела.
     
    2 - Ядры выдры. Виртуализация KVM предполагает, что вам доступны виртуальные ядра KVM-ядро, которое вам и продают как базовую единицу, а на каком железе физически базируется это решение - никто вам не расскажет, это может быть реально какой-нибудь бушный celeron, который десять лет назад выкинули на свалку, но его навиртуализировали на пару десятков ядер и продают вам как горячий пирожок. Последние несколько месяцев хостеры наконец-то поняли что пора улучшаться и начали предоставлять быстрые сервера - у хост про - это турбо, у админвпс мощные, у таймвеб 5.5 гГц. Покупаете быстрый сервер и уже сразу видите результат. Ну и NVME тоже решает.
     
    3 - Большинство хостеров продают или дают в нагрузку ISP manager 5. Кто-то его уже предварительно настроил, кто-то нет. Хотите чтобы ваши магазины работали быстро - проверьте чтобы для PHP был включен Opcache  и не было жестких ограничений на max_connect_limit в mysql.
     
    4 - Айпи и почта. Вот тут самое интересное. Скорее всего ваш айпи был уже у кого-то в пользовании и его скорее всего всадили в спам листы. Купили впс проверьте айпи через  https://www.dnsbl.info/ - вы неприятно удвитесь. Если айпи в блек листе - хорошей отправки-доставки почты вам не видать как своих ушей, придется поработать над делистом из блек-листов!
     
    5 - Почта почта. Попросите сразу хостера сделать PTR или rDNS для вашего айпи с привязкой к домену. Обычно никто этого никогда не делает! Опять же, хотите отправку почты с сервера - без PTR не выйдет. Также, все хостеры как правило выдают сервера в виде vps34234.hoster.com. Сразу меняйте hostname на ваш домен. А еще отключайте ipv6 при отправке  в конфиге exim.
     
    6 - Файловая система. И это очень важно. Вот прям очень очень. На сегодня для развертывания виртуальной среды есть уже достаточно зрелые инструменты, их много разных, в подробности нет смысла вдаваться, так как рядовому пользователю сервера в этом нет необходимости. Просто нужно понимать, что одни хостинг-провайдеру используют облачные файловые хранилища, и это сразу плохо, другие же используют физический локальный диск.  В случае если хостинг-провайдер vps-сервера позволяет на-лету менять-добавлять размер диска сервера - на 300% там под капотом какой нибудь LVM или  ceph, и то и другое замечательные технологии, но они предполагают большой оверхед по ресурсам. Да они позволяют в горячем режиме без остановки сервера делать снепшот виртуальных машин, быстро масштабироваться. Но все эти прекрасные возможности требуют ресурсов, и синхронизация между физическими дисками, так или иначе оказывается бутылочным горлышком. Поэтому я бы однозначно советовал выбирать впс сервера у провайдеров, которые в своей архитектуре используют локальную файловую систему текущего сервера без виртуальных файловых  хранилищ.
     
    Подписываемся, ставим лайки, комменитруем!
     
  12. Yoda
    Регулярно я вижу это сообщение. "настройте мне сервер, чтобы у меня работали 100 000 товаров на моем неплохом впс сервере".
     
    Ну вроде там как бы логично. Хостер заявляет про классные сервера, а фрилансер, который сделал магазин - говорит иди к йоде - он тебе сделает настройку сервера и все полетит задышит.

    Так вот друзья. Не бывает настроек сервера, которые позволят мертвому магазину, тащить сотню тысяч товаров на ура..
     
    Потому что максимум, что мы можем сделать на сервере, настроить затюнить опкеш, махнуть файловый кеш на хранилище в памяти (не всегда актуально на быстрых впс с NVME), сделать несколько тюнячек для mysql сервера и воткнуть nginx + php-fpm вместо тупорылого апача (не берем во внимание кастомные решения в виде полного нативного кеширования html средствами Nginx, но это опять же кеширование).
     
    Там где у вас есть пару сотен онлайна одновременно, там вот есть настройки сервера. Лимиты, максимальное количество коннектов, воркеры nginx, процесс php-fpm. Но в 99% случаев на магазинах где нет и тысячи живых хостов в день - это высшая ненужная кибениматика.
     
    И тут вопрос - йодман, шо за дела. Ты же там делаешь быстрые магазины и гнобишь всех разработчиков кешереов. И тут друзья реально да. Я делаю быстрые магазины и гноблю всех разработчиков кешеров, почему, потому что, магазины, которые попадают в мои заботливые руки, потом работают без кешеров, быстрее чем с ними - это раз. А два, кроме быстрой генерации страниц я умею делать и быстрый поиск, и быструю навигацию по товарам в админке и много чего еще. Но суть не в этом...
     
    Друзья, настройка сервера - это последняя линия обороны. Важная - но не первичная!

    Если вы хотите большой магазин на много товаров, вы должны закрыть вопросы "холодной" генерации страниц.  А не закешированных версий, почему, потому что это важно для поисковых систем. Яндекс и Гугл - они ходят туда куда хотят, и если у вас страницы не было в кеше, а генерация у нее 5-8 секунд, они больше к вам не придут и страницу выбросят из индекса. Поэтому, если хотите, чтобы ваш большой магазин проиндексировался - вам надо иметь время ответа до секунды на всех страницах, чтобы поисковики не ходили мимо.
     
    Как это сделать? В интернете есть масса советов, типа... используйте индексы, используйте кеширование. Но! У нас в опенкарте, нормализованная структура данных, и не нормализованная структура значений для атрибутов. Первая ситуация ограничивает использование индексов при выборке-подсчете товаров  в категориях, вторая при выборке подсчете значений фильтров.
    Если бы у нас был один язык, один магазин и вместо текстовых значений атрибутов была бы нормализованная индексированная таблица с набором id->value(значение атрибута), просто банальным построением индексов в базе и минимальными правками запросов мы бы получали нулевую нагрузку на выборку данных товаров из категорий. Все эти getProducts getTotalProducts - выполнялись за тысячные секунды. Равно как и подсчет атрибутов. 
     
    Но нет! У нас опенкарт!.
     
    У нас есть писатели фильтров, не будем тыкать пальцем, которые умудряются в кеш укладывать десятки тысяч файлов и одно присутствие таких фильтров - это уже тупняк.
    Зачастую, тюнинг магазина - это разгребание авгиевых конюшен от модулепейсайтелей, а не тюнинг в привычном понимании.
     
    Что же делать? 
    Ну нет однозначного ответа и решения. Никогда нет.
    Иногда бывает достаточно поменять сервер и проставить банальные индексы.
    Иногда поменять фильтр на 
    Реально - это единственное решение на всем форуме, от автора, который понимает чем нормализованные данные отличаются от денормализованных, и где и какие структуры надо использовать. Несмотря на то что у меня есть масса вопросов к другим аспектам работы его решения, в целом с точки зрения производительности из коробки - это №1!

    Если вы думаете что MegaFilterPro, который индексирует якобы ваш каталог, и чего-то там долго думает дает производительность - не верьте. Сам по себе Mega фильтр - шикарная штука, но вот эта их индексация мертвому припарка, так как там идет попытка использваняи фулл-текст индексов, а они немного про другое, чем тот процесс, который пытаются решить с их помощью авторы! Лучше бы сегментацию по категориями сделали  в выборках всех атрибутов на категорию!
     
    Если у вас нет данных и вы торгуете к примеру автозапчястями и вам нужен быстрый старт с поиском по коду детали - вы можете посмотрреть в сторону бесплатного модуля Sphinx:
    https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=18266
     
    Который позволит не только выводить поисковые результаты но и весь каталог из сфинкса а не из базы. Да он не будет совместим с фильтрами и поисковые возможности самого модуля на нуле. Но это решение, которое позволит за несколько десятков долларов за внедрение, поднять практически любое количество товаров в магазине.
     
    Но как же так получается у нас запускать магазины на 2-3 миллиона товаров и что вот у них все хорошо.
     
    Ну по секрету скажу - что случайно)
    Так получилось, что первый человек с таким запросом - был мой хороший друг, и мы с ним начали работать в формате - ну а давай попробуем, попробовали так и сяк и эдак, стандартными методами не вышло. Те решения, которые работали на 20-30-100к товаров на миллион уже не работали, а тем более на миллион товаров в одной категории.

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

    Но после того как мы решили вопросы производительности фронта (категории, товары, фильтр, главная страница), возникли и иные вопросы, а именно: обновление цен, добавление новых товаров, манипуляции с заказами в админке, поиск, и так далее. Да и это получилось решить. При чем, решить таким образом, чтобы не уходить от стандартной структуры таблиц Opencart.
     
    И еще раз подчеркну... Все решения - это не настройка сервера. Это создание комплекса. Да у нас быстрый и хорошо настроенный сервер, но у нас еще более быстрый и грамотный код. У нас перестроенные запросы в админских моделях. Нам пришлось вскрывать csv import от ионкуба, для того чтобы оптимизировать глупые запросы автора. И да мы получили результат.
     
    Есть еще наверное несколько сотен проектов, которые стали быстрые посредством тех или иных решений и технологий, но я всегда стараюсь приводить в пример реальные достижения а не мелкую текучку....
     
    Ну и с чего начал, на том и закончу - не бывает "настройки сервера" от которой ваш магазин вдруг взлетит! И не бывает модулей, которые вжунь и закроют все вопросы производительности. Бывает долгая кропотливая работа по настройке проектов.
     
    А те кто думают по другому - могу дать тестовую базу на пару лямов товаров - покажите мне как вы ее запустите на генерацию полмиллиона страниц в день!
    Ну и как всегда пари платное - 100 000 рублей!
  13. Yoda
    Я уже немного старенький, но чтобы не очень чтобы совсем, и да на меня надевали пионерский галстук, я его с гордостью носил, и да тезис - не обежать слабых во мне живет. Связано это с галстуком или нет - я не знаю! 
    Но это по сути неважно.  Слабеньких и хиленьких в древнем Риме со скалы сбрасывали и вобщем ничо жили!

    Но имеем, то что имеем. В далеком 2011 году, когда мы сделали  с моим коллегой @snastik свой первый магазин, мы очень сильно ощутили всю боль общения с так называемыми представителями фриланса. Помнится мне один персонаж, не буду тыкать пальцем, полгода терялся и так все и не доделал!.

    В итоге пришлось вспомнить что тыжепрограммист и грызть этот гранит науки.
     
    За это время очень много воды утекло. Мы сделали сборку opencart.pro, которая явилась результатом наших потуг в работе своих магазинов, мы повлияли так или иначе на разработку массы решений в тех или иных дополнениях, счет которым идет на сотне, мы нашли вагон и маленькую тележку тех или иных уязвимостей и  недеоработок, о которых регулярно рапотруем авторам, да и в конце концов мы создали альтернативное вменяемое сообщество разработчиков, в которых нет администратора динокса или ступора, в котором все равны и бан можно получить только за грань выходящей морали, типа оправдания свадьбы с полотенечком.
     
    С 11 года утекло много воды, и наверное года с 15-16 мы начали развивать сборку PRO, в результате чего мы регулярно сталкиваемся с глупостью и тупостью странных авторов и разработчиков.
    Мало того, как то так получилось, что при разработке ocstore 3.х, которому мы способствовали, у нас их под носа @AWARO и @chukcha увели наш же собственный код и до сих пор успешно продают его на ливеопенкарт у бессовестного @19th, который за бабки мать родную продаст - но аллах ему рефери!
     
    Далее мой друг @snastik никоим образом не участвует в ситуациях. Все что проихсодит последние три года на форуме, что вы можете записать в наш огород происходит сугубо с моей подачи.
     
    Я выше же описал, что у нас были жесткие анальные боли, когда нас разводили, кидали, кормили завтраками, у нас горели магазины по реализациям, и единственный кто мог помочь - это был @Yesvik, собственно говоря благодаря которому и нашим посильным потугам возникло seo_pro, уник тайтлы h1 description в рамках сборки ocstore и много чего еще....
    Но это было давно, рынок трансформировался, мы росли, росли запросы. На форуме появлялись и исчезали те или иные разработчики, вроде как @SooR, которого не было слышно видно два года, а потом бах и отличный фильтр.

    Паралельно присутствовали чудесные, волшебные люди как @usergio или @yarik или @progroman, в сторону которых я не в силах под пытками сказать плохого слова, потому что они закрывали всегда по мере своих возможностей желания покупателей дополнений и делали это настолько оперативно и качественно, что я просто завидую белой завистью.
     
    Так сложилось, что у меня сформировалось большое количество друзей владельцев магазинов, которые росли вместе со мной, у многих дети родились я знаю как их зовут, а сейчас они уже в школу пошли. 
     
    Паралельно с ними на форум пришла плеяда аферистов-деятелей. Типа @MaxD, @markimax, @sitecreator, @Otvet, которые будучи вроде чуток грамотными людьми, абсолютно путают берега. В их понимании сначала были модули, а потом магазин! Но увы - это не так!  Я будучи хозяином  и совладельцем нескольких очень успешных проектов на opencart, никогда в жизни врагу не пожелаю ни одного дополнения от этих авторов, там большой список - но эти особенно выделяются!
     
    Мне по каждому из этих персонажей есть что рассказать. Чать информации, вы все видели про того же @markimax на хабре, как он удачно встроил шелл в свои модули, часть информации про neoseo, которых нет с нами, может подтвердить тот же @SooR у котрого они нагло украли фильтр. Вобщем регулярно тут появляется какой то аферизм...

    Меня кстат пару раз банили за то что я ****** и панду код называл аферистами - и никто так и не извинился.... Так вот друзья...
     
    У нас есть какая то вялая импотенция владельцев форума. С одной стороны @dinox Саша говорит я с вами и я буду тут решать проблемы, удаляет ******,  с другой стороны на его площадке появляется дополнение, которое делает моему товарищу вот так:
     

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

    так что друзья! Тут у вас небольшая мафия, которая лепит чушь и на боли за pagespeed-очки с вас пытается стричь бабло @MaxD, @markimax и @sitecreator - по пять обращений в день у меня... Лишите пожалуйста нас от этого хлама, сделайте быстрый магазин. Если есть свбодное время, мы спасаем!

    Но @dinox это твоя площадка, и ты там ответственен, вникни пожалуйста в ситуацию. А то один тут метрику не грузит, а второй со свого сервера скрипты левые раздает!
    Мои подопеченые вроде в курсе!

    А вот что делать со всеми оостальными 140 000 участниками сообщества. которые нифига не понимают, и верят тому что говорит сикилятор, ссылаясь на сикилятора!
     
  14. Yoda
    Все мы хорошо знакомы с боленями опенкарта и дублями.
    Но немногие заморачиваются с их устраненением.

    Очень часто криворукие писатели дополнений не утруждают себя проверять код  и в вашем магазине появляются ссылки вида
    http://vash_magazin//////какой_то_адрес/?id=какой то айди
     
    Убрать повторяющиеся слеши очень просто.
    Достаточно добавить в .htaccess после rewrite base
     
    вот такой код:
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/{2,} [NC] RewriteRule ^(.*) $1 [R=301,L]  
  15. Yoda
    Многие участники коммьюнити знают, что я занимаюсь нагруженными проектами и собаку съел на поиске узких бутылочных горлышек. И opencartforum в том числе работает благодаря моему участию, так что поводов усомниться в моих высказываниях, особо не должно ни у кого возникнуть!

    Почему именно проектами а не проблемами движка opencart, потому что в самом движке все понятно и просто, а в проектах бывает все очень весело.
     
    90% тормозов магазинов связано с разработчиками и слабой экспертизой разработчиков и программистов.
     
    Почему то в определенных узких кругах считается моветоном обсуждать косяки друг друга,и не дай боже сказать, Вася, ты дурак, ты своротил полный бред!
    Мне всю жизнь было побоку на чье-то субъективное мнение, и истина мне дороже чем чье-то псевдопозитивное отношение, поэтому в этих "узких кружках" разработчиков регулярно бомбит в мою сторону, когда кого-то из них мы выводим на чистую воду,  но как говорили в КВН нас "много".
     
    Просто приведу вам пример из последних двух инцидентов с которыми мне пришлось столкнуться:

    История первая.

    Магазин на 10 000 товаров, все от души заполнено, все атрибуты, опциии, описания, все хорошо.
    Стоит фильтр от госоподина @SooR, который в целом в свежих версиях в том числе и моими молитвами, достаточно быстро работает, но нет!
    4 секунду генерация без сфомированных кешей на выделенном сервер с 16 ядрами и вагоном оперативной памяти.

    Начинаем разбираться. У проекта  есть собственный программист, который его ведет, и который там накопал такого...... что никуда не натянешь. От опенкарта осталось только названия. На вопрос зачем - ответ. Ну мне так надо было. 
    На вопрос дружище. А как же там все патчи безопасности, обновления функционала, стабильные версии дополнений, в ответ текст - ты ваще кто здесь, чтобы мне что-то расказывать. 
    ок ок. дружище, мое дело маленькое, найти причину тормозов.
    Путем нехитрых манипуляций обнаруживаем очень смешной код:
     $q = "SELECT slide_value_min,                             slide_value_max,                             option_id                      FROM " . DB_PREFIX . "ocfilter_option_value_to_product                      WHERE option_id IN (" . implode(',', $slider_options_id) . ") AND slide_value_min > '0'";                 $query = $this->db->query($q);                 if ($query->num_rows) {                     $slide_data = array();                     foreach ($query->rows as $row) {                         $slide_data[$row['option_id']]['min'][] = $row['slide_value_min'];                         $slide_data[$row['option_id']]['max'][] = $row['slide_value_max'];                     }                     foreach ($query->rows as $row) {                         $options_data[$row['option_id']]['slide_value_min'] = preg_replace('!(0+?$)|(\.0+?$)!', '', min($slide_data[$row['option_id']]['min']));                         $options_data[$row['option_id']]['slide_value_max'] = preg_replace('!(0+?$)|(\.0+?$)!', '', max(array_merge($slide_data[$row['option_id']]['max'], $slide_data[$row['option_id']]['min'])));                     }                 } Это полный фак фак мазафак, вместо того чтобы использовать всю реляционную мощь mysql, это существо, перебирает и мерджит и сравнивает вагон массивов.
    Конкретно в нашем случае у нас было 4000 значений из базы, на каждое из которых работало вот это
     
    preg_replace('!(0+?$)|(\.0+?$)!', '', max(array_merge($slide_data[$row['option_id']]['max'], $slide_data[$row['option_id']]['min']))); 4000 итерация регулярки + объединения массива + нахождение max значения. Это даже не индусский код - это ДНО...
    Сидит человек на зарплате, пилит проект, накрутил его так , что кроме него там никто не разберется, чтобы не дай бог его не уволили, и пишет ДНОООООООО!!!!
    Это не код, это 80 левел ДНА. Пятиклассники на информатике такого не делают.
     
    Ок, исправляем, немного костыльно, быстро, за красоту не платят, делаем так:
     
    $q = "SELECT MIN(slide_value_min) as slide_value_min, MAX(slide_value_min) as max_slide_value_min, MAX(slide_value_max) as slide_value_max, MIN(slide_value_max) as min_slide_value_max, option_id  FROM " . DB_PREFIX . "ocfilter_option_value_to_product WHERE option_id IN (" . implode(',', $slider_options_id) . ") AND slide_value_min > '0' GROUP BY option_id";       $query = $this->db->query($q);        if ($query->num_rows) {                     $slide_data = array();       foreach ($query->rows as $row) {                        $options_data[$row['option_id']]['slide_value_min'] = (int)$row['slide_value_min'];                if($row['max_slide_value_min'] >  $row['slide_value_max']) {         $options_data[$row['option_id']]['slide_value_max'] = (int)$row['max_slide_value_min'];        } else {         $options_data[$row['option_id']]['slide_value_max'] = (int)$row['slide_value_max'];        }                       } Просто одним запросом получаем и min и max и это не 4 секунды, а где-то 50-70 мс..
    Все работает. В ответ слышим.. Ну ты решил затык с тормозами, спасибо. Дальше мы сами разеберемся. Увещевания о том, что дядя, там же патчи безопасности, обновления алгоритмов, верни все в базу.. Бесполезно!!
    Я еще и плохой оказался, так как намекнул владельцам, что вас дрючат и парень вас на себя завязал надолго и всеръез!
    Все таки надо совесть иметь и думать что, тебя собъет машина, а кто-то должен после тебя твой код починить.
    Вот это понимание отсутсвует у 99% напрочь.
     
    Второй кейс.
    Приходит человек с жалобами тупит поиск, ок ставим ему sphinx, и получаем все равно те же 4 секунды ответа...
    Идеально быстрый магазин. Главная страница без глобального кеша 130мс, страница категорий 300-400мс, поиск 4000.
    Медленных запросов - нет! Выборка из сфинкса - порядка 20-30мс.
    Но тупит.... Ок ок.. Начинаем копать и видим странное дно...
    SEO CMS PAGES ver.1.1 
    Отключаем... И вииииииииииииииууууу... 350 мс генерация страницы..
     
    Я ни  в коем случае не буду писать автору, и гооврить что у него там проблемы, ему писано переписано и про его дыры и про его ночной код. У него звезда во лбу и это бесполезно,
    Я просто удалю эту чушь! И мы получим ооооооооооооочень быстрый магазин.
    И эти люди еще лезут в оптимизацию и ускорению, делают какие-то модули для оптимизации, когда другие их наработки делают +4 секунды на голом месте.
    Серьезно?
     
    Морали никакой. - Просто если у вас тупит поиск - отключайте это дно а лушче вообще не пользоваться разработками этого автора.
     
    ЭТО МОЕ ЛИЧНОЕ МНЕНИЕ 

    Но очень много частных случаев с модулями этого автора. А на площадке это все как продавалось так и продается.
    Уважаемая администрация, вам не стыдно, что  у вас в каталоге дополнений продается откровенный шлак а вы закрываете на это глаза? Это же не первый не второй раз?
    Сколько можно класть на пользователей дополнений?

    Ваше мнение уважаемая администрация, может не совпадать с моим, но у меня есть пруфы, если вдруг у вас возникнут сомнения в правдивости моих тезисов!
     
  16. Yoda
    Устраиваем новогодний флешмоб.
    Есть всякие дурдомы, детские дома, коты бездомные и еще куча живых существ, которые сами не очень могут себе помочь.
    У вас тут у всех все хорошо, мясо в холодильнике, новые адики на ногах.
    Давайте делиться.
    Делайте праздник тем, кто не может его сделать сам.
    И отчеты в телеграм в @opencarpchat!
    Кто не сделает ни одного доброго дела до  нового года тот редиска!
  17. Yoda
    Ну что друзья, скажите что лучше, кто чем пользовался?
    Почему?
     
    Мои аргументы за простые. Sphinx решает потому что:
    Легковесный (50 мб против 800). Понятный и гибкий. Имеет русскоязычные корни, соответсвенно местами лучше заточен под кирилицу. Не требует установки java на сервере. В свежих версиях умеет делать qsuggest Я трогал живого Аксенова.  
    Мои аргументы против тоже простые:
    Нет enterprise поддержки Нет SAAS реализации как в AWS например, т.е. нельзя купить себе немножко сфинкса в один клик. Не все хорошо с саппортом и скоростью правки багов.  
    Я знаю массу апологетов эластика со своими аргументами.
     
    А вы что скажете ?
  18. Yoda
    Здравствуйте дорогие мои читатели.

    Сегодня у нас на повестке оценка скорости работы сайта по данным PageSpeedInsight.
     
    За что я люблю гугл, за то что он дает постоянно работу разным шарлатанам. Им бы на завод впору пойти, или в сторожа. Но нет.
    Гугл выпускает очередную "супер важную муть" и на ней спешат наживаться всякого рода аферисты разных мастей.
    Ну не будем тыкать пальцами. Все итак знают, кто у нас умеет чудесно продавать одну строчку кода за 2000 рублей.
     
    Речь вобщем-то не об этом.
    А история у нас сегодня про https://www.modpagespeed.com/.

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

    Как оказалось. Когда я пробовал modpagespeed эксплуатировать на своем первом сервере. Он был сырой, косячыный и сработал в очень ограниченном формате.
    Совершенно случайно, пару дней назад, в силу каких-то нелепых обстоятельств, я решил попробовать как это работает в нынешних реалиях.

    И  о чудо!!!
     
    Эта штука автоматом, гонит все картинки в webp, там где надо, все это отлично открывается во всех бразуерах.
    Отличнейшим образом автоматом. Подчеркиваю....  Автоматом жмёт скрипты стили. Инлайнит это все дело там где можно...
     
    Ну и требует для установки времени совсем чуть чуть. Любой сисамин справиться. И при этом. У вас это все всерьез надолго...
    Без каких либо косяков на стороне файлов магазина. Без оплаты за "чудо-модули" не стоящие воздуха. И с кучей дополнительных плюшек, типа автоматического LazyLoad, асинхронного внедрения гугл-аналитики и гугл-шрифтов. И это все блиииин. Из коробки в один клик грубо говоря и работает...
     
    Друзья мои. Я вам крайне рекомендую посмотреть в эту сторону.
    Это реальный крутой ништяк. 

    И в целом чаще гуглите профильную информацию. Оказывается нас всех некоторые персонажи держат за дураков и реально тупо парят пытаются впарить воздух!
     
    Да прибудет с вами сила!
     
  19. Yoda
    Как вы знаете, я давно и успешно борюсь с медленными магазинами.
    Мы научились делать магазины с миллионом товаров, научились выгружать в яндекс-маркет несколько миллионов товарных предложений, научились держать 1.5-2к онлайна посетителей без единого разрыва. Сделали поиск, который умеет искать iphone-7 iphone7 и айфон7 и понимает разницу между iphone7 и iphone-8.

    И в процессе всех этих наработок как-то вот очень мимо меня проходил вопрос улучшения оценки под новый алгоритм pageSpeed. 
    Последние пару недель появилась возможность провести определенные эксперименты с факторами, которые влияют на оценку, и наработать кое-какую методологию решения этой ситауции без потери работоспособности и масштабируемости магазина. 
    К сожалению вот так взять и взять в целом описать что необходимо делать - фактически невозможно, так как выйдет целый букварь.
    Но кое-какие секреты я приоткрою.
     
     
    И давайте начнем с врагов. Часто-густо как оказалось, можно практически из воздуха получить 12-15 баллов, просто устранив чью-то глупость. Я не знаю кто это сделал.
    Но на многих-многих магазинах стоят модули СДЭК и Яндекс-Доставки. Разработчики этих модулей ходили на курсу программирования к Джигурде. Поэтому ничего зазорного не увидели в том, чтобы взять и на все страницы подключить api яндекс карт. Круто и клево. Вместо того чтобы рендерить страницы магазина, бразуер ваших клиентов стучит в яндекс и ждет-ждет яндекс карты. Зачем - я не знаю. У меня нет на это ответа. Но я знаю что делать.
     
    Если у вас есть какое-то такое подобное творение. Они разные все. Находите в коде кусок, отвечающий за подключение скрипта и делаете что то подобное:
     
            if (isset($this->request->get['route'])) {             $route = $this->request->get['route'];                           if(strpos($route, 'checkout') !== false || strpos($route, 'simple') !== false || strpos($route, 'shipping') !== false) {               ///...здесь пример из реального дополнения. У вас может быть другой код $this->document->addStyle('catalog/view/theme/default/stylesheet/sdek.css');                 $this->document->addScript('//api-maps.yandex.ru/2.1/?lang=ru_RU&ns=cdekymap');                 $this->document->addScript('catalog/view/javascript/sdek.js');             };                      } В итоге, мы публикуем виджет карт, только там где он нужен. И не грузим ни сервер яндекса, ни своих посетителей. И в попугаях профит и покупателям быстрее.

    Такие же плюшки есть у @29aleksey в его модуле редактирования товаров, да и много-много где.
     
    Вобщем мораль басни такая. Сторонние скрипты да и скрипты в целом используем только там, где нам нужно.
     
    А теперь немного общей информации.
     
    Если раньше на оценку pageSpeed очень влияло время ответа сервера, то теперь за уменьшение ttfb от 2 до 1 сек для мобильных устройств, валидатор накидывает всего 6-8 баллов. И еще столько же при уменьшении от 1 до 200мс, как того требует стандарт.
     
    Также все эти новые форматы изображений, webp и вся прочая лабуда, на которой пытается хайпануть и нажится на несведущих пользователях @sitecreator в целом абсолютно бесполезна на сегодня и не является дефакто необходимым действием, при условии что вы в состоянии использовать jpegoptim и отказаться от png. С нормально сжатыми и очищенными Jpeg гугл вас любит.
     
    Также от этого никуда не денешься. Все скрипты и стили надо обьединять.
    К сожалению автоматически это сделать без потери для масштабируемости достаточно сложно. Но при желании возможно.
     
    Если не получилось объеденить стили  просто пытаемся перенсти большую их часть в футер.
     
    Туда же идут font-awesome и гугл-шрифты.
     
    А еще оказывается просто волшебное действие на 15-20 попугаев оказывает удаление, выжигание напалмом модуля от одного очень много безответственно разговаривающего автора. Я думаю кому надо тот догадается.
    https://upyachka.io/img/f_boyangreposm_2c6c344.jpg
    Так вот там в модуле у автора есть подключение пары-тройки скриптов (капча, визивиг и прости господи bbcode 2019 год на дворе а у нас bbcode, следующим этапом морзянку можно еще вставить) на все страницы магазина по аналогии с Сдэком. А так как все его модули это архитектурная ошибка, которая не лечится, то проще все это снести и поставить нормальный модуль для статей.
     
    Что же касается внутренних страниц (категории, товары). То если вы используете любой фильтр, неизбежно вы получаете пессимизацию оценки, в силу того что набор элементов фильтра - это много-много объектов DOM, а делать рендеринг набора параметров фильтра по какому-либо событию, фильтрописатели еще не научились.
     
    Что касается карточек товаров. Там есть два вселенских зла. Одно всегда, второе приходящее. Первое - это всякие социальные share-кнопки, которые давно никому не нужны, но их все равно тулят во все шаблоны. Второе - это видосы с йотубера. 
     
    Кнопки выжигаем. А йотобуер борем как то так:  https://ruseller.com/lessons.php?rub=32&id=2125 это первое что нагуглилось в понятном формате.
     
    В целом 65-70 попугаев на мобиле - это не сложно, при условии того, что у вас в целом быстрый магазин, достаточно выкинуть весь лишний мусор и немного привести в порядок процесс генерации контента и подключения скриптов.
     
    Если же говорить о глубоком тюнинге и раскачке магазина совсем в зеленую зону оценки. То и это фактически возможно. Но. 
    Во первых потребуется ограничение количества элементов в модулях на мобайл страницах и существенная переработка всех этих модулей.
    Во вторых в идеале необходимо разделить общий стиль css на части и подгружать каждый согласно пришедшего vieport.
    В третьих сделать все элементы максимально интерактивными, убрать лишний мусор и подгружать контент ровно там где он нужен. (тоесть если вам нужен фильтр, колбаса параметров должна грузиться по нажатию элемента, который его раскрывает. равно как и дерево меню и все остальные большие элементы).
    В четвертых необходима проработка модулей и разделение вывода изображений, или использование динмаических тегов верстки, для вывода разного размера изображений под разные форматы экрана. 
    В пятых, все сторонние скрипты, типа тех же яндекс карт, виджетов вконтакта и прочих прочих, необходимо грузить по какому-либо пользовательскому событию, типа скролл, клик, свайп, а не сразу на страницу. 
     
    На этом пока хватит. В целом друзья, не бывает плохих и медленных магазинов, бывают кривые руки выпускников курсов программирования имени Джигурды.
     
     
     
  20. Yoda
    Как говорит народная мудрость - не все то золото, что блестит. В нашем деле, я бы сказал, не каждый шаблон продающий, который продающий.
    Но мы не про шаблоны, а про оптимизацию изображений.
     
    Как вы все уже знаете, Гугл обновил алгоритм оценки скорости работы сайтов и начал учитывать  массу новых факторов, и повысил требование к старым.
    Одним из наиболее важных критериев оценки является размер, количество и вес изображений.

    Одним из способов облегчить этот процесс является технология LazyLoad - это просто и утилитарно, благо есть прекрасная библиотека на гитхабе для этой реализации, а если вам нужен lazyload в каруселях, то owl-карусель умеет это с пеленок.
     
    Также, необходимо обратить внимание, что картинки должны соответствовать физическому размеру на экране, поэтому как раньше отдать баннер шириной 1920 точек на экран мобильника с физическим размером в 480 точек не получится. Точнее отобразить то вы можете, но Гуглу это не нравится, и правильным вариантом будет использование либо библиотеки mobile_detect, которая будет определять тип устройства и в зависимости от типа вы уже сможете включить в верстку мобильной версии уменьшенное изображение, либо использование Responsive Image разметки и атрибута srcset и опять же изначальной подготовки нескольких превью под разные типы экрана. 
     
     
    Lazy - это хорошо, но что делать с физическим размером изображений, ведь увеличение сжатия картинок в стандартной библиотеке opencart  существенно снижает качество изображений. Выхода два. Либо покупать какой нибудь ОООЧЕНЬ ПОЛЕЗНЫЙ МОДУЛЬ, от которого будет больше вреда чем пользы, так как все подобные модули работают "на лету", тем самым тратят ценнейшие ресурсы для генерации страницы. Либо же все сделать своими руками за 10 минут, при условии, что у вас на хостинге установлены библиотеки jpegoptim и optipng.
    Если таковые не установлены, поинтересуйтесь, может ли хостер вам их установить, а если у вас свой VPS, то самостоятельно они устанавливаются из консоли в два счета.
     
    Установка для Debian/Ubuntu 

     
    sudo apt-get install jpegoptim sudo apt-get install optipng  
    Для RH/Centos

     
    yum install jpegoptim yum install optipng
    После этого необходимо запустить консольные команды, которые сожмут все существующие изображение  в кеше.
    Путь к папке с изображениями вы можете увидеть в config.php файле.
    find {полный путь к вашей папке с изображениями}cache/ -type f  -iname "*.jpg" -exec jpegoptim --strip-all --max=80 -P --all-progressive {} \; find {полный путь к вашей папке с изображениями}cache/ -type f -iname "*.png" -exec optipng -o7  -preserve -strip all {} \;
    И после этого уже добавить в cron команды для выполнения в ночное время с периодичностью раз в день и разницей во времени в пару часов.
    find {полный путь к вашей папке с изображениями}cache/ -type f -mtime -1 -iname "*.jpg" -exec jpegoptim --strip-all --max=80 -P --all-progressive {} \; find {полный путь к вашей папке с изображениями}cache/ -type f -mtime -1 -iname "*.png" -exec optipng -o7  -preserve -strip all {} \; В итоге мы получим абсолютно бесплатно качественную оптимизацию изображений, которую будет выполнять не скрипт php, а сервер, которая никак не будет влиять на время генерации страниц и создавать излишнюю нагрузку на систему в рабочее пиковое время.\
     
    И да, если вы не понимаете что здесь написано и как это сделать - отправьте ссылку на этот пост администратору вашего хостинга-сервера, для людей с минимальной квалификацией здесь более чем избыточная инструкция.
     
    Также, если возвращаться к требованиям гугла, не забываем, что теперь увеличено время жизни кеша для картинок и статического контета и рекомендуется его сделать не минимальным в неделю а либо год либо вообщем max.
     
    И напоследок развеем еще один миф про Webp стандарт изображений. В нескольких ветках с пеной у рта, определенные люди рассказывают что это круто и вот тут будет поддержка.
    Webp - это может быть и круто, но использование его в магазине на сегодня - это не очень. И тому есть очень важная причина. Кроме хрома, нормально, этот стандарт не поддерживают другие бразуеры! До момента нормальной нативной поддержки может пройти еще очень много времени. Структура модулей и кеширования модулей магазина такова, что зачастую невозможно даже определяя поддержку браузера этого типа изображений отдать корректно контент без риска показать покупателю пустые страницы без изображений.
    Оптимизации изображений вышеприведенными в статье методами на 100% достаточно, для того чтобы выполнить требования гугла. Рисковать внедрением экспериментальных технологий, пусть и шибко разрекламированных - это так же как пытаться лечить смертельные болезни экспериментальынми средствами, может помочь, а может и убить.
     
    На этом на сегодня все, и да пребудут с вами зеленые попугаи!
     
    Небольшой апдейт. Тут пошли вопросы в личку типа: "и что, у нас будет все хорошо после этого"?
    Нет - сразу не будет - приведение в порядок изображений - это лишь  малая часть, манипуляций, которые необходимо внедрить для получения высокой оценки PageSpeed на мобайл-устройствах.
  21. Yoda
    Господа, все мы сталкиваемся с ситуацией, когда необходимо сформировать большой набор данных, сайтмап, yandex-market фид, и любая подобная задача, требует всегда очень много ресурсов. 
    Большинство авторов таких дополнений слыхом не слыхивали ни про CLI-PHP, ни про возможность органично выделять ресурсы исключительно под собственные скрипты, не затрагивая общие настройки сервера.
    Про то, как делать CLI скрипты, я расскажу позднее, а сейчас поговорим про лимиты памяти, и почему нельзя пахабно относиться к ресурсам серверов клиентов.
     
    Приведу пример, который произошел буквально на днях.
    Обратились ко мне старые друзья с просьбой посмотреть, почему падает магазин.
    Да они добавили 30 региональных поддоменов, увеличилась нагрузка, но это не повод, чтобы 4гб памяти и 4гб SWAP забивались за 10 минут.

    Смотрим в настройки php_memory_limit 1gb. Система работает в связке nginx+php-fmp, и менеджер fpm резирвирует под каждый поток гиг памяти. Но нам то надо максимум 256МБ, для генерации любой страницы. Ок меняем настройки, немножко вносим тюнинг в конфиг php-fpm, все заработало, ресурсов хватает запас есть. Но из-за нехватки памяти отвалилась генерация YML, от одного известного автора.  И Яндекс-маркет блочит магазин. Новый год, продажи стоят.

    Что делать?
     
    Писать автору, скорее всего бесполезно. Я думаю, что любой автор сказал - увеличивайте ресурсы сервера, у вас нехватка памяти, вы сами виноваты, у вас большой магазин. 
    Я даже уверен, что 99% авторов дополнений  так бы сделали.
     
    Но послушайте. Ну есть же возможность задавать настройки "на лету" прямо из выполняемого скрипта.
    И просто достаточно было добавить в код генерации яндекс-фида одну строку:
     
    ini_set("memory_limit",-1);  
    И все.. Для всех скриптов, которые приходят на web-сервер у нас 256мб лимит, и наших 4 гигабайт хватает с головой обслужить весь входящий трафик и ботов. 
    И без вопросов у нас генерится YML, которому мы разрешили использовать память безлимитно.
     
    Простейшая же задача как 2+2. Но продав более 1000 копий своего дополнения, автор даже не задумывался о подобных проблемах. 
    Не будьте как автор!
     
    И еще. Не стесняйтесь вместо формирования каких то супермассивов, сразу писать все в файл.
    Вместо какого нить  $thisoutYML->addItem($item), ведь очень просто делать $thisYmlSaveItemTofile($item).
     
    Ну и практически все фиды можно отдавать в .gz экономя место и время.
  22. Yoda
    А знаете вы, что в классе Mysqli, при включенных ошибках и отсутствии коннкета к базе светится пароль базы?
    А знаете вы что Даниэль сказал, что это не баг а фича ?
    https://github.com/opencart/opencart/issues/5027
  23. Yoda
    Помнится мне в версиях 1.5.x появилась фича от Toporchillo  с модификацией запросов подсчета товаров при помощи SQL_CALC_FOUND_ROWS.

    А я тогда говорил, что это бред! И правильно использовать второй полноценный запрос для getTotalProducts.

    В 1.5 совсем плохо было с индексами и на небольших базах это возможно имело смысл. Но когда сейчас каждый второй магазин от 10 000 товаров, FULLSCAN всех таблиц участвующих в выборке товаров  в категории и механизм FOUND_ROWS скорее вреден чем полезен и вот вам подтверждение с официального блога Percona
     
    https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
     
    Учиться, учиться и еще раз учиться! (c)
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.