Изменил js, изменения не применились на сайте
Изменил js, изменения не применились на сайте
Добрый день, я к сайту подключил js(он работает всё хорошо), и проблема в том, что я внёс изменение в js, но мой сайт работает по старой версии js. Есть предположение, что необходимо сбросить кеш, но у меня ни чего не получилось
Помогите советом или кодом
Помогите советом или кодом
Re: Изменил js, изменения не применились на сайте
https://ruhighload.com/post/%D0%9A%D1%8 ... he-control
Секция "Изменяемые файлы" в самом конце. Но лучше прочитать полностью.
Секция "Изменяемые файлы" в самом конце. Но лучше прочитать полностью.
Re: Изменил js, изменения не применились на сайте
Спасибо, решил проблему, у меня файлик сохранился в assets(скорей всего это кеш), и я с тупую все удалил от туда
Re: Изменил js, изменения не применились на сайте
В файле конфигурации, в секции "assetsManager" добавьте два параметра.
Код: Выделить всё
'components' => [
'assetManager' => [
'linkAssets' => true,
'appendTimestamp' => true
],
]
Вот так
Код: Выделить всё
http://site.ru/js/js.cookie.js?v=1512167111
Re: Изменил js, изменения не применились на сайте
Этот параметр следует использовать только для отладки. На боевом сервере ему не место, потому что из-за него клиенты будут тянуть статику с боевого сервера при каждом запросе.slo_nik писал(а): ↑2017.12.22, 13:37а второй будет добавлять версию к используемым файлам.
Вот такКод: Выделить всё
http://site.ru/js/js.cookie.js?v=1512167111
UPD
Здесь я ошибся, читаем тред ниже.
Последний раз редактировалось rugabarbo 2017.12.22, 14:12, всего редактировалось 1 раз.
Re: Изменил js, изменения не применились на сайте
Разве? Указывается время последнего изменения файла для того, чтобы браузер кэшировал файлrugabarbo писал(а): ↑2017.12.22, 13:43Этот параметр следует использовать только для отладки. На боевом сервере ему не место, потому что из-за него клиенты будут тянуть статику с боевого сервера при каждом запросе.slo_nik писал(а): ↑2017.12.22, 13:37а второй будет добавлять версию к используемым файлам.
Вот такКод: Выделить всё
http://site.ru/js/js.cookie.js?v=1512167111
Re: Изменил js, изменения не применились на сайте
Согласен, я ошибся. Запутался. Я хотел сказать, что при использовании этого параметра на боевом сервере, клиенты будут инициировать проверку последнего изменения статических файлов при каждом запросе.urichalex писал(а): ↑2017.12.22, 14:06Разве? Указывается время последнего изменения файла для того, чтобы браузер кэшировал файлrugabarbo писал(а): ↑2017.12.22, 13:43Этот параметр следует использовать только для отладки. На боевом сервере ему не место, потому что из-за него клиенты будут тянуть статику с боевого сервера при каждом запросе.slo_nik писал(а): ↑2017.12.22, 13:37а второй будет добавлять версию к используемым файлам.
Вот такКод: Выделить всё
http://site.ru/js/js.cookie.js?v=1512167111
Только время указывается не "для того, чтобы браузер кэшировал файл", а для того, чтобы он обновлял его, если он изменился. То есть, это не для кэширования, а от кэширования (:
Re: Изменил js, изменения не применились на сайте
вот моя конфигурация с настроенным ассетом и с минификацией js и css
на Linux-e vendor assets не копируется а делаются символьные ссылки , так намного быстрее
common/config/web.php
frontend/config/web.php
на Linux-e vendor assets не копируется а делаются символьные ссылки , так намного быстрее
common/config/web.php
Код: Выделить всё
'assetManager' => [
'class' => 'yii\web\AssetManager',
'forceCopy' => YII_ENV == 'dev' ? true : false,
'linkAssets' => YII_ENV == 'prod' ? true : false,
'appendTimestamp' => false, //YII_ENV == 'prod' ? true : false,
'bundles' => [
/*
'yii\web\JqueryAsset' => [
'sourcePath' => '@bower/jquery/dist',
'js' => [
'jquery.min.js',
],
'jsOptions' => [
'position' => \yii\web\View::POS_HEAD
],
'depends' => [
'common\assets\Html5shiv',
]
],
*/
'yii\web\JqueryAsset' => [
'sourcePath' => '@common/components/js/jquery',
'js' => [
'jquery.min.js',
],
'jsOptions' => [
'position' => \yii\web\View::POS_HEAD
],
'depends' => [
'common\assets\Html5shiv',
]
],
'yii\bootstrap\BootstrapAsset' => [
'css' => [],
],
'yii\bootstrap\BootstrapPluginAsset' => [
'js' => ['js/bootstrap.min.js'],
]
],
],
Код: Выделить всё
'components' => [
.....
'view' => [
// Свой View для кастомного h1 и минификации
'class' => 'common\components\View',
'enableMinify' => !YII_DEBUG,
'concatCss' => true, // concatenate css
'minifyCss' => true, // minificate css
'concatJs' => true, // concatenate js
'minifyJs' => true,//!YII_DEBUG, // minificate js
'minifyOutput' => true, // minificate result html page
'webPath' => '@web', // path alias to web base
'basePath' => '@webroot', // path alias to web base
'minifyPath' => '@webroot/assets/minify', // path alias to save minify result
'jsPosition' => [
\yii\web\View::POS_END,
\yii\web\View::POS_HEAD,
\yii\web\View::POS_BEGIN
], // positions of js files to be minified
'forceCharset' => 'UTF-8', // charset forcibly assign, otherwise will use all of the files found charset
'expandImports' => true, // whether to change @import on content
'compressOptions' => ['extra' => true], // options for compress
'excludeFiles' => [
'no-responsive.css',
'responsive.css',
// 'jquery.js', // exclude this file from minification
// 'app-[^.].js', // you may use regexp
]
],
.....
]
Re: Изменил js, изменения не применились на сайте
Если есть переданный параметр у скрипта, браузер смотрит только его и не лезет к самому скрипту. Он сравнивает переданный параметр тот, который сохранил у себя с тем, что отдает сервер и, если эти параметры разные, только в том случае грузит скрипт заново. Ну и если еще до этого он этого параметра "не видел"rugabarbo писал(а): ↑2017.12.22, 14:11Согласен, я ошибся. Запутался. Я хотел сказать, что при использовании этого параметра на боевом сервере, клиенты будут инициировать проверку последнего изменения статических файлов при каждом запросе.
Только время указывается не "для того, чтобы браузер кэшировал файл", а для того, чтобы он обновлял его, если он изменился. То есть, это не для кэширования, а от кэширования (:
Этот параметр может быть не только временем изменения, а вообще любой строкой
Re: Изменил js, изменения не применились на сайте
В случае appendTimestamp может быть любой строкой? Мы ведь именно про этот параметр говорим.urichalex писал(а): ↑2017.12.22, 14:22Если есть переданный параметр у скрипта, браузер смотрит только его и не лезет к самому скрипту. Он сравнивает переданный параметр тот, который сохранил у себя с тем, что отдает сервер и, если эти параметры разные, только в том случае грузит скрипт заново. Ну и если еще до этого он этого параметра "не видел"rugabarbo писал(а): ↑2017.12.22, 14:11Согласен, я ошибся. Запутался. Я хотел сказать, что при использовании этого параметра на боевом сервере, клиенты будут инициировать проверку последнего изменения статических файлов при каждом запросе.
Только время указывается не "для того, чтобы браузер кэшировал файл", а для того, чтобы он обновлял его, если он изменился. То есть, это не для кэширования, а от кэширования (:
Этот параметр может быть не только временем изменения, а вообще любой строкой
Re: Изменил js, изменения не применились на сайте
Само appendTimestamp может быть любой строкойrugabarbo писал(а): ↑2017.12.22, 14:25В случае appendTimestamp может быть любой строкой? Мы ведь именно про этот параметр говорим.urichalex писал(а): ↑2017.12.22, 14:22Если есть переданный параметр у скрипта, браузер смотрит только его и не лезет к самому скрипту. Он сравнивает переданный параметр тот, который сохранил у себя с тем, что отдает сервер и, если эти параметры разные, только в том случае грузит скрипт заново. Ну и если еще до этого он этого параметра "не видел"rugabarbo писал(а): ↑2017.12.22, 14:11
Согласен, я ошибся. Запутался. Я хотел сказать, что при использовании этого параметра на боевом сервере, клиенты будут инициировать проверку последнего изменения статических файлов при каждом запросе.
Только время указывается не "для того, чтобы браузер кэшировал файл", а для того, чтобы он обновлял его, если он изменился. То есть, это не для кэширования, а от кэширования (:
Этот параметр может быть не только временем изменения, а вообще любой строкой
myJsFile.js?trololo=tralala
Последний раз редактировалось urichalex 2017.12.22, 14:30, всего редактировалось 1 раз.
Re: Изменил js, изменения не применились на сайте
Или вообще
myJsFile.js?trololo
myJsFile.js?trololo
Re: Изменил js, изменения не применились на сайте
Ну так и написал, что не даст увеличивать размер проекта.
Re: Изменил js, изменения не применились на сайте
Отвечу сам на свой вопрос. Устал ждать.
При использовании параметра appendTimestamp добавляется время последнего изменения файла (именно время, а не строка): https://github.com/yiisoft/yii2/blob/ma ... r.php#L322 – это поведение зашито в код фреймворка.
Положим, что:
* мы включили этот параметр
* на странице подключается 10 CSS и 5 JS-файлов
Итого, во время каждого запроса страницы будет происходить 15 вызовов функции filemtime() для всех этих файлов на стороне сервера. Соответственно, это может обернуться потерями, например, полутора секунд, потому что функция не самая быстрая.
Re: Изменил js, изменения не применились на сайте
Дим, речь о том, что на уровне конфы appendTimestamp добавляет именно timestamp.
Во-вторых, переопределять getAssetUrl() таким образом, чтобы appendTimestamp добавлял некую строку вместо timestamp – неконсистентно. Имея дело с параметром appendTimestamp, я ожидаю-таки подстановки времени, а не кастомных строк. И именно так оно и работает.
Re: Изменил js, изменения не применились на сайте
Но это уже совсем другая история. К нашему диалогу не относится...