Каковы преимущества размещения вашего Javascript в файле .php? - PullRequest
8 голосов
/ 15 июня 2009

Я иногда сталкиваюсь со страницами, где некоторые Javascript включены через файл PHP:

<html>
  <head>
    <script type="text/javascript" src="fake_js.php"></script>
  </head>
  <body onload="handleLoad();">
  </body>
</html>

где содержимое fake_js.php может выглядеть примерно так:

<?php header('Content-type:  text/javascript') ?>

function handleLoad() {
    alert('I loaded');
}

Каковы преимущества (или недостатки) включения такого Javascript?

Ответы [ 7 ]

13 голосов
/ 15 июня 2009

Это позволяет легко устанавливать переменные javascript со стороны сервера.

var foo = <?=$foo?>

У меня обычно есть один файл php / javascript в моих проектах, который я использую, чтобы определить любые переменные, которые должны использоваться в javascript. Таким образом, я могу легко получить доступ к константам, используемым на стороне сервера (цвета CSS, нечувствительные свойства сайта и т. Д.) В javascript.

Редактировать: Например, вот копия моего config.js.php файла из проекта, над которым я сейчас работаю.

<?php
require_once    "libs/config.php";
if (!function_exists("json_encode")) {
    require_once    "libs/JSON.php";
}
header("Content-type: text/javascript");
echo "var COLORS = ". json_encode($CSS_COLORS) .";\n";
echo "var DEBUG = ". ((DEBUG == true) ? "true" : "false").";";


?>
8 голосов
/ 15 июня 2009

Если вам это не нужно, не используйте его:

Первое, что вам нужно держать в ум ЯГНИ . Ты не собираешься Нужно. До определенной функции, принцип или руководство становится полезным и актуально, не используйте его.

Недостатки:

  • Добавлена ​​сложность
  • Медленнее, чем статические файлы.
  • Проблемы с кэшированием (на стороне сервера)
  • Проблемы с масштабируемостью (балансировщики нагрузки выгружают статические файлы из тяжелых процессов PHP / Apache и т. Д.)

Преимущества:

  • Пользовательский javascript - Может быть достигнуто путем инициализации с правильными переменными / параметрами в разделе <head> </head> HTML
  • javascript для конкретной страницы - JS также можно обобщать для использования параметров
  • JSON создан из базы данных (обычно запрашивается через AJAX)

Если javascript не является действительно уникальным (то есть JSON, параметры / переменные), вы не получите много. Но в любом случае вы должны минимизировать количество JS, генерируемых на стороне сервера, и максимизировать количество кода в статических файлах. Не забывайте, что если он динамический, его нужно генерировать / загружать снова и снова, чтобы не требовалось, чтобы это был тяжелый процесс.

Также:

  • Это также можно использовать для минимизации объема конфигурации сервера (например, если веб-сервер не обслуживает файл file.js с правильным типом содержимого)
1 голос
/ 16 июня 2009

согласен с tj111. Помимо того, что упомянул tj, я также нашел сгенерированные php javascripts отличным оружием для борьбы с трюками в браузере. Не так давно я проклинал весь javascript за то, что он постоянно кэшируется браузером. Обновление страницы мне не помогло, пришлось очистить весь кеш, чтобы заставить браузер перезагружать файлы javascript. Как только я построил php-стену перед моими javascripts:

fake_js.php:

<?php 

header('Content-type:  text/javascript') 
include('the_real_javascript.js');

?>

Свежий новый javascript всегда будет отображаться на стороне клиента. Однако этот подход, очевидно, хорош только на этапе разработки, когда он может избавить разработчика от головной боли, если в браузере загружен правильный javascript. Конечно, при подключении к localhost штраф за повторную загрузку одного и того же файла не такой большой.

В действующем веб-приложении / сайте кэширование на стороне клиента позволяет снизить сетевой трафик и общую нагрузку на сервер.

1 голос
/ 15 июня 2009

Нет смысла в приведенном выше примере (кроме особых сценариев развертывания, где у вас есть доступ к файлам .php, а не к файлам .js, что было бы безумно, но не неслыханно).

Тем не менее, этот подход позволяет вам передавать JS через анализатор php - это означает, что вы можете динамически генерировать JS на основе серверных переменных.

0 голосов
/ 16 июня 2009

Абсолютно нет, имхо. Я использую js-фреймворк, который я написал, для обработки настроек любых серверных переменных, к которым мне нужен доступ По сути, это то же самое, что встраивание PHP в JavaScript, но гораздо менее двусмысленно. Использование этого метода позволяет вам также полностью отделить серверную логику и HTML от javascript. В результате получается намного более чистый, более организованный и слабосвязанный модульный код.

Вы можете сделать что-то подобное в своем HTML:

<script type="text/javascript">

registry = {
    myString : '<?php echo $somePhpString; ?>',
    myInt    : <?php echo $somePhpInteger; ?>
}

</script>

А затем сделайте что-то подобное в своем js:

if (registry.myInt === 1) {
    alert(registry.myString);
}
0 голосов
/ 16 июня 2009

Если у вас нет полного доступа к серверу и вы не можете включить кодировку gzip, тогда довольно полезно поместить следующее в ваш файл javascript (примечание: нужно будет переименовать в file.js.php или разобрать как PHP через директиву .htaccess):

<?php
ob_start( 'ob_gzhandler' );
header("Content-type: text/javascript");
?>
// put all your regular javascript below...

Вы также можете использовать его для лучшего контроля кэша, отслеживания посетителей и т. Д. Вместо решений, управляемых сервером.

0 голосов
/ 15 июня 2009

Преимущество (не специфичное для PHP - я использовал эту технику в EmbPerl и JSP) будет возможность динамически генерировать или настраивать / настраивать код JavaScript на стороне сервера.

Примером использования будет заполнение массива на основе содержимого таблицы БД. Или применение методов локализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...