Случалось ли с вами когда-нибудь, что вы создаете новую функцию на своем веб-сайте или в веб-приложении, развертываете ее, но кажется, что там не весь код?

Я присоединился к Октус 2 месяца назад, и с тех пор мы очень много работали над исправлениями ошибок и новыми функциями для клиентов в рекрутинговом бизнесе.

Однако на прошлой неделе произошло странное. Мы развернули нашу последнюю версию. Все это было тщательно протестировано в нашем офисе, каждая часть как минимум тремя людьми на трех разных компьютерах. У него был последний номер версии (мы используем управление версиями для нашего css и javascript, как, я уверен, и вы). И все же наши клиенты могли видеть только части новой функции, а старые вели себя странно.

Я не мастер во фронтенде, поэтому не знаю, есть ли для этого официальный термин, но я называю это кодом-призраком. Призрачный код — это когда что-то ведет себя странно из-за какого-то кода, которого не было до этого, его не было в последнем развертывании, он находится где-то посередине и сходит с ума.

Почему это происходит?

Из моего исследования (не слишком долгого) следует, что сочетание несовершенной системы управления версиями и того, что браузеры очень упрямы в кэшировании файлов javascript, особенно.

Что мы сделали?

Мы сделали 2 вещи. Первое, реальное решение, а второе, для нас самих в Октусе, так как мы очень сильно зависим от локального хранилища:

location.reload(true);
// Волшебство заключается в том, чтобы установить для reload() значение true.
localStorage.clear();
// И очистка локального хранилища, поскольку мы сильно от него зависим, и это многое меняет.

Хитрость заключается в том, чтобы установить для reload() значение true. По умолчанию это false, и это означает, что он перезагрузит кэшированные файлы, если это возможно. Установив значение true, он будет полностью запрашивать ресурсы с сервера, а не кешированные. Это будет немного медленнее, но без призрачного кода ;-).

Я надеюсь, что это поможет, и скоро увидимся снова. И если вы знаете какие-либо другие решения, пожалуйста, поделитесь :-D.