Вывода перед заголовками тоже нет, если такое есть, то laravel сразу бы ошибку выдал.Это варнинг, а не ошибка, так что вполне может игнорироваться, в зависимости от настроек.
return response($content, 200)
->withHeaders([
'Content-Type' => $type,
'X-Header-One' => 'Header Value',
'X-Header-Two' => 'Header Value',
]);
return $pdf->download($filename);
сделайте руками вывод заголовков и ечо содержимого пдф, затем ексит. Если сработает - значит респонс дополнительно обрабатывается после ретурна из контроллера... class Timer {
static $start;
static $end;
static $marks = [];
static $formats = [1=>''];
static function init(){
if(empty(self::$start)) self::$start = microtime(true);
}
static function setMark($markName = ''){
$time = microtime(true);
if($markName == '')$markName = $time;
$data['name'] = $markName;
$data['time'] = $time;
$res['time'] = $time;
if(count(self::$marks) > 1)$res['diff'] = $time - self::$marks[count(self::$marks)-2]['time'];
else $res['diff'] = 0;
$data['diff'] = $res['diff'];
self::$marks[] = $data;
return $res;
}
static function timeFormat($number,$format = ''){
if(empty($format)) $format = 3;
return number_format ($number,$format,'.','');
}
static function report(){
self::$end = microtime(true);
self::$marks['start'] = self::$start;
self::$marks['end'] = self::$end;
self::$marks['all_time'] = self::$end - self::$start;
if(!empty(self::$marks)) return self::$marks;
}
}
\Timer::init()
//some code block 1
\Timer::setMark('after block 1');
//some code block 2
\Timer::setMark('after block 2');
...
//some code block n
\Timer::setMark('after block n');
//near end of code
\Timer::setMark('end');
var_dump(\Timer::report());
exit;
Что нужно сделать обязательно кроме тестов и как тогда лучше спрашивать с разработчиков, если они предлагают размытые предложения? Хочется понять в какую сторону копатьБить палкой не вариант? Тогда берите других, эти испортились. Если разработчик не знает как выявить узкие места кода - нахрена он нужен? Код написать сегодня любой чат может... Ну, на крайняк дайте им вышеприведенный вариант решения проблемы...
достаточно 2000-4000 человек, заходящих в течение 20 минут на сайтэто равномерные 3-4 рпс, ну или пусть в пике 50 рпс, должно держать даже на несложной конфигурации... Копайте код.
Ведь если нет никакой дополнительной обработки, то ведь можно просто сделать $model->toArray(), не?Во первых - в 90% случаев модель не достается "голой", а тянет с собой связанные объекты, например роли или аватарки или еще что-то. Они явно лишние в выдаче.
Вопросы такие: какие есть способы ускорить загрузку страницы?Во первых - выяснить что тормозит: бэкенд или фронтенд. Сделать профайлинг бэкенда, сделать анализ загрузки фронта. Соответственно сначала понять что тормозит.
Можно ли её рендерить на клиенте при помощи js?Можно, но скорее всего прироста вы особо не получите. Если проблема на бэкенде - метод рендера будет абсолютно по барабану. Если на форнте - скорее всего будет медленнее, так как вы сначала получите все данные, а потом еще будете средствами языка (а не движка браузера, который очевидно быстрее) отрисовывать хтмл.
И почему на смартфоне в мобильном safari та же самая страница грузится за пару секунд?Опять же, вопрос скорее к вам чем к кому-либо еще. Возможно кеширование, которое на мобильных браузерах практически всегда более агрессивное. Возможно вы просто не видите как тормозит загрузка, например в силу другого метода рендеринга, который сразу при получении данных выводит все что возможно, в то время как на стационаре рендеринг идет только после загрузки тега целиком. Достаточно например быстро промотать на сафари вниз при загрузке, чтобы увидеть что загрузилось далеко не все... А возможно в мобильной версии отображается сильно меньше элементов...
Можно ли этот эффект повторить на десктопе?Если есть что повторять... Можно попробовать сделать таблицу не цельной, а разбить на несколько таблиц, по 100-300 строк. Или еще адкеватнее - сверстать дивами.
я тоже склоняюсь к неэффективной вёрстке. Если я эту вёрстку буду генерировать js’ом, процесс ускорится?Скорее всего, как я уже написал, скорости не прибавится. Вообще что мешает проверить эффективность верстки? Тупо выведите все строки дивами, без всяких разделителей, одна строка - один див с данными, разделенными "|" например, и посмотрите на разницу.
Можем ли мы сделать запрос к БД и извлечь из промежуточной таблицы (book_author) информацию по конкретной книге?Из "промежуточной" можно извлечь только связи, она для этого и нужна.
Т.е. у нас для работы есть только информация о книге и теперь нужно извлечь информацию о её авторе (авторах).В чем вопрос? Как сделать джоин с 3 таблицами? Так же как с двумя, только с тремя.
Приемлемо ли вообще делать такие запросы к промежуточным таблицам?Какие - "такие"? У вас вообще ни одного запроса не написано.
Скорость канала на сервере — 200 Мбит/сВангую что это скорость на выход, на вход будет совершенно другая скорость, не указанная в рекламном буклете, или написанная где-то под звездочкой оооочень мелким шрифтом.
• регистрация/авторизация пользователей;практически все что перечислено в качестве инструментов - хватает или избыточно.
• добавление/удаление записей;
• формирование отчета в формате docx.
1) Нужна ли асинхронность, исходя из функций приложения?Нет, тем более для подхода через REST API.
2) Что лучше выбрать из перечисленного стека, если необходимо представить приложение в короткие сроки?Как самый простой вариант смотрится лара + 4 готовых модуля, 2 из которых вроде даже идут из коробки, остальные добиваются 1 командой композер инсталл %пакетнейм%.
3) Исходя из функций приложения, это будет SPA (одностраничное приложение) или PWA (многостраничное приложение)?Это не противопоставление, это вообще не взаимосопоставимые технологии. PWA может быть SPA, может не быть... PWA это вообще не про "многостраничность".
не справился, пропал, дико задержалПо тому что чисто версткой заниматься могут только от безнадеги полные неумехи/новички, или в другой крайней ипостаси - работники постигшие этот мир и им этот мир абсолютно понятен, и они здесь ищу только одного - огромных денег за свое бесконечно-вечное. С бэкендерами тоже сложно, на вольных хлебах это редкий зверь, а на фрилансе он пасется только с условием, что капуста за разовый напряг будет крупнее кочана на постоянном месте работы, ибо нафига тогда париться.
<?php
class config {
public $start_time = '1670000999';
public $email = 'support@domain.zone';
public $adm_dir = 'FolderAdm';
public $adm_name = 'Admin';
public $adm_pass = '00000000';
}
$configFile = './core/cfg_test.php'; //доступность файла оставим на совести автора вопроса
$cfg = new config();?>
<form method="post">
<?php
foreach ($cfg as $key=>$value) {?>
<input name="<?=$key?>" value="<?=$value?>">
<?php }?>
<button type="submit">do marasm</button>
</form>
<?php
if($_SERVER['REQUEST_METHOD']=="POST"){
$new_cfg = (Object)$_POST;
file_put_contents($configFile, var_export($new_cfg,1));
}
?>