Удаление ?ver= из wp_register_script

17 мая 2012 г., 19:10:45
Просмотры: 6.76K
Голосов: 8

Я получаю предупреждения в тесте скорости Google из-за query-строк в моих скриптах. Пытаюсь убрать их, передавая false в качестве аргумента для этого параметра. Однако это не дает эффекта:

wp_register_script('myscript', get_bloginfo('template_directory').'/scripts.myversionnumber.js',false,false,true);
wp_enqueue_script('myscript');

Примечание: часть "myversionnumber" в имени файла js - это мой способ контроля кэширования/версионирования, в отличие от подхода с ?ver=, который, по данным теста Google Pagespeed, создает проблемы для некоторых прокси-серверов:

Удалите query-строки из статических ресурсов Включение публичного кэширования в HTTP-заголовках для статических ресурсов позволяет браузеру загружать ресурсы с ближайшего прокси-сервера, а не с удаленного сервера-источника. Подробнее

Рекомендации для этой страницы

Ресурсы с "?" в URL не кэшируются некоторыми прокси-серверами. Удалите query-строку и закодируйте параметры в URL для следующих ресурсов:

4
Комментарии

Интересный вопрос, никогда не знал, что строки запроса могут влиять на скорость загрузки страницы. Хотя у меня нет решения, позвольте прокомментировать установку параметра в "false": Насколько я знаю, вы либо указываете номер версии, либо используется текущая версия WordPress по умолчанию.

Johannes Pille Johannes Pille
17 мая 2012 г. 19:15:16

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

Stephen Harris Stephen Harris
17 мая 2012 г. 21:37:17

@Stephen, именно так и задумано. Однако, по-видимому, некоторые прокси-серверы кеширования не кешируют URL ресурсов с параметрами строки запроса. Поэтому я выбираю кодирование параметров в имени файла. Тот же эффект, меньше накладных расходов.

Scott B Scott B
18 мая 2012 г. 16:15:43

Привет, Scott B. У меня такая же проблема. После запуска теста на gtmetrix я получаю ошибки запроса. Сработало ли решение, предложенное @SickHippie, у тебя? Безопасно ли его использовать?

kat_indo kat_indo
3 нояб. 2013 г. 22:16:02
Все ответы на вопрос 3
0
11

Думаю, вам нужно передать NULL в качестве 4-го параметра.

wp_register_script(
    'myscript',
    get_bloginfo('template_directory').'/scripts.myversionnumber.js',
    false,
    NULL,
    true);
wp_enqueue_script('myscript');
17 мая 2012 г. 19:29:43
0

Вы можете передать null в качестве значения версии для wp_register_script или wp_enqueue_script, и это уберет строку запроса.

<?php
wp_enqueue_script(
   'myscript',
   '/path/to/script.js',
   array(),
   null
);
17 мая 2012 г. 19:31:55
0

Предисловие

Я решил эту задачу совсем иначе, чем SickHippie и chrisguitarguy, и думаю, что это не тот способ, которым предполагалось её решать, но у меня это отлично работает.

Код...

Я поместил этот фрагмент кода в конец файла functions.php моей темы:

function remove_cssjs_querystring( $src ) {
  if( strpos( $src, '?rev=' ) ) // скопируйте/вставьте эту строку и следующую, чтобы убрать то, что вам нужно из конца ваших css/js
    $src = remove_query_arg( 'rev', $src );
  if( strpos( $src, 'ver=' ) )
    $src = remove_query_arg( 'ver', $src );
  return $src;
}
add_filter( 'style_loader_src', 'remove_cssjs_querystring', 10, 2 );
add_filter( 'script_loader_src', 'remove_cssjs_querystring', 10, 2 );

Откуда пришла идея...

Я искал решение в Google и нашел эту статью, но у меня оставалась проблема с css/js: в этот момент мой код всё ещё содержал (кое-где) в конце что-то вроде .../some-stylesheet.css?rev=..., и я подумал немного расширить фрагмент кода, чтобы включить всё, что могло быть после .css.

19 сент. 2014 г. 02:51:42