我所追求的是一个PHP脚本,它将提供存储在不同域上的javascript文件的本地副本,例如:用于跟踪目的的JS文件,例如Google Analytics或我的案例中的Wordpress Stats。
目的是在我自己的内容中添加如下:
mysite.com/somepath/wpstats.js.php?w=201145
(其中“w = year-week_number”的使用方式与wordpress.com相同。原始统计JS文件的缓存到期时间为一年 - 因此JS文件永远不会更改每周一次)
在我的wpstats.js.php
中,当w = xx更改时,我想从wordpress.com下载正确的文件,否则我想从本地保存的副本中返回它。
我可以使用一个名为“w_current”的内部变量来实现它,这样当新访问者第二周w != w_current
进入网站时,它将触发新的提取。问题是:如何防止两个网站访问者在第二周第一次同时加载网站时可能出现的竞争条件/并行性问题[1]?
[1]两个apache-processes评估w != w_current
并开始两次下载(可能)新版本的wpstats.js文件,并且都尝试将其写入本地副本(例如{{1} wpstats.js.php(在正常情况下,本地副本已经存在)将包括:
own_wpstats.js
这样做的主要原因(性能可能是另一个)是由于Wordpress.com Stats从第三方(quantserve.com)注入(通过DOM)一个额外的JS跟踪文件。在我当地保存的“WP JS文件”中,我将确保将quantserve.com的内容排除在外,但这是一个单独的编程挑战,而不是我在这里要问的问题。搜索“quantserve.com跟踪cookie”会产生许多令人不安的结果。
答案 0 :(得分:0)
我不担心太多关于这样的竞争条件。 “最坏的情况”是你下载文件两次。
但是,如果你要在数据库中对这些文件进行任何跟踪,那么防止双重下载就很简单了。在您开始下载之前,请检查数据库是否需要刷新文件,将刷新记录到数据库,然后执行下载。为文件提供唯一的主键(site_url + file_name),更新前的第二次检查将失败。