#javascript #php
#javascript #php
Вопрос:
Есть ли какие-либо проблемы с производительностью при использовании
<script src='javascript.php'></script> //.php
Вместо
<script src='javascript.js'></script> //.js
javascript.php (это нужно для доступа к значению сеанса)
<?php header("Content-type: application/javascript"); ?>
$(function() {
$( "#progressbar" ).progressbar({
value: <?php echo $_SESSION['value'] ?>
});
// ... more javascript ...
Комментарии:
1. это плохая практика? ДА. это важнее, чем производительность? ДА.
2. Я бы предположил, что ваш сервер немного быстрее обслуживает статический файл (
.js
), чем файл, который он должен сначала проанализировать (.php
). Вы можете сравнить это, попробовав обе версии и взглянув на вкладку Chrome DevTools network.3. правильный способ сделать это: заменить динамический JS-код входными параметрами (аргументами функции). поместите эти входные параметры (конфигурацию) в динамически сгенерированный HTML-код.
Ответ №1:
Это проблема с производительностью, но не по той причине, которую вы могли бы ожидать. Это правда, что разбор PHP-файла занимает на долю секунды больше времени, чем обработка статического JS-файла, но настоящая проблема заключается в том, что вы не можете кэшировать PHP-файл, потому что он содержит изменяющуюся переменную. Клиент должен загружать файл снова и снова каждый раз.
«Правильный» способ сделать это — установить переменную JavaScript в HTML-файле.
<script>
var session = <?php echo json_encode( $_SESSION[ 'value' ] ); ?>;
</script>
<script src='javascript.js'></script>
javascript.js:
$(function() {
$( "#progressbar" ).progressbar({
value: session
});
Теперь файл сценария можно безопасно кэшировать, поскольку он гарантированно будет иметь статическое содержимое.
Вопрос мнения, но даже «более правильным» способом было бы извлекать любые динамические значения с сервера с помощью вызовов AJAX.
Ответ №2:
Версия PHP будет медленнее, потому что вы должны запустить PHP на сервере для создания Javascript.
На клиенте не будет никакой разницы в производительности. Неважно, как был создан JS, это просто текст.