updated dependencies to the latest versions also took a swing at rendering performance, which was pretty basic. it was fine for sites with not that many pages, but it gets a bit stick above 50 as of right now, performance has been improved slighthy by forcing some garbage collection, rendering 65 pages in under 30 seconds with 256MB available. the issue seems to the speed of initial page collections from the directories and then converting them to objects that the system can use. going to explore some options to optimize that particular script also removed page load from PageRepository instantion because when the app loads, it was calling that class as part of the start of process and loading pages everytime no matter what page was being looked at. removing that made non page sections snappier
153 lines
4.5 KiB
PHP
153 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Assets;
|
|
|
|
use Illuminate\Support\Facades\File;
|
|
use App\Services\Data\SortingService;
|
|
use App\Services\Data\SettingsService;
|
|
use App\Services\Data\ContentService;
|
|
|
|
class RenderService
|
|
{
|
|
private $sort;
|
|
private $settings;
|
|
private $contents;
|
|
private $pageInfo;
|
|
private $menu;
|
|
private $background;
|
|
private $theme;
|
|
|
|
public function __construct(
|
|
SortingService $sortingService,
|
|
SettingsService $settingsService,
|
|
ContentService $contentService
|
|
) {
|
|
$this->sort = $sortingService;
|
|
$this->settings = $settingsService;
|
|
$this->contents = $contentService;
|
|
$this->theme = $this->settings->getGlobal()['theme'];
|
|
}
|
|
|
|
public function publishAll()
|
|
{
|
|
$message = [];
|
|
$result = [];
|
|
$dynamicRender = $this->settings->getGlobal()['dynamicRender'];
|
|
if (isset($dynamicRender) && $dynamicRender === 'true') {
|
|
$message = [
|
|
'message' => 'Auto Rendering is already enabled!',
|
|
'type' => 'RENDER_SUCCESS',
|
|
];
|
|
} else {
|
|
try {
|
|
$result = $this->archive();
|
|
if ($result['status'] == 'archive_complete') {
|
|
$result = $this->tags();
|
|
if ($result['status'] == 'tags_complete') {
|
|
$this->pages();
|
|
}
|
|
}
|
|
|
|
$message = [
|
|
'message' => 'Site Rendered. GOOD EFFORT',
|
|
'type' => 'RENDER_SUCCESS',
|
|
];
|
|
} catch (Error $error) {
|
|
$message = [
|
|
'message' => 'Issue With Rendering. DONT PANIC',
|
|
'type' => 'RENDER_ERROR',
|
|
];
|
|
}
|
|
}
|
|
|
|
return $message;
|
|
}
|
|
|
|
public function archive()
|
|
{
|
|
$template = $this->theme . '.archive';
|
|
$pageData = $this->sort->archive(false);
|
|
$location = '../public/archives.html';
|
|
File::put(
|
|
$location,
|
|
view($template)
|
|
->with($pageData)
|
|
->render()
|
|
);
|
|
|
|
$done = [
|
|
'status' => 'archive_complete',
|
|
];
|
|
|
|
return $done;
|
|
}
|
|
|
|
public function tags()
|
|
{
|
|
$data = $this->sort->tags(false);
|
|
foreach ($data['tags'] as $item) {
|
|
//$template = 'tags.twig';
|
|
$template = $this->theme . '.tags';
|
|
$pageData = [
|
|
'theme' => $this->theme, // for theme kit
|
|
'title' => 'Pages Tagged as ' . $item['tag_name'],
|
|
'dynamicRender' => $data['dynamicRender'],
|
|
'layout' => 'page',
|
|
'info' => $data['info'],
|
|
'menu' => $data['menu'],
|
|
'pages' => $item['pages'],
|
|
'media' => $data['media'],
|
|
];
|
|
|
|
$location = '../public/tags/' . $item['slug'] . '.html';
|
|
|
|
if (!is_dir('../public/tags')) {
|
|
mkdir('../public/tags', 0755, true);
|
|
}
|
|
File::put(
|
|
$location,
|
|
view($template)
|
|
->with($pageData)
|
|
->render()
|
|
);
|
|
}
|
|
|
|
unset($data);
|
|
|
|
$done = [
|
|
'status' => 'tags_complete',
|
|
];
|
|
|
|
return $done;
|
|
}
|
|
|
|
public function pages()
|
|
{
|
|
$pages = $this->contents->loadAllPages();
|
|
foreach ($pages as $page) {
|
|
$template;
|
|
$page['layout'] == 'index' ?
|
|
$template = $this->theme . '.index' :
|
|
$template = $this->theme . '.' . $page['layout'];
|
|
|
|
$pageData = $this->sort->page($page, false);
|
|
|
|
if (str_contains($page['layout'], 'index')) {
|
|
$location = '../public/index.html';
|
|
} else {
|
|
// if page is a menu item, render the page on public root
|
|
if ($page['menu'] == 'true') {
|
|
$location = '../public/' . $page['slug'] . '.html';
|
|
} else {
|
|
$dir = '../public/' . $page['path'];
|
|
if (!is_dir($dir)) {
|
|
mkdir($dir, 0755, true);
|
|
}
|
|
$location = '../public/' . $page['path'] . '/' . $page['slug'] . '.html';
|
|
}
|
|
}
|
|
File::put($location, view($template)->with($pageData)->render());
|
|
unset($pageData);
|
|
}
|
|
}
|
|
}
|