Celková optimalizace stránky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jarek159
Člen | 23
+
0
-

Zdravím,
vytvořil jsem rozsáhlí systém, stránky se bohužel načítají až 3 sekundy a celkově jsou velice pomalé. Proto bych byl rád, kdybyste mi poradili jak stránku optimalizovat.

Začnu výpisem novinek:

public function renderDefault()
    {
        $qb = $this->EntityManager->createQueryBuilder();

        $qb->select($qb->expr()->count('u'))
            ->from('App\News', 'u');

        $query = $qb->getQuery();

        $count = $query->getSingleScalarResult();

        $visualPaginator = $this['visualPaginator'];
        $paginator = $visualPaginator->getPaginator();
        $paginator->setItemCount($count);
        $paginator->setItemsPerPage(4);

        $qb = $this->EntityManager->createQueryBuilder();

        $qb->select('u')
            ->from('App\News', 'u')
            ->setFirstResult($paginator->getOffset())
            ->setMaxResults($paginator->getLength())
            ->orderBy('u.date', 'DESC');

        $query = $qb->getQuery();

        $this->template->news = $query->getResult();
    }

Template:

{foreach $news as $new}
                <div class="new">
                    <div class="col-lg-3 col-md-2 col-sm-3 img hidden-xs">
                        <img src="{$basePath}/news/{$new->id}.png" class="img-responsive" alt="{$new->title}">
                    </div>
                    <div class="col-lg-9 col-md-10 col-sm-9 content">
                        <div class="title">
                            <span><a n:href="Novinka: id=>$new->id, title=>$template->webalize($new->title)">{$new->title}</a></span>
                            <span class="hidden-xs">
                                <span><a n:href="Hrac: name=>$presenter->userById($new->author)">{? $presenter->prefix($presenter->userById($new->author)); }</a></span>
                                <span>{$new->date|date:'%d.%m.%Y'}</span>
                                <a n:href="Novinka: id=>$new->id, title=>$template->webalize($new->title)">Čti více</a>
                            </span>
                        </div>
                        <p class="text">
                            {$new->text}
                        </p>
                    </div>
                </div>
                {/foreach}

A metody, které volám:

public function userById($id, $echo = false) {
        $qb = $this->EntityManager->createQueryBuilder();

        $qb->select('u.name')
            ->from('App\Inqplayers', 'u')
            ->where('u.id = ?1')
            ->setParameter(1, $id)
            ->setMaxResults(1);

        $query = $qb->getQuery();
        $name = $query->getOneOrNullResult();

        if ($echo) {
            echo $name["name"];
        }
        return $name["name"];
    }

    public function prefix($player, $name = true) {
        $qb = $this->EntityManager->createQueryBuilder();

        $qb->select('u.groups')
            ->from('App\Inqplayers', 'u')
            ->where('u.name = ?1')
            ->setParameter(1, $player)
            ->setMaxResults(1);

        $query = $qb->getQuery();
        $group = $query->getOneOrNullResult();

        if (is_array($group)) {
            $group = explode('"', $group["groups"]);
            $group = $group[1];
        }
        else {
            $group = "default";
        }

        $qb = $this->EntityManager->createQueryBuilder();

        $qb->select('u.value')
            ->from('App\Permissions', 'u')
            ->where("u.name = ?1 AND u.permission = 'prefix'")
            ->setParameter(1, $group)
            ->setMaxResults(1);

        $query = $qb->getQuery();
        $prefix = $query->getOneOrNullResult();

        $prefix = $prefix["value"];

        if ($name) {
            $prefix .= $player;
        }

        echo MinecraftColors::convertToHTML($prefix);
    }
Jan Tvrdík
Nette guru | 2595
+
0
-

Nemá cenu tu moc spekulovat, pusť si Xdebug nebo Blackfire profiler. Máš Linux nebo Windows? Verze PHP? Zapnutá nebo vypnutá opcode cache?