Angular 7 все запросы к серверу несколько секунд в ожидании до достижения сервера - PullRequest
0 голосов
/ 25 марта 2019

Я собрал и закончил полное угловое 7 приложение с MySQL и PHP в качестве базы данных и внутреннего языка соответственно.

Каждый отправленный запрос, даже с небольшим размером ответа, например, 100 байт, потребует дополнительных нескольких секунд, чтобы начать запрос. Итак, сначала, как показано на вкладке сети, запрос pending, затем данные загружаются.

enter image description here

На консоли всегда отображается предупреждение:

Блокировка перекрестного происхождения (CORB) заблокировала ответ перекрестного происхождения http://dev.local/scripts/getStatistics.php с типом MIME применение / JSON. Увидеть https://www.chromestatus.com/feature/5629709824032768 для более подробности.

Заголовки API выглядят следующим образом:

<?php
ini_set("zlib.output_compression", 1);
ini_set("zlib.output_compression_level", 9);

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: *');
header('Content-Type: application/json');
header('Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS');
header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
error_reporting(E_ALL);

require_once('JWT.php');


include_once('../phpmailer/PHPMailer.php');
include_once('../phpmailer/POP3.php');
include_once('../phpmailer/SMTP.php');
include_once('../phpmailer/Exception.php');
date_default_timezone_set('Asia/Beirut');

class api {
    private $username ="root";
    ...
?>

Запрос от angular выполняется следующим образом:

getStatistics(){
    let headerOptions = new HttpHeaders();
    headerOptions.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    return this.http.post(this.globalVar.getStatistics, { headers: headerOptions });

}

И .htaccess, когда приложение работает локально на автономном сервере:

<IfModule mod_deflate.c>
  SetOutputFilter DEFLATE
  # Specify file types in case necessary
</IfModule>
RewriteEngine On
    # If an existing asset or directory is requested go to it as it is
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
    RewriteRule ^ - [L]
    # If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html
#RewriteCond %{REQUEST_URI} !echo.php
#RewriteRule .* echo.php?ua=%{HTTP_USER_AGENT}&https=%{HTTPS} [L]

SetEnvIf Origin "^http(s)?://(.+\.)?(dev.local\.com|localhost:8100|localhost:4200)$" ORIGIN=$0
Header always set Access-Control-Allow-Origin %{ORIGIN}e env=ORIGIN
Header merge Vary Origin

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Allow-Headers "Content-Type, cookie"
Header set Content-Type "application/json"
Header set Access-Control-Allow-Methods "GET, POST"
# prevent mime based attacks
Header set X-Content-Type-Options "nosniff"

Ответ, полученный от getStatistics, представляет собой массив:

 $res = $newApi->getStatistics($conn);
 echo json_encode($res, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

А на угловой стороне, где отображаются данные:

getStatistics(){

    this.auth.getStatistics().subscribe(
      (data)=>{

        this.result = data;
        this.totalU =  parseInt(data['uactive']) + parseInt(data['uinactive']);
        this.totalH = parseInt(data['hactive'])+parseInt(data['hinactive']);
        this.totalI = parseInt(data['iactive'])+parseInt(data['iinactive']);
      },
      (error)=>{
        console.log(error);
      }
    )
  }

Это пример, все серверные сценарии выполняются таким образом, он добавляет дополнительные несколько секунд в ожидании, а затем достигает сервера для данных.

Мы работаем на локальных автономных серверах, и узлы разрешены на всех ноутбуках в файле hosts в system32->... folder.

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

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

Основная проблема заключается в загрузке приложения, когда при первом открытии приложения пользователем за день (после этого оно будет кэшировано), для открытия компонента входа в систему требовалось около 15 секунд. (Мое приложение полностью создано с использованием отложенной загрузки).

Это проблема локальной сети, и нам нужно использовать маршрутизаторы с гигабитными портами локальной сети? Или это проблема кода?

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

...