Википедия:Вики-конференция 2008/Результаты/Клиентские скрипты Википедии: повышение удобства и быстродействия

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Доклад участника X-romix на Вики-конференции 2008[править код]

Этот доклад посвящен персональным скриптам JavaScript, которые позволяют подключать к стандартному интерфейсу Википедии полезные дополнительные возможности. Подключение и написание персональных скриптов доступно всем участникам Википедии. Написанию скриптов посвящен проект Проект:Персональные скрипты, давним участником которого является Alex Smotrov. По ссылкам «интервики» с этого проекта доступен активный англоязычный раздел.

Поисковые возможности[править код]

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

Давайте рассмотрим, что эта возможность нам даёт.

  • Ссылки для поиска по различным проектам MediaWiki.
  • Дополнительно — поиск по БСЭ, Яндекс-словарям (slovari.yandex.ru), Google Scholar.
  • Англо-русский и русско-английский переводчик Google, словарь Lingvo.
  • Найденное открывается в новом окне (это поведение можно отключить).
  • Привычные кнопки «Перейти» и «Найти» продолжают работать без изменений.
  • На рисунке показана стандартная поисковая панель Википедии. Ниже неё я расположил ряд ссылок при помощи персонального скрипта. При нажатии на эти ссылки в браузере открывается дополнительное окно с поиском в Google по различным проектам Википедии. Штатные поисковые возможности (кнопки Перейти и Найти) при этом действуют (по совету Alex Smotrov) как и прежде, однако результат поиска открывается в новом окне (это поведение можно отключить).

    Удобство поиска[править код]

    Что это даёт пользователю скрипта? Лично мне это даёт большее удобство при написании статей, поиску ссылок «интервики» на разных языках, удобный поиск картинок или текстов художественных произведений. Дополнительно к поисковой форме я прикрепил поиск по БСЭ и Яндекс-Словарям, переводчик Google, словарь Lingvo. Удобно ли это? Да, несомненно. Использую ли я этот поиск постоянно при работе над статьями? Да, конечно.

    Повышение производительности и стабильности[править код]

    Ошибка серверов Викимедии

    Касаясь вопросов производительности: найденное в Google открывается быстрее, поскольку серверы Google имеют более высокую производительность и скорость отклика, по сравнению с серверами Википедии. Для проекта в целом такое «перекладывание» поисковых возможностей на внешние поисковики может дать существенную разгрузку по быстродействию, поскольку полнотекстовый поисковый индекс, как правило, отнимает значительные ресурсы любого сервера. Кроме того, в MySQL известны трудности с нестабильностью поддерживающих полнотекстовый поиск таблиц MyISAM (там нет транзакций, и поэтому требуется время от времени выполнять «починку» таблиц). Соответственно, собственные серверы смогут работать стабильнее при использовании внешних (специализированных) поисковых механизмов.

    Недостатком этого решения может быть задержка при индексировании свежих изменений (требуется, чтобы страницу проиндексировал поисковый робот Google, что может потребовать нескольких дней или даже недель). Однако, основной массив статей Википедии будет при этом проиндексирован в полном объеме и без затруднений.

    Поиск сразу по всем языковым разделам[править код]

    Несомненным достоинством может служить возможность делать поиск сразу по всем языковым проектам фонда. Например, запрос

    валенки site:wikipedia.org

    находит статьи в английском и других языковых разделах (но первой в результатах поиска оказывается русская статья). Чтобы выполнить поиск по конкретному языковому разделу, требуется вписать код раздела в строку поиска уже в результатах найденного вот так:

    valenki site:af.wikipedia.org

    В данном случае поиск будет произведен по африканскому разделу Википедии, в котором существует содержащее указанное слово статья af:Djed Moroz.

    Чтобы выполнить поиск по любому другому сайту, требуется изменить предложение site: в поисковой строке, а чтобы произвесьи поиск по всему интернету - стереть из строки поиска в Google его совсем.

    Установка[править код]

    Для установки скрипта требуется создать страницу с именем Участник:ВашеИмя/monobook.js (если в пользовательских настройках установлен интерфейс, отличный от штатного monobook, имя страницы соответственно потребуется изменить) и вписать в неё две указанные строки:

    //Скрипт дополняет форму поиска ссылками на поиск в гугле по различным вики-проектам.
    importScript('Участник:X-romix/wiki google.js');
    

    Образец такого файла доступен по ссылке Участник:X-romix/monobook.js. В этом файле содержатся ссылки на те скрипты, которые подключил к своему интерфейсу Википедии и использую я сам.

    Кеш браузера[править код]

    Поскольку скриптам установлен признак сохранения в кеше браузера, чтобы они всякий раз не загружались с сервера Википедии, для получения изменений требуется один раз перезагрузить страницу с обновлением кеша (нажать комбинацию клавиш Ctrl-F5 в Internet Explorer, Ctrl-Shift-R в Mozilla FireFox, или очистить кеш целиком в настройках браузера Opera).

    Удаление персонального скрипта[править код]

    Чтобы удалить установленный скрипт и вернуться к стандартному интерфейсу Википедии, соответственно, потребуется удалить эти две строчки из указанной страницы, и еще раз очистить кеш браузера.

    Дополнительно[править код]

    Скрипт и инструкцию по его подключению вы найдете по ссылке с моей страницы участника в Википедии http://ru.wikipedia.org/wiki/User:X-romix

    Аналогичные поисковые возможности могут быть задействованы (в случае написания соответствующего персонального скрипта) для других серверов, поддерживающих поиск по определенному сайту, например, Яндекс.

    В случае, если скрипт попадает в категорию гаджетов (см. Википедия:Гаджеты), его подключение возможно на странице личных настроек установкой соответствующих флажков и очисткой кеша браузера.

    Контроль пользовательского ввода[править код]

    Следующий раздел моего доклада посвящен контролю правильности пользовательского ввода в Википедии.

    Контроль правильности вики-разметки[править код]

    Различные сообщения при контроле пользовательского ввода.

    Одной из распространенных ошибок, которые допускают пользователи Википедии (и я лично) являются незакрытые теги вики-разметки, такие как тег ref для указания подстрочной ссылки. Я написал скрипт check tags.js, который позволяет контролировать неправильно введенные теги, и предупреждать пользователя, если информация, введенная в форму редактирования статьи, оказывается введенной с ошибкой.

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

    При отказе от сохранения пользователь может вернуться к редактированию статьи, и поправить ошибочный текст вики-разметки. Дополнительно (при помощи аналогичных скриптов) проверяются наличие подписи в обсуждениях, и описание сделанной правки.

    Контроль размера русскоязычного описания правки[править код]

    Показанный на этом рисунке скрипт контролирует размер описания правки. Не секрет, что русскоязычные описания могут быть обрезаны после сохранения правки, так как описание не помещается в поле базы данных Википедии. Это обрезание связано с кодированием русских букв в стандарте UTF-8: в этой кодировке одна русская буква занимает две позиции (два байта), тогда как латинские символы, пробелы и знаки препинания занимают только один байт. Общая длина поля ввода — 250 позиций (байтов). Соответственно, проконтролировать, а не окажется ли обрезанным поле ввода, позволяет пользовательский скрипт. Если поле описания правки оказывается переполненным русскими буквами или символами других национальных алфавитов, скрипт выводит заметную надпись красного цвета с сообщением, на сколько позиций был превышен размер описания.

    Аналогичный скрипт у одного из пользователей (Alex Smotrov) уже был, я из соображений удобства (чтобы скрипт никак себя не проявлял, если переполнения ещё нет) написал свою версию этого скрипта.

    Выводы[править код]

    Преимущества контроля правильности ввода:

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

    При помощи персональных скриптов можно производить самые различные проверки правильности. Поскольку в скриптах такого типа используется цепочка обработчиков, скрипты, выполняющие эти или подобные проверки, друг другу не мешают.

    Полезные возможности при редактировании статей[править код]

    Следующий раздел моего доклада посвящен не обязательным, но полезным возможностям, которые дают персональные скрипты.

    Таблификатор[править код]

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

    По аналогии я назвал свой скрипт для автоматического оформления таблиц (таблификатор), который позволяет оформить в стандарте Википедии таблицу, скопированную из внешнего источника — например, из Excel.

    Скопированный и вставленный в форму ввода текст таблицы (он разделен знаками табуляции) нужно выделить курсором «мыши» и нажать кнопку на панели инструментов (она появится после установки скрипта).

    Скрипт задаст вопрос, оформлять ли первую колонку как заголовок (на него надо ответить «ОК» или «Отмена»). После ответа на этот вопрос скрипт сформирует таблицу в требуемом для Википедии формате.

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

    Сокращение размера ссылок[править код]

    Русские буквы в ссылках Википедии кодируются 6 знаками (например Б кодируется как %D0%91). Существует скрипт urldecoder.js, написанный Alex Smotrov, который позволяет выполнить по нажатию кнопки данное преобразование. Он удобен для преобразования ссылок Википедии в читаемый и предусмотренный внутренними правилами вики-разметки вид. Вставьте ссылку из буфера обмена, и нажмите кнопку «%%» на панели инструментов, которая появится после установки скрипта.

    Аналогичный скрипт refconv.js я сделал для собственных целей (он умеет преобразовывать любые ссылки подобного вида (при этом заменяет только буквы), и не требует выделения ссылки). Установите курсор на тексте, который содержит гиперссылку, или выделите нужный фрагмент, и нажмите кнопку на панели инструментов.

    Транслит[править код]

    Написанный мной скрипт translit.js предназначен для транслитерации выделенного текста в кириллицу, если у участника нет русской клавиатуры. Два известных мне зарубежных участника пользовались сервером translit.ru, и были рады внедрению такой возможности в форму ввода Википедии. Ссылку на скрипт вы найдете на моей странице участника.

    Перевод текста в нижний регистр[править код]

    Нередко во внешних источниках те или иные заголовки или надписи даны ЗАГЛАВНЫМИ БУКВАМИ. Чтобы не перепечатывать их заново, а по нажатию кнопки перевести выделенный текст в нижний регистр, потребуется скрипт lowercase.js, ссылку на который вы найдете на моей странице участника.

    Оформление викиссылки[править код]

    Найденное слово по нажатию кнопки скрипта wordwikify.js перемещается в левую часть вики-ссылки.

    Правильная установка внутренней вики-ссылки зачастую требует произвести поиск по Википедии, чтобы убедиться в наличии или правильном написании этой ссылки. В окне поиска в последнее время появилась возможность выбора набираемого текста из выпадающего списка по первым буквам. Чтобы произвести вики-разметку текста, я производил поиск при помощи этой возможности, и копировал через буфер обмена найденное в левую часть вики-ссылки. Скоро мне это надоело (при викификации больших статей руки начинают уставать, и пальцы-заплетаться от копирований, вставок и переключений на другой язык, чтобы ввести квадратные скобки), и я сделал скрипт, который по нажатию кнопки на панели инструментов , которая появится после установки скрипта, переносит найденное в качестве ссылки для слова, на котором стоит курсор. Слово в тексте при этом выделять не нужно, достаточно поставить курсор на один из его символов (но можно выделить слово или фразу). Задача автоматического выделения слова оказалась не тривиальной из-за особенностей реализации JavaScript в различных браузерах, но теперь она решена, и соответствующую библиотеку функций можно использовать в различных скриптах, чтобы сделать установку границ выделенного фрагмента для слова или текста, или определить позицию курсора в окне редактирования. Скрипт называется wordwikify.js, ссылку на него можно найти на моей странице участника. Аналогичный (и в каком-то отношении более удобный) скрипт user:js/editsuggest написал Alex Smotrov. Этот скрипт позволяет открыть окно поиска слова по первым буквам по нажатию на кнопку, и оформить в качестве вики-ссылки выделенный фрагмент текста.

    Гаджеты[править код]

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

    Выводы[править код]

    В качестве итоговых выводов отметим преимущества, которые дают рассмотренные выше персональные скрипты пользователю Википедии:

    • Быстрый поиск без нагрузки на серверы Википедии.
    • Контроль правильности пользовательского ввода.
    • Удобные средства для типичных задач пользователя.

    Дополнительную информацию по этой теме вы найдете на страницах: