Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要求php文件而不是链接到js和css是一种不好的做法吗?_Php_Javascript_Css_Require - Fatal编程技术网

要求php文件而不是链接到js和css是一种不好的做法吗?

要求php文件而不是链接到js和css是一种不好的做法吗?,php,javascript,css,require,Php,Javascript,Css,Require,我想将这些代码片段放在几个php文件中,然后在我的主页中需要它们,而不是使用“纯”css和js文件。我的意思是,我基本上已经为我的HTMLDOM做了这些 这: var foo=; 或者这个: <style type='text/css'> .foo{ background-image:url('<?php echo $bar; ?>image.png'); } </style> 傅先生{ 背景图片:url('image.png'); } 这真的很糟糕

我想将这些代码片段放在几个php文件中,然后在我的主页中需要它们,而不是使用“纯”css和js文件。我的意思是,我基本上已经为我的HTMLDOM做了这些

这:


var foo=;
或者这个:

<style type='text/css'>
.foo{
background-image:url('<?php echo $bar; ?>image.png');
}
</style>

傅先生{
背景图片:url('image.png');
}
这真的很糟糕吗

如果是,这种方法的利弊是什么

更新:


现在我只使用Drupal,它处理将PHP变量传递给主题系统中的js,并支持诸如LESS和SASS之类的CSS预处理器。我在这个问题中提出的两个用例都被现代框架/预处理器处理得相当好。

我认为这没有什么不好的地方。对一些人来说,这会是一件令人眼痛的事,但没关系。只需确保将这种集成保持在最低限度,您真的不希望在css、javascript和html中散布大量php。

通过php解释器使用javascript可能不是一个好主意。同样,CSS

  • 它鼓励使用服务器端代码编写客户端代码的反模式
  • 这使得单独测试JS和CSS变得更加困难(如果它们开始充满PHP代码)
  • 它使PHP输出更大
  • 客户端不会缓存页面的一部分,只缓存整个对象
要扩展最后一部分,Javascript和CSS可能会变得更大(与HTML相比)。如果您让客户端浏览器缓存它们,则不需要下载它们

是的,包括在主文档中意味着没有单独的请求可以减少开销(特别是使用SSL),但是客户端仍然需要下载文件。从客户端缓存获取数据通常更快

另一方面,您的代码

<script type='text/javascript'>
var foo = <?php echo $bar; ?>;
</script>

var foo=;

看起来它是一段数据,而不是Javascript代码,因此可能会有所不同。您可能还希望正确地转义$bar。

虽然CSS不是问题,但如果您希望通过AJAX将其作为HTTP响应发送,则会遇到问题

<script type='text/javascript'>
var foo = <?php echo $bar; ?>;
</script>

var foo=;
出于安全原因,AJAX不允许使用Javascript

最佳实践是将Javascript保存在单独的文件中。这样,脚本的客户端缓存在流量方面也将对您有利。

遵循MarkR的线程(看不到如何回复),假设您只是尝试将数据传递给JS:

一种可以两全其美的方法是在PHP位中包含一些逻辑,以便它检查某个cookie并使其具有某个值(例如,版本/时间)。比如:

if(!isset($\u COOKIE['warm'])和&$\u COOKIE['warm']!='today'){
回声';
echo“var foo=$bar;”;
回声';
}
客户端将首先查找foo全局,如果它存在,它将获取它并缓存它(例如localStorage),并使用foo对象中的时间、版本或某些属性设置cookie。如果foo不存在,那么它将检查缓存(例如localStorage)。如果它不在那里,那么它将为它发出AJAX调用

通过这种方式,您可以将额外的请求保存在缓存未命中/首次访问者上,并在其重复上获得缓存优势。它不应该让人抓狂,但我认为它应该适合小的重要数据对象(引导、用户配置文件、仪表板信息等)


(编辑)明确地说,保持这种方法易于实现和维护的中心思想是将为JS生成$bar的服务器端代码保存在一个地方,PHP打印var foo和生成JSON响应时都可以调用该代码。同样,客户端将使用一个函数解析$bar,不管它来自var、cache还是AJAX。

见鬼!Make a
css.php
take将文件作为GET参数,并将
%varname%
之类的令牌解析到数据库中!太复杂了!这不是过度复杂化。我使用codeigniter作为一个框架,我希望在css中使用base_url()函数来提高可移植性并减少键入。如果我使用相对URL,当我使用FirefoxWebDeveloper插件编辑css时,我的背景图像通常不会出现。正是这些小事情起到了作用。@user278457 CSS中的相对路径不应该成为问题,因为它们总是从同一个目录提供服务。在每个页面中包含CSS实际上会使处理路径问题变得更加困难。找一个像样的CSS编辑器进行编辑(CSSEdit for OS X)-P
foo
应该是
.foo
#foo
:)@Jonathan不一定是。。。您可以使用Javascript创建标记,我相信。@Chacha:当然,您可以创建一个
foo
标记,但我怀疑这是用户的想法:)好的,从现在开始是.foo!:这对我来说似乎很合理。因此,这不是因为一个明显的安全问题而简单地说“不”,而是一个性能和开发问题。这两个问题都应该在项目的背景下加以考虑,我想我可以根据你所说的来做:)谢谢!这绝对是我为我正在从事的项目类型所建议的最大问题。谢谢你的提醒!这将是一个痛苦的调试。
<script type='text/javascript'>
var foo = <?php echo $bar; ?>;
</script>
if (!isset($_COOKIE['warm']) && $_COOKIE['warm'] !== 'today') {
    echo '<script type=\'text/javascript\'>';
        echo "var foo = $bar;";
    echo '</script>';
}