2012-11-12 63 views
1

这里是我对所有这些魔法如何工作的理解(请纠正我,如果我错了):PHP包括JS库

在PHP/JS/HTML/CSS网站,当请求页面时,服务器读取文件(index.php用于参考此问题),执行任何<?php ?>标记/构造并完成工作。然后它将完成的工作作为一个完整页面发送给请求者。然后请求者读取文件(通过浏览器)并执行“正常”命令中的文件(index.php)。如果我想几页,以包括同JS脚本和库,我可以包括(安全和正常使用约定)的JS:

<script type="text/javascript" src="LIBRARY/1.js"></script> 
<script type="text/javascript" src="LIBRARY/2.js"></script> 
// etc... for libraries, then also include inline scripts like: 
<script type="text/javascript"> 
    $(document).onLoad(function(){ 
    }); 
</script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
    }); 
</script> 

通过PHP包括:

<!-- JS --> 
<?php include ("component/js.php"); ?> 

如果这是可能的,最好还是将它们包含在页面底部,或者库应该位于底部,onLoad位于顶部,ready位于底部,或者用于加载时间优化的任何其他特定位置?

+0

您的理解是正确的。您可以通过在PHP中写入页面来包含脚本标记,可以直接在脚本中或包含在其他PHP文件中。如果您转到页面并查看源代码,您将看到PHP生成并发送到您的计算机的HTML。您的浏览器行为将与您载入具有该内容的静态HTML页面完全相同。 – octern

回答

1

如果这是可能的,但它也是最擅长的 底部包括这些页面,还是应该库是在底部,的onLoad在顶部, 准备在底部,或任何其他特定加载时间位置 优化?

或者将所有JS包装在文档就绪回调函数中,或者只是将标记放在底部。否则,您将依赖延迟或异步标记属性来阻止页面加载,并且这两个属性在整个板上都不受支持。

关于JS包括优化:

虽然你正在思考如何重用代码为JS包括一件好事,它是一个很好的第一步,管理它们在资产文件,为你”重新做上面。

但是,在php性能方面存在缺陷,因为您需要处理的代码数量增加才能呈现页面。

这就是为什么一些开发人员选择使用客户端资产管理器,如require.js等。

+0

你可以给出更多的例子/详细说明“额外的东西”,它是什么或包含? –

+0

我更新了我的陈述。我的意思是,如果你有一个面向对象的资产管理解决方案,它在一组特定的控制器中携带一个包含文件的持久数组(假设在示例中使用了MVC),那么执行所有这些操作只需要另一个不必要的处理在php开始渲染页面之前一步,相比之下,如果您使用客户端而不是异步资产管理解决方案,您会体验到快速的加载时间。 – Kristian

0

onLoad和ready几乎是相同的功能,你应该在页面底部包含所有的javascript,因为它会在页面加载后加载javascript。

+0

不完全正确:http://stackoverflow.com/questions/3698200/window-onload-vs-document-ready 而脚本不应该在代码中。 –

+0

回答安置,但它是一个很好的做法将JS放在一个PHP包括? –

+0

好吧,我不会那样做,因为它似乎有点矫枉过正。包括用于PHP内容。 – Memoria

0

我个人不会建议把JavaScript放在最下面,即使你经常听到这个建议。它主要负责加载性能和脚本阻塞,这与今天的现代浏览器不再是一个大问题。

为了组织起见,我喜欢将自己的脚本放在首位,但最后还是归结为您的个人喜好。即使雅虎recommends把脚本放在底部,所以它不会是错的。

当使用jQuery(尽快启动,因为DOM树已完全解析并且BEFORE图像完全加载)并且在加载jQuery本身之后放置init代码(无论您决定放置它)时采取$(document.ready

除此之外,您对网页的请求 - 响应解剖结构的基本理解是正确的;)。

+0

一个现代的浏览器仍然显示加载正常脚本标记的阻塞行为。他们可以做的是使用defer属性或async属性,但不支持所有浏览器。将脚本标记放置在页面底部相当于将代码包装在doc准备好的回调中(同样,docready wrapppage会导致变量封装,因此需要增加可怕的全局变量的使用),并且不会导致页面呈现中可见的缓慢的dom元素。这就是为什么很多人(和雅虎)这样做。 – Kristian