• Как ускорить Opencart при большом кол-ве товаров?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    17500 - это ничтожно малое количество записей.
    У Опенкарта основная проблема - говнокод на уровне обращений к базе данных. Много запросов в цикле и т.д.
    Решается обычно установкой MySQL на нормальную машину с хорошим объемом памяти и SSD, миграцией на InnoDB, анализом запросов и построением необходимых индексов. Кроме индексов необходимо отследить размеры буферов и т.д. В вашем случае объем памяти должен быть в районе от 8 GB RAM. Из решений рекомендую использовать не MySQL, а MariaDB или PerconaDB. Не используйте виртуальный (shared) хостинг.
    Еще поищите, есть хорошая утилита mysqltuner, она подсказывает оптимальные характеристики для СУБД.
    Включите лог медленных запросов и запросов неиспользующих индексы.
    Проанализируйте сетевой стек вашего соединения с MySQL, работа через сокет значительно ускоряет работу приложения. Некоторые горе-мастера выставляют адрес домена, который система переодически ресолвит и это увеличивает издержки на время соединения.
    При высокой посещаемости и некритичности актуальности данных используется подход с переписыванием слоя абстракции БД опенкарта с применением кеширования результатов в Memcached. Актуально для высокопосещаемых ресурсов с разного рода предзаказами или проверкой остатков непосредственно при добавлении заказа.
    Ответ написан
    4 комментария
  • ТИц, PR, ссылки больше можно не использовать?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Ссылки следует наращивать естественным образом. Публикуйте хороший контент и люди сами начнут на вас ссылаться.
    Ответ написан
    4 комментария
  • Как получить «термины» для каждого документа, после полнотекстового поиска в MongoDB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    db.getCollection('example').find({
        $text: {
            $search: "розовые булочки",
            $language: 'russian'
        }
    }).explain()
    Ответ написан
    3 комментария
  • Можно ли отдать ответ в заголовке header http?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Делаете любой заголовок с префиксом X-, например
    header('X-Your-API-Result: 1');
    Ответ написан
    Комментировать
  • Почему у бутстрапа именно 12 колонок?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Потому что это достаточно гибкий набор вариантов при относительной простоте реализации.
    12 столбцов = 6 вариантов (1x12, 2x6, 3x4, 4x3, 6x2, 12x1). Т.е. одна большая страница, деление на две половины, на трети, на четверти, на шесть частей и на 12.
    Ответ написан
    Комментировать
  • Какие есть CDN с возможностью ресайза изображений?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Напишите свой API, цена ему копеечная. Можно хотя бы этим воспользоваться:
    ruhighload.com/index.php/2009/04/22/%D0%BE%D1%82%D...

    Я бы разделил бакеты по размерам, тогда можно было бы легко управлять ресайзами и удалять неиспользуемые размеры.
    Ответ написан
    2 комментария
  • Одноплатный компьютер с минимальной ценой и энергопотреблением?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Можно еще на Pine64 посмотреть.
    Ответ написан
    Комментировать
  • Чем выгоднее принять Visa, Mastercard от Штатовских и Европейских клиентов?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вам нужна компания со штаб-квартирой за пределами РФ, желательно в США.
    А дальше используйте Stripe или Paypal.
    Кстати, можете на рынок США через Atlas зайти.
    Ответ написан
    1 комментарий
  • Amazon EC2: сколько вешать в граммах?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Тип инстанса автоматически не изменяется, изменяется количество инстансов.
    Для автоматической подстройки под размер нагрузки используется Autoscaling, читайте тут docs.aws.amazon.com/autoscaling/latest/userguide/G...
    Ответ написан
    Комментировать
  • Как лучше сделать шапку на сайте?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    https://getbootstrap.com/examples/navbar-fixed-top/

    Я делал через псевдоэлемент. Демо.

    .navbar-inverse{background-color:rgba(0,0,0,.75);border-radius:0}
    .navbar .container::after{content:'';background:url(/dist/i/library-lo-res-bar.jpg);min-height:50px;display:block;position:absolute;top:0;left:0;width:100%;z-index:-1}
    Ответ написан
  • Как обеспечить стабильность связки RabbitMQ + Supervisor + PHP?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    У процессов в supervisord существует несколько состояний
    subprocess-transitions.png

    Если ваши воркеры написаны корректно, то он должны присоединяться к серверу очередей и получать задачи.
    Добавьте в воркеры логирование и включите логирование в supervisord, отследите состояния, в котором находятся процессы. Скорее всего ваши воркеры не получают задач из-за того, что находятся в каком-то таком состоянии, когда они не могут их получить.
    Ответ написан
    3 комментария
  • Как предотвратить Mysql server has gone away?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    В общем с PDO история такая, что сама пул соединений управляется как на стороне драйвера, так и на стороне MySQL. Если соединение не используется, то оно будет закрыто.

    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    // соединение установлено
    
    // делаем какую-то работу
    
    // закрываем соединение
    $dbh = null;


    По-хорошему вам нужно изолировать выполнением вашего запроса в отдельную функцию и вызывать ее через определенные интервалы.

    function doit() {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    // соединение установлено
    // делаем какую-то работу
    // закрываем соединение
    $dbh = null;
    }
    // а затем вызывать вот так
    doit();
    sleep(60);
    doit();


    Также рекомендуется проверить значение wait_timeout в настройках MySQL.

    Еще, как вариант, можно сделать нечто вроде этого https://terenceyim.wordpress.com/2009/01/09/adding...
    Дело в том, что у PDO нет полноценного ping, поэтому приходится симулировать его пустым запросом и отловом исключения с восстановлением соединения в дальнейшем.
    Ответ написан
    Комментировать
  • Как узнать скорость подключения клиента к сайту и дать соответствующий контент?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Идеального пути определения качества соединения нет.
    Есть ограниченная поддержка NetworkInformation. Это наилучший подход, но он пока в ранней стадии разработки.

    Классический способ определения скорости описан тут.

    Разумный вариант - использовать легковесную посадочную страницу и расширенную версию с тяжелым контентом.
    Слушать про onload секунду, если за секунду оно не наступает останавливаться на легковесном варианте, в противном случае грузить все остальное.
    Вы также можете рассмотреть использование критического пути (минимально необходимого CSS), который включен в тело страницы изначально. Как только страница загружена, можно включать загрузку остального содержимого.
    Еще можете замерять время загрузки страницы в браузере используя Navigation Timing API. Если оно больше определенного порога, то загружать тяжелый контент, например видео.

    В целом путей решения поставленной задачи немного, но достаточно.
    Сфокусируйтесь все же на оптимизации сайта или страницы. Поставьте себе планку, например 200кб и оптимизируйте сайт для нее. От этого выиграют все: и ваши пользователи, и серверная часть тоже.
    Ответ написан
    Комментировать
  • Rendering(шаблонизация) на чистом PHP без особых зависимостей?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Правильный код должен выглядеть так.
    /**
     * Renders template
     *
     * @param string 0 Name of your template
     * @param mixed 1 Data passed to template
     * @return string
     */
    function template()
    {
        extract(func_get_arg(1));
    
        ob_start();
    
        if (file_exists(func_get_arg(0))) {
            require func_get_arg(0);
        } else {
            echo 'Template not found!';
        }
    
        return ob_get_clean();
    }
    // Usage
    echo template('30.php', ['hello' => 'world!']);

    Хотя в целом идея использования чистого PHP в качестве языка для шаблонов дурно пахнет. Советую Smarty.
    Ответ написан
  • Какие виртуальные машины способны ограничить частоту процессора?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Напрямую никак, обычно выставляется через приоритеты.

    Для симуляции старой машины можно провести следующее. Создать образ для VirtualBox с минимальными системными требованиями. Установить в него Windows.
    Не устанавливать гостевые расширения (это отключит ускорение в видеодрайвере).
    После установки Windows можно настроить Execution cap для процессора и тогда ваша система начнет тормозить (тут нужно поэкспериментировать, еще можно и размер памяти уменьшить до минимально возможного).
    Далее установить хром и настроить throttling для сети (это будет симулировать плохую связь).
    094e8523a58d43dc8df4aec194e5c946.png
    Если не хотите настраивать Хром, то всегда можно обрезать скорость на стороне веб-сервера.
    Ответ написан
    Комментировать
  • Развитие в электронике/схемотехнике. Есть ли аналог схеме ориентирования в программировании?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Есть классная книжка Радиоэлектронные игрушки Войцеховского. Освойте ее для начала. Дальше все станет понятнее.
    Ответ написан
    Комментировать
  • Чем заняться физику в IT?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Если вам серьезно нравится физика, то можно продолжать изучать C, C++ и алгоритмы. Инженеры на стыке физики и программирования достаточно востребованы.
    Есть ряд задач вроде просчетов различных профилей нагрузок, работы материалов в специфических средах (сопромат в приложении к реальному миру), разного рода эвристика и адаптивные алгоритмы управления технологическими процессами. По сути вы будете одним из тех, кто создает Mathworks, Cadense и т.д.

    С точки зрения раличных ЯП вам может потребоваться: Simscape Language, Modelica, C, C++. Источник. Походите по сайтам потенциальных работодателей, определитесь с требованиями, условиями работы, решаемыми задачами. Вам нужно найти то, что вы сможете делать хорошо и это будет вам интересно.

    Английский - обязательно. В мире науки/программирования без него никуда. Хороших инженеров привозят откуда угодно.

    С точки зрения других ЯП полезно будет познакомиться с группой функциональных языков, с языками Go, Erlang, Python, Lisp, R.
    Ответ написан
    Комментировать
  • Куда пойти учиться на программиста после 9-го класса?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вам нужно пересмотреть свое видение мира.
    Нет бесполезных наук, все в жизни может пригодиться.

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

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Cassandra

    Удовлетворяет большинству ваших требований - column-based, MapReduce, отказоустойчивая архитектура, способность работать с огромными массивами данных. Редкая запись хорошо вписывается в модель работы column-oriented баз данных.
    Можете почитать вот эту статью kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

    У меня есть личный опыт работы с MongoDB (3.0, WiredTiger) в размере 200+GB и ~20 миллионов строк в коллекции c досточно высоким количеством записи/чтения. Пока даже без шардинга обходимся.

    Можете также глянуть в сторону CouchDB, хотя все эти решения довольно разные db-engines.com/en/system/CouchDB%3BCassandra%3BMongoDB
    Ответ написан
    3 комментария