为什么不利用浏览器缓存不适用于Javascript?

时间:2016-06-02 11:32:41

标签: javascript caching pagespeed google-pagespeed

通过Google页面速​​度测试运行我的网站时,它说我需要“利用浏览器缓存 在HTTP标头中为静态资源设置到期日期或最长期限,指示浏览器从本地磁盘而不是通过网络加载以前下载的资源。“

然后它列出了我的内部Javascript文件,为什么以下不起作用并修复此问题?

这是htaccess文件的外观:

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

<FilesMatch "\\.(js|css|html|htm|php|xml)$">
SetOutputFilter DEFLATE
</FilesMatch>

<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl|jpg|png|gif)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>

谢谢

3 个答案:

答案 0 :(得分:0)

Javascript的官方mime类型为application/javascript,请尝试此操作。

来源http://www.rfc-editor.org/rfc/rfc4329.txt

x-代表“实验性”,不再与Javascripts一起使用。

所有这些组合都已弃用,已过时或过时:

text/x-javascript
text/javascript
application/x-javascript
application/ecmascript

您的配置中有更多错误的mime类型:

错误:image/x-icon 右:image/vnd.microsoft.icon

来源:http://www.iana.org/assignments/media-types/image/vnd.microsoft.icon

错误:application/x-pdf 右:application/pdf

来源:https://tools.ietf.org/html/rfc3778

答案 1 :(得分:0)

您已指定text / x-javascript类型的文件应该是可缓存的,但您是否告诉网络服务器如何识别此类文件?正如DanFromGermany所说,mimetype确实应该是application/javascript但是在你的网络服务器中,这只是一个随意的标签。您的网络服务器可能已经配置为将以.js结尾的文件识别为javascript,在这种情况下,只需更改mod_expires块中的相应行即可。您可以在firebug,iehttpheaders中看到webserver返回的mimetype,使用wireshark监视连接或使用命令行中的wget / curl。

如果您的网络服务器返回application/javascripttext/x-javascript以外的其他内容,请检查包含您的apache配置的目录中mime.types文件中的条目。

答案 2 :(得分:0)

检查您的托管配置。 我正在使用Cpanel的“SuperCacher服务”: 静态缓存 动态缓存 内存缓存

他们覆盖了我的.htaccess设置并导致了这个问题。 一旦我禁用它们,问题就会消失。