timo-71

Рейтинг
63
Регистрация
19.09.2018
Dreammaker #:
Грубо говоря, сначала получаем информацию о пользователе, а потом смотрим, что ему можно показать.

Там по дороге, асинхронность можно использовать. Кстати, архитектура питоновских асинхронных фреймворков намекает.

Кусок миддлевари фастапи. (аиохттп похожий принцип: оперируем 3 объектами  app, request, response)

        self.request_parameters(request)
        # request.state.content вначале {}
        response = await call_next(request)
        # request.state.content: оброс по дороге {'title': '****', 'meta': '****', ...}
        self.response_set_headers(request, response)
        return response

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

Совсем просто: (10 запросов по 2мс (20) выполнены за 10 мс) ?  "асинк во всей красе" : "плохой асинк, хотя кругом авайты"


Мой пост был местами провокационный. Просто, хотелось разбавить абстрактные рассуждения о каких то либах примерами для понимания сути. И, может быть, дойти до каких то практических вариантов применения.


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

Dreammaker #:
Ну, и чтобы красивее, по-хорошему,
Отлично. Сразу возрастает ощущение того,  что серч сила и богат грамотными специалистами.💪
Dreammaker #:
Подскажите, что какую мысль вы хотите донести,  суммируя время доставки двух страниц?

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

Вероятно, на базе этого: https://www.php.net/manual/ru/intro.parallel.php , что то типа аиохттп у питона. Чтобы в несколько строк, реализовать какой то асинхронный парсер например.

Dreammaker #:
То есть, асинхронность в пхп уже давно есть

А есть примеры


Т.е, скрипт отработал за 0.62932, тогда как время затраченное на доставку 2 документов с этой темы составило 1.22971

0.625237226486206
PHP асинхронность, многопоточность, параллельность - Веб-строительство - Сайтостроение - Форум об интернет-маркетинге
https://searchengines.guru/ru/forum/1074587/page1
0.6044747829437256
PHP асинхронность, многопоточность, параллельность - Веб-строительство - Сайтостроение - Форум об интернет-маркетинге - Страница 2
https://searchengines.guru/ru/forum/1074587/page2
Sly32 #:
открываешь базу во внешку-

Не помню как пма, лет 10 не юзал. На локале пгадмин есть, тоже давно не юзал. Пма, вероятно,  аналогично. Как то так в nginx

server{
    listen 80;
    server_name pg.uwsgi;
    client_max_body_size 75M;
    error_log /var/www/uwsgi/pgadmin/pg-nginx-err.log;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:///var/www/uwsgi/pgadmin/uwsgi.sock;
    }
}

Так что формально, база на улицу не светит, только прокладка. Но, любой сайт такая же прокладка к базе.

Я тоже не вижу смысла в веб интерфейсах к бд, но понимаю проблемы тех кто работает с клиентами у которых сайты на шареде. 





Aisamiery #:
или ставить phpmyadmin на продакшен среду.
😂 Слегка потролю. А смогешь поставить? Сам не пытался, но предположу, что будет сложнее, чем просто накатить обнову на сайт

Какая то странная дискуссия. На шареде, не всегда есть возможность  поймать что то, когда кто то запустил

#!/usr/bin/bash
cd /home/pyapp
tar --exclude='*/node_modules' --exclude='*/__pycache__' -zcf /home/pyapp/files.tar.gz you__app__1
scp -i ~/.ssh/1 /home/pyapp/files.tar.gz uuuu@xxx.xxx.xxx.xxx:/home

А когда, там, где лежит сайт,  что то поменялось,  то systemctl restart что то типа

[Unit]
Description=YouTubeTrack Service
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=2
Restart=always
ExecStartPre=docker stop $(docker ps -a -q)
...

что бы в итоге

docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS         PORTS                                       NAMES
481b26c50b93   pg-postgis   "docker-entrypoint.s…"   5 minutes ago   Up 5 minutes   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   db_pg
....

Там просто нет инструментов для этого. Поэтому и используют, то чем можно

Dram #:
Ожидаемо -  strpos быстрее всего.

Очень правильный подход, поверить все самому.

Только добавьте  добавьте в тесты:

<?php
$test_contains = function ($s, $f){return str_contains($s, $f);};
$test_strstr = function ($s, $f){return strstr($s, $f) ? 1 : 0;};
$test_preg = function ($s, $f){return preg_match("&$f&", $s);};
$test_strpos = function ($s, $f){return strpos($s, $f);};

function __($cnt, $fu, $s, $f) {
    sleep(1);
    $start_time = microtime(1);
    for($i=0; $i<$cnt; ++$i) {
        $s = $s . $i;
        $r = $fu($s, $f);
    }        
    echo 'Time: ',
         number_format(microtime(1) - $start_time, 5),
         '; Mem: ', memory_get_usage(1), '/', memory_get_peak_usage(1),
         ', Last RES: ',  
         $r, "\n";
}

function test(int $cnt, callable $fu, string $test_name) {
    $data = file_get_contents('./12.txt');    
    echo "!!", $test_name, " / ", $cnt, " раз: ";    
    __($cnt, $fu, $data, 'dfhggdfhdfhfdghert');

}

echo "Test search:\n", PHP_VERSION, "\n";
echo ' Mem usage: ', memory_get_usage(1), '/', memory_get_peak_usage(1), "\n";
$c = 100000;
test($c, $test_contains, "test_contains");  
test($c, $test_preg, "test_preg");
test($c, $test_strstr, "test_strstr");
test($c, $test_strpos, "test_strpos");

Результат:


Когда 1 раз, то strpos быстрее, а когда много, то не очень. Но, это не точно

nash300 #:
Там еще много чего прийдется у гугл спрашивать
Но и про опенсервер человек с молоком матери знания не получает
Всего: 541