как приложение Ajax должно вести себя, когда JavaScript отключен - обычная практика?

Учитывая [1 127] Ваш спецификация, что Вы выбор всех столбцов, существует мало различия в это время . Поймите, однако, что схемы базы данных действительно изменяются. Если Вы используете SELECT * , Вы собираетесь получить любые новые столбцы, добавленные к таблице, даже при том, что, по всей вероятности, Ваш код не готов использовать или представить те новые данные. Это означает представление системы неожиданной производительности и изменениям функциональности.

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

  1. Read от базы данных
  2. Отправленный через сеть
  3. Собранный в Ваш процесс
  4. (для технологий типа ADO) Сохраненный в таблице данных, в оперативной памяти
  5. Проигнорированный и отброшенный/, собрал "мусор"

, Объект № 1 имеет много скрытых затрат включая устранение некоторого потенциального закрывающего индекса, вызывая загрузки страницы данных (и перегрузка кэша сервера), подвергаясь строке / страница / блокировки таблицы, которых можно было бы иначе избежать.

Баланс это против потенциальных сбережений определения столбцов по сравнению с * и единственных потенциальных сбережений:

  1. Программист не должен пересматривать SQL для добавления столбцов
  2. , сетевой транспорт SQL меньше / быстрее
  3. синтаксический анализ запроса SQL Server / время проверки
  4. кэш плана запросов SQL Server

Для объекта 1, действительность - то, что Вы собираетесь добавить / код изменения для использования любого нового столбца, который Вы могли бы добавить так или иначе, таким образом, это - промывка.

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

Для объекта 3, нет НИКАКИХ сбережений, поскольку расширение * должно произойти так или иначе, что означает консультироваться со схемой таблицы (таблиц) так или иначе. Реалистично, список столбцов понесет те же расходы, потому что они должны быть проверены против схемы. Другими словами, это - полная промывка.

Для объекта 4 при определении определенных столбцов кэш плана запросов мог стать больше, но [только 1 133], если Вы имеете дело с различными наборами столбцов (который не является тем, что Вы определили). В этом случае Вы действительно хотите различные записи кэша, потому что Вы хотите различные планы по мере необходимости.

Так, это все снижается из-за способа, которым Вы определили вопрос к упругости проблемы перед лицом возможных модификаций схемы. При записи этой схемы в ROM (это происходит), то * совершенно приемлемо.

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

Мой совет состоит в том, что Вы должны ВСЕГДА ВЫБИРАТЬ определенные столбцы . Помните, что Вы становитесь хорошими в том, что Вы действительно много раз, так просто привыкаете делать его правильно.

, Если Вы задаетесь вопросом, почему схема могла бы измениться без изменения кода, думайте с точки зрения входа аудита, эффективных / дат истечения срока и других подобных вещей, которые добавляются DBAs для систематически для проблем соответствия. Другой источник закулисных изменений является денормализациями для производительности в другом месте в системе или пользовательских полях.

5
задан Cœur 26 April 2017 в 16:38
поделиться

6 ответов

Взгляните на метод Hijax , это способ использования AJAX в качестве прогрессивного улучшения .

2
ответ дан 14 December 2019 в 01:09
поделиться

Я бы справился с подобными вещами, используя событие с javascript, которое отменяет действие формы по умолчанию. Действие формы по умолчанию - отправить по другому URL-адресу:

html

<form id="AjaxForm" action="/nonJS_register.php" method="POST">
   <!-- form input elements -->
</form>

js

document.getElementById("AjaxForm").onsubmit = function ()
{
     //- do ajax posting...
     ajaxPostForm();

     //- Cancel the default action of the form
     event.preventDefault();
     return false;
}

Функция ajax может быть отправлена ​​в nonJS_register, или вы даже можете просто добавить параметр, который сообщает скрипту о возврате данных в другой формат и не инкапсулированный в HTML.

2
ответ дан 14 December 2019 в 01:09
поделиться

Лучшее, что я мог бы предложить, - это построить его так, как вы хотите, чтобы он работал без вызовов AJAX. Таким образом вы сможете получить точное представление о том, как он будет работать с отключенным JavaScript. Затем начните работать со своим JavaScript и продолжайте тестирование с / без включенного JavaScript.

1
ответ дан 14 December 2019 в 01:09
поделиться

Если вы используете AJAX для реализации НЕОБХОДИМОЙ части страницы, тогда вся страница должна будет требовать Javascript.

Это то, на что вы должны указать ПЕРЕД тем, как вы начнете его реализовывать. .

Если вы хотите сделать Javascript необязательным, вы не можете использовать AJAX для реализации всего взаимодействия. Вам придется использовать обратные передачи и в конечном итоге переопределить события нажатия кнопок, чтобы сделать обратную передачу асинхронной (также известной как AJAX).

Итак, я бы посоветовал вам написать страницу, как если бы у вас нет Javascript , а затем переопределить некоторые функции позже, если включен Javascript.

1
ответ дан 14 December 2019 в 01:09
поделиться

Одно из решений - заставить ваш файл register.php распознавать HTTP-заголовок: Accept в получаемых запросах, и он будет отвечать одним из нескольких способов:

  1. Если входящий запрос имеет

    Принять: application / xhtml + xml, text / html, multipart / mixed, * / *

    Затем вернуть HTML-страницу в качестве ответа.

  2. Или, если это что-то еще, например

    Принять: application / json, application / javascript, text / javascript

    Он вернет JSON (в данном случае) или XML, если, например, в нем указаны соответствующие типы mime.

Тогда в вашем коде Javascript вы: d обработать событие onsubmit и переопределить нормальное поведение, чтобы выполнить то, что вы предлагаете в своем вопросе (но также изменив заголовок Accept , как указано выше). Если javascript отключен, форма будет отправлена ​​нормально и будет передавать заголовок, который должен заставить ваш PHP вернуть веб-страницу.

1
ответ дан 14 December 2019 в 01:09
поделиться

the recipe is very basic:

  1. always pull everything on the page before JS is even called.
  2. then change everything via JS - e.g. hide elements as required etc.
  3. AJAX needs to hook up on the events and cancel the original events (e.g. clicking the link will get you to another HTML/PHP generated page without JS available, but with JS available you can change targets to pull AJAX only and return false, so click won't actually change the page)
2
ответ дан 14 December 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: