Как сохранить и поддерживать локальную копию файла JavaScript с помощью PHP (с учетом параллелизма)? - PullRequest
2 голосов
/ 22 ноября 2011

Мне нужен 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 я хочу скачать правильный файл из wordpress.com, когда изменяется w = xx, в противном случае я хочу вернуть его из локально сохраненной копии.

Я могу реализовать его с помощью одной внутренней переменной с именем "w_current", чтобы при появлении нового посетителя на сайте вторую неделюw != w_current, и это вызовет новую выборку.Проблема заключается в следующем: как предотвратить проблемы с условиями гонки / параллелизма, которые могут возникнуть, когда два посетителя сайта одновременно загружают сайт в первый раз на второй неделе [1]?

[1]оба apache-процесса оценивают w != w_current и запускают две загрузки (потенциально) новой версии файла wpstats.js, и оба пытаются записать его в локальную копию (например, own_wpstats.js), которую wpstats.js.php (в обычном случае, когда локальная копия уже существует) будет включать:

if ($_GET["w"] == w_current) require("own_wpstats.js");

Основная причина для этого (производительность, возможно, другая) связана с тем, что Wordpress.com Stats внедряет (через DOM)дополнительный файл JS-трекинга от сторонней компании quantserve.com.В моем локальном «файле WP JS» я позабочусь о том, чтобы исключить эту функцию quantserve.com, но это отдельная проблема программирования, чем вопрос, который я пытаюсь здесь задать.Поиск "cookie для отслеживания quantserve.com" дает много неприятных результатов.

1 Ответ

0 голосов
/ 22 ноября 2011

Я бы не переживал СЛИШКОМ много о таком состоянии гонки.«В худшем случае» вы загружаете файл дважды.

Но если вы собираетесь ЛЮБОЕ отслеживать эти файлы в БД, тогда предотвращение двойной загрузки будет простым.Непосредственно перед началом загрузки, проверьте DB, если файл нуждается в обновлении, зарегистрируйте обновление в БД, и ТО сделайте загрузку.Присвойте файлу уникальный первичный ключ (site_url + file_name), и вторая проверка перед обновлением завершится неудачей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...