事件起因:
官网因为图片太多,每次打开页面加载都很慢,非常影响用户体验,所以想将页面中的静态图片从另一个网址请求。现在官网的地址是www.xxx.com
。那么总监想让图片从image.xxx.com
请求出来。review了下代码,发现,之前官网的静态展示图片都是在css文件中作为元素背景引入的。额。。。这个。。。好吧
background: url("/index/image") no-repeat;
类似这种。
如果一个一个改工作量很大,而且官网是有不同http协议的(这个动态协议的改变,交给后台了)。
解决问题
在html页面引入css文件的时候,引入地址直接用新地址就好了。
原来的引入方式:
<link rel="stylesheet" type="text/css" href="/index/index.css"/>
因为css文件中图片指定的都是绝对路径,所以在引入css文件的时候
<link rel="stylesheet" type="text/css" href="http://image.xxx.com/index/index.css"/>
通过这个域名引入css文件之后,那么css文件中的图片,就是通过image.xxx.com域名引入的了
如果需要其他域名入口引用的话就改这个引入css文件的地址就OK了。
下面说说协议不一样,造成请求头地址也不一样。
<link rel="stylesheet" type="text/css" href="{$Think.IMAGE_PATH}/index/index.css"/>
意思就是这个地址是后台生成并返回给我的,这样就很方便了。
自说自话
这个解决方法也是无意中发现的。之前用过js正则匹配替换的,但是各种水土不服(正则替换完的图片路径之后只能写成内联样式,所以对于有交互的地方,这个权重太高,那么造成交互失效)。
开始没有朝着这个方向想是因为一直觉得css文件中默认的地址是根据网站url来生成的。现在才发现,css文件中的图片地址是根据css文件引入的域名生成的。那么现在就给自己做个记录吧。