поиск некоторых общих рекомендаций и/или мыслей...
я создаю то, что я думаю, чтобы быть большим количеством веб-приложения затем веб-страница, потому что я предназначаю это, чтобы быть похожим на приложение Gmail, где Вы оставили бы страницу открытой целый день при получении обновлений, "продвинутых" к странице (для заинтересованного, я использую метод программирования кометы). я никогда не создавал веб-страницу, прежде чем это было настолько богато ajax и JavaScript (я - теперь огромный поклонник jQuery). из-за этого, снова и снова когда я реализую новую опцию, которая требует динамического изменения в UI, о котором должен знать сервер, я сталкиваюсь с тем же вопросом:
1) если я делаю всю обработку на клиенте в JavaScript и отправляю назад как можно меньше через ajax или 2) если я отправляю запрос на сервер через ajax, имею сервер, делают всю обработку и затем передают новый HTML обратно. затем на ajax ответе я делаю уроки с новым HTML
я был склонен всегда следовать за № 1. это веб-приложение, которое я воображаю, может стать довольно болтливым со всеми запросами ajax. моя мысль, минимизируют как можно больше размер запросов и ответов, и полагаются на непрерывно улучшающиеся механизмы JavaScript, чтобы сделать как можно больше обработки и обновлений UI. я обнаружил с jQuery, я могу сделать так много на стороне клиента, что я не смог бы сделать очень легко прежде. мой код JavaScript на самом деле намного больше и более сложен, чем мой серверный код. существуют также простые calulcations, которые я должен выполнить, и я продвинул это на стороне клиента, также.
я предполагаю основной вопрос, который я имею, мы должны ВСЕГДА бороться за клиентскую обработку по серверной обработке каждый раз, когда возможный? я 've всегда чувствовал, чем меньше сервер должен обработать, тем лучше для масштабируемости/производительности. позвольте питанию процессора клиента сделать всю тяжелую работу (если возможный).
мысли?
Есть несколько соображений при принятии решения о том, должны ли новые HTML фрагменты, созданные по запросу ajax, быть построены на стороне сервера или клиента. Некоторые вещи, которые следует учитывать:
Производительность. Работа, которую должен выполнять ваш сервер, это то, что вас должно беспокоить. Выполняя больше обработки на стороне клиента, вы уменьшаете объем работы, выполняемой сервером, и ускоряете процесс. Если, например, сервер может послать немного JSON вместо гигантского HTML-фрагмента, то было бы гораздо эффективнее позволить это сделать клиенту. В ситуациях, когда в любом случае передается небольшой объем данных, разница, вероятно, ничтожно мала.
Читабельность. Недостатком генерации разметки в вашем JavaScript является то, что намного сложнее читать и поддерживать код. Встраивание HTML в цитируемые строки неприятно смотреть в текстовом редакторе с раскраской синтаксиса, установленной в JavaScript, и делает редактирование более сложным.
Разделение данных, представление и поведение. Помимо удобочитаемости, наличие HTML-фрагментов в JavaScript не имеет особого смысла для организации кода. Шаблоны HTML должны обрабатывать разметку, а JavaScript следует оставить в покое, чтобы он мог обрабатывать поведение вашего приложения. Содержимое HTML-фрагмента, вставляемого в страницу, не имеет отношения к вашему JavaScript-коду, а только к тому, что он вставляется, где и когда.
Я склонен больше склоняться к возвращению HTML-фрагментов с сервера при работе с ответами по протоколу ajax, по причинам, о которых я упоминал выше, связанным с удобочитаемостью и организацией кода. Конечно, все зависит от того, как работает ваше приложение, насколько интенсивно обрабатываются ответы по аяксу, и сколько трафика получает приложение. Если серверу приходится выполнять значительную работу по генерированию этих ответов, и это приводит к появлению узких мест, то может быть более важным подтолкнуть работу к клиенту и отказаться от других соображений.
Конечно, это зависит от данных, но в большинстве случаев, если вы можете протолкнуть его на сторону клиента, сделайте это. Заставьте клиента делать больше обработки и использовать меньше пропускной способности. (Опять же, это зависит от данных, вы можете попасть в случаи, когда вам нужно отправить больше данных, чтобы сделать это на стороне клиента).
Некоторые вещи, например проверки безопасности, всегда должны выполняться на сервере. Если у вас есть вычисление, которое принимает много данных и дает меньше данных, также поместите его на сервер.
Кстати, знаете ли вы, что можно запускать Javascript на стороне сервера, отображать шаблоны и обращаться к базам данных? Ознакомьтесь с экосистемой CommonJS .
Также могут быть проблемы с поддержкой кросс-браузера. Если вы используете кросс-браузер, библиотека на стороне клиента (например, jQuery), и она может обрабатывать всю необходимую обработку, вы можете позволить библиотеке позаботиться об этом. Генерация кросс-браузера HTML-сервер-сторона может быть сложнее (имеет больше ручного), в зависимости от сложности разметки.
Похоже, что вы взяли эту цитату из часто задаваемых вопросов comp.lang.c (возможно, старая версия или, возможно, печатная версия; он не вполне соответствует текущему состоянию онлайн):
http://c-faq.com/aryptr/aryptrequiv.html
Соответствующий раздел содержит ссылки на другие разделы часто задаваемых вопросов для более подробного описания этих исключений. В вашем случае вы должны посмотреть на:
http://c-faq.com/decl/strlitinit.html
-121--1302225-Обычно вы можете просто загрузить класс как ресурс из Classloader.
Class c = ...
String className = c.getName();
String classAsPath = className.replace('.', '/') + ".class";
InputStream stream = c.getClassLoader().getResourceAsStream(classAsPath);
Я бы, вероятно, рекомендовал использовать что-то из Apache commons-io для чтения InputStream в байт []
, но IOutils.toByteArray ()
должен сделать трюк. Написание этого кода действительно легко ошибиться и/или сделать медленным.
В настоящее время я работаю над довольно ресурсоемким приложением и выполняю почти все его на стороне клиента. Я не знаю точно, чем будет заниматься ваше приложение (более подробная информация будет отличной), но я бы сказал, что ваше приложение может сделать то же самое. Просто убедитесь, что весь код, связанный с безопасностью и базой данных, находится на стороне сервера, потому что это не откроет бреши в безопасности в приложении. Вот некоторые общие рекомендации, которым я руководствуюсь:
Я недавно бежал в ту же проблему и решил пойти с боковой обработкой браузера, все отлично работало в FF и IE8 и IE8 в режиме 7, но тогда ... наш клиент, используя Internet Explorer 7 RAN в проблемы, приложение Официально замораживается и окно тайм-аут скрипта, я положил слишком много работы в решение, чтобы выбросить его, поэтому я закончил расходу за час или настолько оптимизировать сценарий и добавлять мероприятия, где это возможно.
Мои предложения?
Можно сохранить объекты в столбце ГЕОГРАФИЯ
и создать над ним ПРОСТРАНСТВЕННЫЙ ИНДЕКС
.
К сожалению, SQL Server
реализует пространственные индексы путем замощения поверхности и сохранения идентификаторов плиток в простом индексе B-Tree
, поэтому простой ORDER BY STDisance
работать не будет (ну, но не будет использовать
Вместо этого необходимо сделать запрос, подобный следующему:
DECLARE @mypoint GEOGRAPHY
SET @mypoint = geography::STGeomFromText('POINT(@mylat, @mylon)', 4326);
WITH num (distance) AS
(
SELECT 1000
UNION ALL
SELECT distance + 1000
FROM num
WHERE distance <= 50000
)
SELECT TOP 1 m.*
FROM num
CROSS APPLY
(
SELECT TOP 1 *
FROM mytable
WHERE myroad.STDistance(@mypoint) <= distance
ORDER BY
STDistance(@mypoint)
) m
Этот путь, SQL Server
сначала будет искать дороги в пределах 1
километра от точки, затем в пределах 2
километра и т.д., каждый раз используя индекс.
Обновление:
Если у вас есть несколько точек в таблице и вы хотите найти ближайшую точку для каждой из них:
WITH num (distance) AS
(
SELECT 1000
UNION ALL
SELECT distance + 1000
FROM num
WHERE distance <= 50000
)
SELECT mp.mypoint, m.*
FROM @mypoints mp
CROSS APPLY
(
SELECT TOP 1 m.*
FROM num
CROSS APPLY
(
SELECT TOP 1 *
FROM mytable
WHERE myroad.STDistance(@mypoint) <= distance
ORDER BY
STDistance(@mypoint)
) m
) m
-121--3119948- Я согласен с вами. Максимально подталкивайте пользователей, но не слишком сильно. Если ваше приложение замедляет или еще хуже отключает их браузер, вы освобождаетесь.
Мой совет состоит в том, чтобы на самом деле проверить, как работает ваше приложение, когда оно включено в течение всего дня. Проверьте отсутствие утечек памяти. Проверьте, что нет запроса ajax, создаваемого каждые половину секунды после работы с приложением в течение некоторого времени (таймеры в JS могут быть болью когда-нибудь).
Кроме этого никогда не выполняйте проверку пользовательского ввода с помощью javascript. Всегда дублировать его на сервере.
Edit
Use jquery live binding . Это сэкономит много времени при повторной привязке сгенерированного содержимого и сделает вашу архитектуру более четкой. К сожалению, когда я разрабатывал с jQuery, он еще не был доступен; мы использовали другие инструменты с таким же эффектом.
В прошлом у меня также была проблема, когда генерация части одной страницы с использованием ajax зависит от генерации другой части. Создание первой и второй частей сделает вашу страницу медленнее, как и ожидалось. Запланируйте это впереди. Создайте страницы, чтобы они уже имели все содержимое при открытии.
Кроме того (относительно простых страниц), сохраните низкое количество файлов ссылок на одном сервере. Объединение библиотек javascript и css в один файл на стороне сервера. Храните изображения на отдельном хосте, лучше разделяйте хосты (создание только третьего уровня домена будет делать тоже). Хотя это стоит того только на производстве; это усложнит процесс развития.
Это возможно, но с тяжелой загрузкой на нагрузку и тяжелое использование кэширования. Возьмите Gmail в качестве примера
Умный, чтобы разделить рабочую нагрузку между вашим сервером и клиентом.