From 9991c9647d8b398f50eeb28e70c1d6c9b1dec22f Mon Sep 17 00:00:00 2001 From: ro Date: Wed, 18 Jun 2025 13:43:24 -0600 Subject: [PATCH] performance update, fix for bulky tags file cleaned up the code to get a massive boost to publishing and page rendering speeds the issue was related to pages being collected and transformed into objects the system could use multiple times, resulting in sluggish rendering due to available memory getting drained to accomodate a long script running more than it was needed. edited the rendering process so the script is only called one and the data is passed to the respective functions that require that data. also plugged in some minor manual garbage collection that speed up the process a bit more there was also a bug with rendering the tags file that was resulting in the `tags.json` file being unusually large. the issue was tags were getting replicated in the process resulting in adding duplicates to the tag file everytime it was run. go rid of the unnecessary function that was calling the replicate tags array and now the tags file is it's appropriate size whew, this turned out to be a big one that wasn't meant to be, but the peformance boost was worth it --- app/Http/Controllers/FrontController.php | 20 ++++++++++++----- app/Http/Controllers/SettingsController.php | 5 ++++- app/Http/Controllers/ThemeController.php | 9 ++++---- app/Repositories/PageRepository.php | 8 +++---- app/Services/Assets/RenderService.php | 25 +++++++++------------ app/Services/Data/SortingService.php | 13 ++++------- 6 files changed, 42 insertions(+), 38 deletions(-) diff --git a/app/Http/Controllers/FrontController.php b/app/Http/Controllers/FrontController.php index a43fd46..9491325 100644 --- a/app/Http/Controllers/FrontController.php +++ b/app/Http/Controllers/FrontController.php @@ -50,12 +50,18 @@ class FrontController extends Controller $currentTheme = $this->assets->getCurrentTheme(); if ($global['dynamicRender'] == 'true') { $page = $pages->where('id', 0)->first(); - $pageData = $this->sort->page($page, false); + $pageData = $this->sort->page($page, $pages, false); $template = $currentTheme . '.index'; return view($template, $pageData); } else { - return view('back.init', ["status" => false, "title" => "Set Up"]); + if (is_file('../public/index.html')) { + return response()->file('../public/index.html'); + } else { + return redirect()->intended('dashboard/start'); + } } + } else { + return view('back.init', ["status" => false, "title" => "Set Up"]); } } @@ -67,7 +73,7 @@ class FrontController extends Controller $pages = $this->pages->getAll(); $currentTheme = $this->assets->getCurrentTheme(); $page = $this->pages->getBySlug($slug); - $pageData = $this->sort->page($page, false); + $pageData = $this->sort->page($page, $pages, false); $template = $currentTheme . '.' . $page['layout']; return view($template, $pageData); } @@ -78,19 +84,21 @@ class FrontController extends Controller $template; $pageData = []; if ($this->configCheck()) { + $pages = $this->pages->getAll(); $currentTheme = $this->assets->getCurrentTheme(); switch ($slug) { case 'archive': case 'archives': $template = $currentTheme . '.archive'; - $pageData = $this->sort->archive(false); + $pageData = $this->sort->archive($pages, false); break; case 'tags': $template = $currentTheme . '.tags'; - $tags = $this->sort->tags(false); + $tags = $this->sort->tags($pages, false); $tagData = find($tags['tags'], ['tag_name' => $option]); $pageData = [ 'theme' => $currentTheme, // for theme kit + 'layout' => $tags['layout'], 'title' => 'Pages Tagged as ' . $option, 'dynamicRender' => $tags['dynamicRender'], 'info' => $tags['info'], @@ -103,7 +111,7 @@ class FrontController extends Controller $pages = $this->pages->getAll(); $currentTheme = $this->assets->getCurrentTheme(); $page = $this->pages->getBySlug($slug); - $pageData = $this->sort->page($page, false); + $pageData = $this->sort->page($page, $pages, false); $template = $currentTheme . '.' . $page['layout']; break; } diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 45f1889..f4f73dd 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -44,7 +44,10 @@ class SettingsController extends Controller public function start() { - return view('back.settings', ['settings' => $this->sort->settings(), 'nav' => $this->sort->navigation()]); + return view('back.settings', [ + 'settings' => $this->sort->settings(), + 'nav' => $this->sort->navigation() + ]); } public function tasks(Request $request) diff --git a/app/Http/Controllers/ThemeController.php b/app/Http/Controllers/ThemeController.php index 4ecb97f..5b9d350 100644 --- a/app/Http/Controllers/ThemeController.php +++ b/app/Http/Controllers/ThemeController.php @@ -50,6 +50,7 @@ class ThemeController extends Controller $currentTheme = $this->assets->getCurrentTheme(); $template; $pageData = []; + $book = $this->pages->getAll(); switch ($view) { case "index": case "page": @@ -67,21 +68,21 @@ class ThemeController extends Controller $page = $this->pages->getByUuid($id); } } - $pageData = $this->sort->page($page); + $pageData = $this->sort->page($page, $book); break; case "tags": $template = $currentTheme . '.tags'; - $pageData = $this->sort->tags(); + $pageData = $this->sort->tags($book); break; case "archives": case "archive": $template = $currentTheme . '.archive'; - $pageData = $this->sort->archive(); + $pageData = $this->sort->archive($book); break; default: $template = $currentTheme . '.index'; $page = $this->pages->getBySlug('first'); - $pageData = $this->sort->page($page); + $pageData = $this->sort->page($page, $book); } if ($this->member::status()) { return view($template, $pageData); diff --git a/app/Repositories/PageRepository.php b/app/Repositories/PageRepository.php index e1e3c08..113bbb7 100644 --- a/app/Repositories/PageRepository.php +++ b/app/Repositories/PageRepository.php @@ -153,9 +153,8 @@ class PageRepository implements PageRepositoryInterface $this->settings->getGlobal()['renderOnSave'] == 'true' && $this->settings->getGlobal()['dynamicRender'] == 'false' ) { - $this->render->tags(); - $this->render->archive(); - $this->render->pages(); + //REFACTOR: Don't need to render entire site on a page edit, just render edited page + $this->render->publishAll(); $message = 'Filed edited and rendered. NOICE.'; } else { $message = 'File edited. Nice work'; @@ -164,7 +163,8 @@ class PageRepository implements PageRepositoryInterface //upadte settings if needed $body->path = $path; $this->settings->updateMenu($body); - $this->settings->updateTags($this->sort->tags()); + $tags = $this->sort->tags($this->content->loadAllPages()); + $this->settings->updateTags($tags, false); // if new page added, update current index in Settings file if ($task == 'create') { $this->settings->updatePageIndex(); diff --git a/app/Services/Assets/RenderService.php b/app/Services/Assets/RenderService.php index c9f0e7b..789fb86 100644 --- a/app/Services/Assets/RenderService.php +++ b/app/Services/Assets/RenderService.php @@ -39,14 +39,12 @@ class RenderService 'type' => 'RENDER_SUCCESS', ]; } else { + //grab all pages to pass to routines + $pages = $this->contents->loadAllPages(); try { - $result = $this->archive(); - if ($result['status'] == 'archive_complete') { - $result = $this->tags(); - if ($result['status'] == 'tags_complete') { - $this->pages(); - } - } + $this->archive($pages); + $this->tags($pages); + $this->pages($pages); $message = [ 'message' => 'Site Rendered. GOOD EFFORT', @@ -63,10 +61,10 @@ class RenderService return $message; } - public function archive() + public function archive($pages) { $template = $this->theme . '.archive'; - $pageData = $this->sort->archive(false); + $pageData = $this->sort->archive($pages, false); $location = '../public/archives.html'; File::put( $location, @@ -82,9 +80,9 @@ class RenderService return $done; } - public function tags() + public function tags($pages) { - $data = $this->sort->tags(false); + $data = $this->sort->tags($pages, false); foreach ($data['tags'] as $item) { //$template = 'tags.twig'; $template = $this->theme . '.tags'; @@ -121,16 +119,15 @@ class RenderService return $done; } - public function pages() + public function pages($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); + $pageData = $this->sort->page($page, $pages, false); if (str_contains($page['layout'], 'index')) { $location = '../public/index.html'; diff --git a/app/Services/Data/SortingService.php b/app/Services/Data/SortingService.php index aab8ba3..c7a093e 100644 --- a/app/Services/Data/SortingService.php +++ b/app/Services/Data/SortingService.php @@ -29,8 +29,6 @@ class SortingService 'keywords' => isset($global['keywords']) ? $global['keywords'] : 'fipamo, blog, jamstack, php, markdown, js', - 'menu' => $this->settings->getMenu(), - 'tags' => $this->settings->getTags(), 'description' => $global['descriptions'], 'image' => $global['base_url'] . $global['background'], 'baseURL' => $global['base_url'], @@ -39,15 +37,14 @@ class SortingService ]; } - public function tags($debug = true) + public function tags($pages, $debug = true) { - $pages = $this->contents->loadAllPages(); foreach ($pages as $page) { $temp = []; if (isset($page['tags'])) { $temp = explode(',', $page['tags']); foreach ($temp as $tag) { - $label = trim($tag); + $label = safeString(trim($tag)); if (!find($this->p_tags, ['tag_name' => $label])) { array_push($this->p_tags, [ 'tag_name' => $label, @@ -102,9 +99,8 @@ class SortingService return $tagged; } - public function archive($debug = true) + public function archive($pages, $debug = true) { - $pages = $this->contents->loadAllPages(); $years = []; $archive = []; foreach ($pages as $page) { @@ -168,7 +164,7 @@ class SortingService return $archiveData; } - public function page($page, $debug = true) + public function page($page, $pages, $debug = true) { $pageOptions = []; $tags = []; @@ -205,7 +201,6 @@ class SortingService $recent = []; $featured = []; $limit = 4; - $pages = $this->contents->loadAllPages(); foreach ($pages as $item) { if ( !$item['deleted'] &&