Dockerized应用程序非常慢,并且不能很好地加载css

时间:2018-04-03 14:13:10

标签: laravel docker npm

我已将我的laravel应用程序停靠,这是docker-compose:

version: '3'
services:
  app:
    image: xoco/kendozone:local-1.0.0
    ports:
      - "80:80"

和Dockerfile:

FROM php:7.1.14-fpm
LABEL maintainer="contact@kendozone.com"
LABEL version="1.0.0"
LABEL description="Kendozone is a online tournament webapp coded with PHP / Laravel"

ENV node_version 8.4.0
ENV npm_version 5.7.1
ENV NVM_DIR /.nvm
ENV APP_DIR="/var/www"
ENV APP_PORT="80"

RUN echo "deb http://ftp.de.debian.org/debian stretch main " >> /etc/apt/sources.list \
&& apt-get update -y && apt-get install -y openssl zip unzip git automake \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        libmagickwand-dev vim --no-install-recommends \
&& apt-get remove -y libgnutls-deb0-28 \
&& apt-get purge --auto-remove -y g++ \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install pdo pdo_mysql mbstring zip -j$(nproc) iconv mcrypt -j$(nproc) gd

WORKDIR $APP_DIR
COPY . $APP_DIR

RUN mkdir -p $APP_DIR/resources/assets/less/_main_full \
&& touch $APP_DIR/resources/assets/less/_main_full/main.less \
&& touch $APP_DIR/sqlite.db \
&& mv .env.local .env \
&& chown -R www-data:www-data $APP_DIR

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN composer install --no-interaction

RUN mkdir -p $NVM_DIR && chown -R www-data:www-data $NVM_DIR
RUN  curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash \
&& [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" \
&& nvm install ${node_version}

ENV NODE_PATH $NVM_DIR/v$node_version/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$node_version/bin:$PATH

RUN npm install
RUN npm run production
RUN php artisan key:generate
RUN php artisan migrate --seed 
CMD php artisan serve --host=0.0.0.0 --port=$APP_PORT

当应用时,应用程序正在响应:

http://127.0.0.1但加载登录界面需要2分钟以上,而css显示效果不佳。

但是当我使用chrome调试器来检查请求时,所有请求都会给出200响应,这很好,我可以点击所有链接,这意味着css和js可以毫无问题地解析。

为什么会这样?

编辑:在我的Mac上,页面加载非常正常,但在CentOs中,它很长。

1 个答案:

答案 0 :(得分:1)

使用Chrome调试器检查请求时,我注意到TTFB的速度令人难以置信。我的电脑是17.14秒。后续请求相对较快。

Long TTFB Time

TTFB代表第一个字节的时间。高TTFB表示服务器端出现错误或错误行为。

在第一次请求之后,我执行了docker diff命令,并在容器中发现了以下更改:

$ docker diff xxx
C /root
C /var/www/database
C /var/www/database/sqlite.db
C /var/www/storage/framework/views
A /var/www/storage/framework/views/3d3947126b3224667121e9703252617b7f23f88b.php
A /var/www/storage/framework/views/62a19b65f14428bd14bd13be0dce90ea16887a78.php
A /var/www/storage/framework/views/7a212b1361bf8a55442817d40915d62cab0878dd.php
A /var/www/storage/framework/views/beafc1ea6ba3b1c45604098b20ce357eac86e9d6.php
A /var/www/storage/framework/views/d58ea65ce5486bc3c5f9d4623e2e3952bb1efc51.php
A /var/www/storage/framework/views/e1754d32beb46c021e4c4c924ed9b0d38d671fb4.php
A /var/www/storage/framework/views/f0565996f52733a0597399e7a8c558ebf88e6a9e.php

这意味着第一个请求会导致服务器端处理一些艰苦的工作(更改sqlite.db并创建一些PHP文件)。缓存这些更改,以便后续请求相对更快。

我的猜测是这个问题是由处理登录页面的视图函数引起的。但我不是百分百肯定,因为我没有在请求期间跟踪应用程序的CPU使用情况。

希望可以提供帮助。