В чем преимущества размещения вашего Javascript в файле .php?

Иногда я сталкиваюсь с страницами, где 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?

Это упрощает установку переменных 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").";"; ?> 

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

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

Недостатки:

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

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

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

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

Также:

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

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

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

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

fake_js.php:

 <?php header('Content-type: text/javascript') include('the_real_javascript.js'); ?> в <?php header('Content-type: text/javascript') include('the_real_javascript.js'); ?> 

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

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

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

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

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

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

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

Абсолютно никто, ИМХО. Я использую структуру 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); }