将您的Javascript放在.php文件中有什么好处?

Mar*_*iek 8 javascript php

我偶尔会遇到通过PHP文件包含一些Javascript的页面:

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

其中fake_js.php的内容可能如下所示:

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

function handleLoad() {
    alert('I loaded');
}
Run Code Online (Sandbox Code Playgroud)

包含这样的Javascript有什么优点(或缺点)?

tj1*_*111 13

它可以很容易地从服务器端设置javascript变量.

var foo = <?=$foo?>
Run Code Online (Sandbox Code Playgroud)

我通常在我的项目中有一个php/javascript文件,我用它来定义需要在javascript中使用的任何变量.这样我就可以在javascript中轻松访问服务器端使用的常量(css颜色,非敏感站点属性等).

编辑:例如,这是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").";";


?>
Run Code Online (Sandbox Code Playgroud)


han*_*son 8

如果您不需要它,请不要使用它:

你要记住的第一件事是YAGNI.你不需要它.在某个特征,原则或指南变得有用和相关之前,请不要使用它.

缺点:

  • 增加复杂性
  • 比静态文件慢.
  • 缓存问题(服务器端)
  • 可伸缩性问题(负载均衡器从重型PHP/Apache等进程中卸载静态文件)

好处:

  • 用户特定的javascript - 可以通过<head> </head>在HTML部分中使用正确的变量/参数进行初始化来实现
  • 页面特定的javascript - JS也可以推广使用参数
  • 从数据库创建的JSON(通常通过AJAX请求)

除非javascript真正独特(即JSON,参数/变量),否则你不会获得太多收益.但在每种情况下,您都应该最小化服务器端生成的JS数量,并最大化静态文件中的代码量.不要忘记,如果它是动态的,它必须一次又一次地生成/下载,所以它不是一个繁重的过程.

也:

  • 这也可用于最小化服务器配置量(例如,如果Web服务器不提供具有正确内容类型的file.js)