Изменил js, изменения не применились на сайте

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

Изменил js, изменения не применились на сайте

Сообщение Gyry »

Добрый день, я к сайту подключил js(он работает всё хорошо), и проблема в том, что я внёс изменение в js, но мой сайт работает по старой версии js. Есть предположение, что необходимо сбросить кеш, но у меня ни чего не получилось :(
Помогите советом или кодом
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Изменил js, изменения не применились на сайте

Сообщение rugabarbo »

https://ruhighload.com/post/%D0%9A%D1%8 ... he-control

Секция "Изменяемые файлы" в самом конце. Но лучше прочитать полностью.
Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

Re: Изменил js, изменения не применились на сайте

Сообщение Gyry »

Спасибо, решил проблему, у меня файлик сохранился в assets(скорей всего это кеш), и я с тупую все удалил от туда
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Изменил js, изменения не применились на сайте

Сообщение slo_nik »

Gyry писал(а): 2017.12.22, 12:51 Спасибо, решил проблему, у меня файлик сохранился в assets(скорей всего это кеш), и я с тупую все удалил от туда
В файле конфигурации, в секции "assetsManager" добавьте два параметра.

Код: Выделить всё

   'components' => [
       'assetManager' => [
           'linkAssets' => true,
           'appendTimestamp' => true
       ],
   ]
Первый параметр не даст дублировать файлы в web/assets и тем самым увеличивать размер проекта, а второй будет добавлять версию к используемым файлам.
Вот так

Код: Выделить всё

http://site.ru/js/js.cookie.js?v=1512167111
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Изменил js, изменения не применились на сайте

Сообщение rugabarbo »

slo_nik писал(а): 2017.12.22, 13:37а второй будет добавлять версию к используемым файлам.
Вот так

Код: Выделить всё

http://site.ru/js/js.cookie.js?v=1512167111
Этот параметр следует использовать только для отладки. На боевом сервере ему не место, потому что из-за него клиенты будут тянуть статику с боевого сервера при каждом запросе.

UPD

Здесь я ошибся, читаем тред ниже.
Последний раз редактировалось rugabarbo 2017.12.22, 14:12, всего редактировалось 1 раз.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Изменил js, изменения не применились на сайте

Сообщение urichalex »

slo_nik писал(а): 2017.12.22, 13:37 Первый параметр не даст дублировать файлы в web/assets и тем самым увеличивать размер проекта
Первый параметр вместо копирования ресурсов в папку assets, создает симлинки на них и, наоборот, уменьшает размер проекта
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Изменил js, изменения не применились на сайте

Сообщение urichalex »

rugabarbo писал(а): 2017.12.22, 13:43
slo_nik писал(а): 2017.12.22, 13:37а второй будет добавлять версию к используемым файлам.
Вот так

Код: Выделить всё

http://site.ru/js/js.cookie.js?v=1512167111
Этот параметр следует использовать только для отладки. На боевом сервере ему не место, потому что из-за него клиенты будут тянуть статику с боевого сервера при каждом запросе.
Разве? Указывается время последнего изменения файла для того, чтобы браузер кэшировал файл
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Изменил js, изменения не применились на сайте

Сообщение rugabarbo »

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
Этот параметр следует использовать только для отладки. На боевом сервере ему не место, потому что из-за него клиенты будут тянуть статику с боевого сервера при каждом запросе.
Разве? Указывается время последнего изменения файла для того, чтобы браузер кэшировал файл
Согласен, я ошибся. Запутался. Я хотел сказать, что при использовании этого параметра на боевом сервере, клиенты будут инициировать проверку последнего изменения статических файлов при каждом запросе.

Только время указывается не "для того, чтобы браузер кэшировал файл", а для того, чтобы он обновлял его, если он изменился. То есть, это не для кэширования, а от кэширования (:
zxczxc12
Сообщения: 161
Зарегистрирован: 2013.01.24, 21:16

Re: Изменил js, изменения не применились на сайте

Сообщение zxczxc12 »

вот моя конфигурация с настроенным ассетом и с минификацией js и css
на 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'],
                ]
            ],
        ],

frontend/config/web.php

Код: Выделить всё

'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
            ]
        ],
      .....
]
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Изменил js, изменения не применились на сайте

Сообщение urichalex »

rugabarbo писал(а): 2017.12.22, 14:11
urichalex писал(а): 2017.12.22, 14:06
rugabarbo писал(а): 2017.12.22, 13:43

Этот параметр следует использовать только для отладки. На боевом сервере ему не место, потому что из-за него клиенты будут тянуть статику с боевого сервера при каждом запросе.
Разве? Указывается время последнего изменения файла для того, чтобы браузер кэшировал файл
Согласен, я ошибся. Запутался. Я хотел сказать, что при использовании этого параметра на боевом сервере, клиенты будут инициировать проверку последнего изменения статических файлов при каждом запросе.

