Может в этом дело: Замечание: Дополнительная настройка на Windows с PHP 7.4.0
Пхп в консоли отличается. lib☝sqlite
phpinfo 3.29
php -a 3.30.1
Профилирование. Кстати рекомендую сразу включить этот функционал в ваш движок.
Class Aapp\Response\RenderHtml ready 11.09 ms 0.63 ms 1.19/2.00, mb Start render page by TWIG 11.12 ms 0.03 ms 1.19/2.00, mb TWIG loaded 17.64 ms 6.52 ms 1.76/4.00, mb TwigExtension loaded 17.75 ms 0.11 ms 1.76/4.00, mb HTML ready 19.60 ms 1.85 ms 1.89/4.00, mb Js/Css included 20.10 ms 0.49 ms 1.93/4.00, mb Debug data 20.11 ms 0.01 ms 1.93/4.00, mb Profiler 20.12 ms 0.01 ms 1.93/4.00, mb #последняя операция перед echo $this->html;
Сколько там? 9 мс. Не так то и много. В вашем случае, хтмл так же надо собрать и хмл обработать - какие то ресурсы потребуются.
Тут же вам пытаются донести:
1. если телегу поперед лошади запрягать, обычно ничего хорошего не получается. Сначала структура приложения, обработка ошибок, Exception, обработка запроса (урл, хеадеры, тип запроса, куки и т.д.), автолоадер, роутер, идентификация пользователя, механизмы обработки роутов, механизмы удобной работы с данными и т.п. скучные дела. И только потом сборка и отгрузка хтмл
2. Гибкое управление компонентами хтмл вполне достижимо без хмл. Данные собранные в ходе обработки запроса + шаблонизатор. Как правило, достаточно документированный, что бы им пользовались и разработчики под ваш движок и продвинутые редакторы сайта. Этого вполне достаточно.
switch($type){ case 'TWIG': $this->twig_out(); $this->html_replace(); $this->is_debug(); break; case 'PHP': $out = Core::outget(); require $this->tpl ; exit(0); break; } echo $this->html;
Не нравится шаблонизатор? Нативный пых: require $this->tpl ;
Пример из Phalcon PHP Framework <link rel="shortcut icon" type="image/x-icon" href="<?php echo $this->url->get('img/favicon.ico')?>"/> </head> <body> <div class="container"> <?php echo $this->getContent(); ?> </div>
Аналогично
А дальше? В итоге все равно хтмл отдавать. ХМЛ, в терминах php, суть std/array. Смысл движку после манипуляций в админке std/array писать в хмл. А потом, чтобы отдать хтмл пользователю хмл обратно парсить в std/array. Лишняя операция. Объект после манипуляций в админке пишем в БД (монга рулит тут). А юзеру отдаем результат как Ф( Запрос, Объект, Контент ).
Ф это, не функция пхп, а абстрактное представление.
Типа имеем объект (пардон за объем, но это еще сильно сокращенный)
[title] => ********** [tpl] => Array ( [type] => TWIG [area] => /home/web/domains/1_local/var/tpl/twig/**********/ [template] => page.twig ) [charset] => utf-8 [lan] => ru [upload_image] => /home/web/domains/1_local/public/files/ [upload_image_web] => /files/ [good_tpl] => Array ( [area] => /home/web/domains/1_local/etc/subs/www/tpl/ [goodslider] => goodslider.twig [category_list] => catlist.twig [good_list] => goodlist.twig [good_card] => goodcard.twig [mail] => mail.twig ) [slider] => Array ( [js] => assets/vendor/node_modules/tiny-slider/dist/min/tiny-slider.js [css] => assets/vendor/node_modules/tiny-slider/dist/tiny-slider.css [selector] => tiny_slider ) [content_components] => Array ( [0] => content [1] => aside [2] => article [3] => btm_content [4] => h1 [5] => before_cathit ) [css_list] => /assets/themes/def/css/custom.min.css
и отдаем его в шаблоне [template] => page.twig
используя шаблоны для листинга/карточек и др приблуд магазина
[area] => /home/web/domains/1_local/etc/subs/www/tpl/ [goodslider] => goodslider.twig [category_list] => catlist.twig [good_list] => goodlist.twig [good_card] => goodcard.twig [mail] => mail.twig
для субдомена www, соответсвенно для урюпинск.сайт.ру шаблоны будут искаться в
/home/web/domains/1_local/etc/subs/урюпинск/tpl/ если нет, то дефолтные
Отличная постановка задачи. Надо ее решать.
Многаминут. Но, по диагонали пролистал. Был 17-м. Явно видно, что это не фреймворк, а попытка сделать CMS. Вариантов внедрить кнопку/радио/селект море. Как и поменять местами майн и сайтбар.
Если базовый функционал оставить на потом - это называется решать задачу с конца. И не взлетит🙅
Один, не страшно;) Если использовать уже изобретенные велосипеды. Хотя бы Гит и локальный репозитарий для начала
"repositories": [{ "type": "path", "url": "путь к репозитарию", "options": {"symlink": true}, "autoload": { "psr-4": { "Cms\\": "src/"} }
и потом любой разработчик сайта на вашем движке легко сделает любые манипуляции с эксель файлами
composer require phpoffice/phpspreadsheet use PhpOffice\PhpSpreadsheet\Spreadsheet; $spreadsheet = new Spreadsheet();
Или меньше манипуляций, но быстрее:
"require": { "box/spout": "^3.0"
Ну и соответственно:
require _VENDOR . 'autoload.php';
Само собой, потом, когда есть что показать, все открываем на Гите, что бы
composer require SNDL
Уверяю, это вариант не без изъянов, но лучше нет🍿
Настоятельно рекомендую делать все то, что полагается иметь на борту фреймворка в первую очередь. Или использовать любой из доступных (yii, laravel , symfony) и переименовать тему CMS SNDL.---------- Добавлено 06.12.2019 в 21:01 ----------
Я пропустил 😂
Это да. Следующим этапом, решить увлекательную задачу закрасить прямоугольнички начиная с первого. Ну и 100 из 100 само собой (без внешних)
Подходы могут быть разные, кому то по барабану. Я за скоростной сайт.🍿
Хозяин-барин. Если сайты делаете, то фактор ттфб исключите;) Это не важно для сайта. Покупатель может подождать
Если вы этим оправдываете то, что делаете, то мне жаль. А по мне, повторю:
---------- Добавлено 05.12.2019 в 01:34 ----------И добавлю, мне полтинник и первый сайт (php, mysql, он лайн заказ, загрузка CSV 10к товаров ) был в 2004 году
Кстати о СЕО. Вы вполне, можете автоматизировать СЕО, поняв семантику запроса. Например, зная 2 слова "Фреймворк SNDL", за 10 сек можно узнать про что это:
Данные на основе ТОП-100 Яндекса
Попали в результат "фреймворк" и "фреймворкa" а не должны были, если бы лемматизация правильно сработала. pymorphy2 накосячил
видимо не знает такого слова:)
😮 А что будут делать те, кто купил сайт на Битриксе в промежуток между сегодня и релизом. Не говоря о тех, кто это сделал ранее. В обратную совместимость не особо верю🍿
Иными словами, ТС вовремя - назрела модернизация рунета. Если даже Битрикс на 3-х фреймворках грозится обновиться😂
Это все давно уже есть. Ваш хмл лишняя сущность. Конфигом для сайта и документа + шаблон. Которые редактируются из админки.
Лучше обратите внимание на:
1. Базовый функционал любого фреймворка:
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
Все фреймворки это делают. Кто то лучше, кто то хуже.
2. Чего, не хватает. Тренды.
В параллельной теме о дублях правил в цсс рассуждают.
О скорости загрузки много говорят.
СЕО ориентированность тоже не последний запрос.
По мне, так и приложиться нужно туда.
$ ab -n 100 -c 3 **** ..... Non-2xx responses: 100 Requests per second: 101.70 [#/sec] (mean) Time per request: 29.499 [ms] (mean) Time per request: 9.833 [ms] (mean, across all concurrent requests) Transfer rate: 6416.58 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 4.0 0 29 Processing: 14 28 12.9 25 72 Waiting: 0 25 13.1 21 68 Total: 14 29 13.7 27 72
Я так понял, претензии в основном к выделенному: