这是一个优化吗?

8

Does going from

<script type="text/javascript" src="jquery.js"></script>

to

<script type="text/javascript">
  <?php echo file_get_contents('jquery.js'); ?>
</script>

真的可以加快速度吗?

我认为可以,因为 PHP 可以比客户端浏览器更快地获取和嵌入文件内容,因为 PHP 不需要通过网络进行访问。

传统方法的主要区别是可以缓存吗?


2
那会影响缓存。 - GWW
2
@GWW请将“may”替换为“will”。 :) - nickf
2
更快的方法是:<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> ;-) - T.J. Crowder
@TJ 如果你关心速度的话,就不应该使用 /1/;因为它的缓存时间很短。 - Yahel
@yahelc,稳定性更令人担忧... - nickf
@nickf 你的意思是允许 Google 在没有经过你验证新版本不会破坏你的代码的情况下更改版本?是的,这是一个更大的问题。 - Yahel
8个回答

11

第一次加载时可能会更快,但在每次后续的加载中,它会变得明显较慢。在第一个示例中,客户端浏览器可以缓存结果。而在第二个示例中则无法进行缓存。


4
如果您的客户只需要一个网站,那么是的,这样做只会有一个HTTP请求而不是两个。
如果您要为多个链接到相同javascript源文件的站点提供服务,则会复制所有这些冗余数据,并且不允许客户端缓存该文件。

2

在这两种情况下,您都需要将字节传递给浏览器。唯一的区别是,在后一种情况下,您可以节省一个HTTP请求。

同时,确保使用 CDATA htmlspecialchars 来转义JavaScript。

如果您将JS库包含在HTML页面中,则无法由浏览器缓存。通常最好将JS与正常HTML代码分开,因为浏览器可以缓存它,不需要在后续请求中获取它。

简而言之,这是一种优化方法,只有用户首次调用页面且未在其他页面上使用jQuery时才可行。


或者,您可能希望从 google apis 使用jquery-这样它们通常已经存在于浏览器的缓存中,因此根本不需要传输该库。


1
在HTML 4.01中,元素类型SCRIPT已经声明了内容类型CDATA。 - Kerrek SB
1
htmlspecialchars会非常糟糕地干扰如if(a < b)这样的比较,将它们变成语法错误。 - T.J. Crowder
我原本期望页面是XHTML格式的,而在XHTML中你必须进行转义。 - cweiske

2
它只为该页面执行此操作。所有后续使用相同库(从相同URL下载的jquery.js)的页面将受到影响,因为如果您包含对外部文件的引用,则必须在额外的连接中下载它(使用HTTP\1.1和管线技术相对便宜),但是——只要您的Web服务器提供有用的标头(远期Expires:-标头),浏览器就会缓存该下载,而使用“优化”时,它必须针对每个单独的内容页面进行检索。还请参阅此类页面:http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/(关键字是与那些远期到期日期相关的“revving”)。

2
第一个更好,因为浏览器可以缓存脚本。对于第二个版本,即使脚本没有改变,每次加载页面时都必须重新下载脚本。仅当浏览器无法缓存脚本时,第二个版本才是一个改进。

0

这取决于有多少文件使用相同的文件。然而,在大多数情况下,这比你第一段代码要慢,主要是因为jquery.js可以被缓存。


0

是的,这最初将是一种性能优化,关于使用的HTTP请求数量来服务页面 - 每个页面加载时您的页面会变得稍微大一些,因为jquery.js在第一次下载后将被缓存在浏览器中。


0

如果您的页面是静态的,那么它确实会这样做。
但是,如果它不是静态的,您的浏览器将在每次下载页面时下载jquery,即使jquery没有更改但仍然被包含。如果您使用src="jquery.js"并且页面发生更改,则浏览器将从缓存中加载jquery而不是再次下载它,因此使用src="jquery.js"实际上更快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接