Вы можете гарантировать порядок строк, включив предложение ORDER BY
, которое включает в себя все столбцы, необходимые для уникальной идентификации строки. Фактически, это единственный способ гарантировать порядок от повторных вызовов оператора SELECT, даже если в базе данных ничего не изменилось. Без однозначного предложения ORDER BY ядро базы данных может свободно возвращать строки в любом удобном для них порядке в данный момент.
Рассмотрим простой пример:
Вы являетесь единственным пользователем базы данных. Механизм базы данных имеет кэш строк в памяти, который может содержать последние 1000 найденных строк. Сервер базы данных был только что перезапущен, поэтому кеш пуст. Вы SELECT * FROM tablename
и ядро базы данных извлекаете 2000 строк, последние 1000 из которых остаются в кэше. Затем вы делаете SELECT * FROM tablename
снова. Механизм базы данных проверяет кэш и находит 1000 строк из предыдущего запроса, поэтому он немедленно возвращает их, потому что при этом ему больше не придется нажимать на диск. Затем он приступает к поиску других 1000 строк. Конечным результатом является то, что 1000 строк, которые были возвращены последними для начального SELECT, фактически возвращаются первыми для последующего SELECT.
Я склонен использовать следующие правила:
Запросите и возвратите HTML для быстрых отрывков, затем используйте клиентский (статический) JavaScript для вставки их. Большой для аварийных сообщений.
Запрос и возврат JSON для больших наборов данных. Это работает отлично, когда Вы хотите сделать фильтрацию, группировку или сортировку на стороне клиента, не повторно запрашивая данные в другой форме.
Запрос и возврат JSON для больших наборов данных, но включают (завершенный) отрывок HTML для каждой записи в записи JSON. Это означает больше времени рендеринга и больше использования пропускной способности, чем (2), но может уменьшить дублирование часто сложного рендеринга HTML.
Запросите и возвратите JavaScript, и eval
это клиентский. Это работает лучше всего на взаимодействия, такие как сокрытие, показ, перемещение и удаление. Это может работать на вставки также, но часто работу типа (1) или (5) лучше для этого.
Запросите и возвратите JavaScript, и eval
это клиентский, но включает, вышел из HTML в JavaScript, таким образом, сервер делает рендеринг HTML.
Я, вероятно, использую 5 и 1 чаще всего.
Я казался бы мне, что это будет еще большая стычка для выяснения, где в сервере бэкэнда, который должен был бы быть изменен, когда существует изменение структуры или CSS DOM.
Хранение всего этого в одном месте (файл HTML) является, вероятно, лучшей причиной ограничить ajax коммуникацию JSON.
С обоими необработанный HTML JSON, который Вы все еще имеете, волнует содержание, являющееся безопасным, после того, как весь JSON является кодом JavaScript. Я предполагаю, не доверяете ли Вы источнику своих данных HTML затем, Вы открыты для всех видов Атак с использованием кросс-сайтовых сценариев. Рассмотрите отправку данных как JSON и пользование библиотекой Javascript Templating как та в библиотеке Yahoo UI, см., что http://developer.yahoo.com/yui/docs/YAHOO.lang.html#method_substitute затем позволяет Парням Фронтэнда поддержать шаблоны.
Я не уверен, что понимаю вопрос 100%..., но...
Мы используем GWT и отправляем XML между клиентом и сервером. Я реализовал XML отображающаяся система с помощью генератора кода GWT, таким образом, код для перевода между XML и объектами JavaScript автоматически сгенерирован на основе самих объектов (использующий Аннотации в классах Java).
Отправка прямого HTML просто делает Ваше приложение менее способным, так как это больше не может интерпретировать данные всегда, но просто обновляет экран с ним. Это также усложняет сторону сервера, которая теперь должна генерировать HTML... Я серьезно избежал бы той стратегии.
Я имею своего рода /task/action/parameter
идиома, идущая на сторону JavaScript. Мой бэкенд строго возвращает данные, в которых я нуждаюсь в JSON, клиент (js) заботится об отображении его. Скажите, что я загружаю эту страницу /#/item/product/5
, JavaScript знает, что должен назвать объект "объекта", метод "продукт" с параметром 5 передал в него.
Это работает действительно хорошо на установку закладки ссылок, поэтому когда кто-то решает отметить mysite.com/#/item/product/5
каждый раз, когда загрузки страницы это знает точно что объект.. метод для вызова.
Я думаю, что нет большой разницы с точки зрения безопасности - можно проанализировать небезопасный JSON, а также небезопасный HTML/JS.
Это больше о надлежащем разделении на уровни Вашего приложения - при прямом введении HTML к странице необходимо будет создать определенный для представления код на уровне бизнес-логики, который для моего впечатления не выгоден для чистых и легко сменных слоев.
Просто мои 2 цента...
Единственная причина я интересуюсь выполнением этого, из-за огромной боли, это - для разработчиков фронтенда каждый раз, когда существует изменение структуры/CSS DOM, таким образом, теперь необходимо понять, где в процессе создания HTML JavaScript Вам, вероятно, придется обновить.
Необходимо делать его неправильно.
Данные, возвращающиеся из Ajax, должны только быть семантическими данными, т.е. материалом, который не изменяется если только изменения макета. Преобразование данных к управлению DOM лучше всего оставляют функции, определяемой JavaScript на самой основной странице.
Я сделал это в качестве комментария, но я настаиваю на этом.
JSON по своей сути безопасен, проблема в том, что с ним делают.
Использование eval для его оценки. проблема, а не формат, поскольку формат неявно ограничен спецификацией JSON. Поврежденный JSON может сделать eval небезопасным. Так что ... не делай этого. Не используйте eval, используйте специальный парсер JSON.
Та же логика может быть применена к HTML. Относитесь к HTML как к «данным», как к простому XML, и обрабатывайте его, а не просто слепо прикрепляйте к своим страницам.
Намного труднее ускользнуть от этого пути.