Только время указывается не "для того, чтобы браузер кэшировал файл", а для того, чтобы он обновлял его, если он изменился. То есть, это не для кэширования, а от кэширования (:
Если есть переданный параметр у скрипта, браузер смотрит только его и не лезет к самому скрипту. Он сравнивает переданный параметр тот, который сохранил у себя с тем, что отдает сервер и, если эти параметры разные, только в том случае грузит скрипт заново. Ну и если еще до этого он этого параметра "не видел"
Этот параметр может быть не только временем изменения, а вообще любой строкой
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Изменил js, изменения не применились на сайте

Сообщение rugabarbo »

urichalex писал(а): 2017.12.22, 14:22
rugabarbo писал(а): 2017.12.22, 14:11
urichalex писал(а): 2017.12.22, 14:06

Разве? Указывается время последнего изменения файла для того, чтобы браузер кэшировал файл
Согласен, я ошибся. Запутался. Я хотел сказать, что при использовании этого параметра на боевом сервере, клиенты будут инициировать проверку последнего изменения статических файлов при каждом запросе.

Только время указывается не "для того, чтобы браузер кэшировал файл", а для того, чтобы он обновлял его, если он изменился. То есть, это не для кэширования, а от кэширования (:
Если есть переданный параметр у скрипта, браузер смотрит только его и не лезет к самому скрипту. Он сравнивает переданный параметр тот, который сохранил у себя с тем, что отдает сервер и, если эти параметры разные, только в том случае грузит скрипт заново. Ну и если еще до этого он этого параметра "не видел"
Этот параметр может быть не только временем изменения, а вообще любой строкой
В случае appendTimestamp может быть любой строкой? Мы ведь именно про этот параметр говорим.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Изменил js, изменения не применились на сайте

Сообщение urichalex »

rugabarbo писал(а): 2017.12.22, 14:25
urichalex писал(а): 2017.12.22, 14:22
rugabarbo писал(а): 2017.12.22, 14:11

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

Только время указывается не "для того, чтобы браузер кэшировал файл", а для того, чтобы он обновлял его, если он изменился. То есть, это не для кэширования, а от кэширования (:
Если есть переданный параметр у скрипта, браузер смотрит только его и не лезет к самому скрипту. Он сравнивает переданный параметр тот, который сохранил у себя с тем, что отдает сервер и, если эти параметры разные, только в том случае грузит скрипт заново. Ну и если еще до этого он этого параметра "не видел"
Этот параметр может быть не только временем изменения, а вообще любой строкой
В случае appendTimestamp может быть любой строкой? Мы ведь именно про этот параметр говорим.
Само appendTimestamp может быть любой строкой
myJsFile.js?trololo=tralala
Последний раз редактировалось urichalex 2017.12.22, 14:30, всего редактировалось 1 раз.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Изменил js, изменения не применились на сайте

Сообщение urichalex »

Или вообще
myJsFile.js?trololo
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Изменил js, изменения не применились на сайте

Сообщение slo_nik »

urichalex писал(а): 2017.12.22, 14:05
slo_nik писал(а): 2017.12.22, 13:37 Первый параметр не даст дублировать файлы в web/assets и тем самым увеличивать размер проекта
Первый параметр вместо копирования ресурсов в папку assets, создает симлинки на них и, наоборот, уменьшает размер проекта
Ну так и написал, что не даст увеличивать размер проекта.
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Изменил js, изменения не применились на сайте

Сообщение rugabarbo »

urichalex писал(а): 2017.12.22, 14:30 Или вообще
myJsFile.js?trololo
Не могли бы показать, как заставить Yii2 при использовании параметра appendTimestamp подставлять любую строку?
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Изменил js, изменения не применились на сайте

Сообщение rugabarbo »

rugabarbo писал(а): 2017.12.22, 14:51
urichalex писал(а): 2017.12.22, 14:30 Или вообще
myJsFile.js?trololo
Не могли бы показать, как заставить Yii2 при использовании параметра appendTimestamp подставлять любую строку?
Отвечу сам на свой вопрос. Устал ждать.
При использовании параметра appendTimestamp добавляется время последнего изменения файла (именно время, а не строка): https://github.com/yiisoft/yii2/blob/ma ... r.php#L322 – это поведение зашито в код фреймворка.

Положим, что:
* мы включили этот параметр
* на странице подключается 10 CSS и 5 JS-файлов

Итого, во время каждого запроса страницы будет происходить 15 вызовов функции filemtime() для всех этих файлов на стороне сервера. Соответственно, это может обернуться потерями, например, полутора секунд, потому что функция не самая быстрая.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Изменил js, изменения не применились на сайте

Сообщение ElisDN »

rugabarbo писал(а): 2017.12.22, 14:51 Не могли бы показать, как заставить Yii2 при использовании параметра appendTimestamp подставлять любую строку?
Переопределить метод getAssetUrl().
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Изменил js, изменения не применились на сайте

Сообщение rugabarbo »

ElisDN писал(а): 2017.12.22, 17:12
rugabarbo писал(а): 2017.12.22, 14:51 Не могли бы показать, как заставить Yii2 при использовании параметра appendTimestamp подставлять любую строку?
Переопределить метод getAssetUrl().
Дим, речь о том, что на уровне конфы appendTimestamp добавляет именно timestamp.

Во-вторых, переопределять getAssetUrl() таким образом, чтобы appendTimestamp добавлял некую строку вместо timestamp – неконсистентно. Имея дело с параметром appendTimestamp, я ожидаю-таки подстановки времени, а не кастомных строк. И именно так оно и работает.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Изменил js, изменения не применились на сайте

Сообщение ElisDN »

rugabarbo писал(а): 2017.12.22, 17:18 Имея дело с параметром appendTimestamp, я ожидаю-таки подстановки времени, а не кастомных строк. И именно так оно и работает.
Добавить параметр appendHash и if ($this->$appendHash) { ... }.
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Изменил js, изменения не применились на сайте

Сообщение rugabarbo »

ElisDN писал(а): 2017.12.22, 20:08
rugabarbo писал(а): 2017.12.22, 17:18 Имея дело с параметром appendTimestamp, я ожидаю-таки подстановки времени, а не кастомных строк. И именно так оно и работает.
Добавить параметр appendHash и if ($this->$appendHash) { ... }.
Но это уже совсем другая история. К нашему диалогу не относится...
Закрыто