慎用 script 节点的 src 属性来传递参数

作者:xujiwei 来源:Architecting Life 时间:2009-11-18 12:59:00 

在有些使用 javascript 来渲染数据的时候,为了能动态获取不同的数据,并且保持 javascript 代码的可扩展性,会将 javascript 代码中获取数据的部分需要的参数提取出来,做为参数放在 script 节点的外部。

一般来说,传递参数到 javascript 文件内部的方法有两种,一种是将参数写在一个 script 节点中,写成全局变量的方式的传递给紧接着这个 script 节点的外部 javascript 中,Google Analytics 就是使用这样的方式:

<script type="text/javascript">
var p1 = "v1", p2 = "v2";
</script>
<script type="text/javascript" src="foo.js"></script>

另外一种是将参数直接写在 script 节点的 src 属性中,相当于一个页面的查询字符串一样:

<script type="text/javascript" src="foo.js?p1=v1&p2=v2"></script>

不过,使用 script 节点的 src 属性来传递参数需要注意一个很重要的问题,那就是动态变化的 src 属性会导致缓存失效

现在,为了网站性能的需要,一般都会将 javascript 文件放在独立的服务器上,并设置一个较长的过期时间,这样客户端只会在第一次访问网站时需要去下载这个 javascript 文件。但是,如果使用 src 来传递参数,就可能会使这种缓存策略失效。特别是 src 中存在动态参数的情况,例如统计脚本中如果有一个 ip 参数,那么访客每次连上线时,可能 ip 都会不同,就会导致 javascript 缓存失效了。

解决这个问题的方法也很简单,简单地的将 src 属性中的参数放到 script 节点的一个自定义属性中就可以了,例如 data-args,而 src 属性只需要保留一个时间戳就可以了。因为使用 src 属性来传递参数本来就需要定位 script 节点,所以改由 data-args 自定义属性来传递参数并不会增加额外的代码。只不过页面会通不过 w3c 的验证罢了 :)

<script type="text/javascript" src="foo.js" data-args="p1=v1&p2=v2"></script>

再次提醒,慎用 script 节点的 src 属性来传递参数 :)

标签:JavaScript,cache,参数,缓存
0
投稿

猜你喜欢

  • SQL Server中将数据导出为XML和Json方法分享

    2024-01-22 19:04:22
  • go-micro微服务domain层开发示例详解

    2024-04-26 17:25:04
  • 使用python实现希尔、计数、基数基础排序的代码

    2023-07-12 09:02:24
  • Python实现Harbor私有镜像仓库垃圾自动化清理详情

    2021-02-08 17:09:46
  • python单元测试框架pytest介绍

    2021-06-11 15:28:55
  • JAVA正则表达式校验qq号码的方法

    2023-08-09 02:54:25
  • bootstrapValidator.min.js表单验证插件

    2024-04-10 13:53:46
  • 设为首页与加入收藏的JS代码(多浏览器支持)

    2024-04-10 13:57:11
  • Python实现打印九九乘法表的不同方法总结

    2023-05-25 01:05:19
  • 跟老齐学Python之关于类的初步认识

    2022-11-04 15:49:36
  • CSS实现完美垂直居中

    2007-09-22 09:29:00
  • golang与pgsql交互的实现

    2024-05-25 15:11:52
  • selenium+python截图不成功的解决方法

    2021-06-02 23:25:06
  • 我的javascript小扎

    2008-08-12 13:04:00
  • 利用python Pandas实现批量拆分Excel与合并Excel

    2023-07-02 19:08:23
  • sql Set IDENTITY_INSERT的用法

    2024-01-14 14:27:47
  • python中requests和https使用简单示例

    2021-03-16 16:14:35
  • Python实现将绝对URL替换成相对URL的方法

    2023-08-28 13:40:08
  • 我所钟爱的HTML5资源

    2010-07-23 09:25:00
  • Tensorflow训练模型越来越慢的2种解决方案

    2021-06-04 20:55:53
  • asp之家 网络编程 m.aspxhome.com