Посоветуйте грамотный подход при реализации веб-сайта

Gandliar

Well-Known Member
Lotus team
16.02.2004
326
6
44
Минск
jobber.by
#1
Привет!

На веб-страничке надо отобразить два блока "Популярное" и "Новое" по 10 документов в каждом

Документы соответственно отсортированы по популярности и по дате.

1. 2 вида на веб-страницу вставить нельзя
2. @dbcolumn имеет ограничение 64кб

Как лучше реализовать отображение двух блоков? Посоветуйте пожалуйста подход и поясните почему именно он. Заранее благодарю.

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

Gandliar

Well-Known Member
Lotus team
16.02.2004
326
6
44
Минск
jobber.by
#4
Почему нельзя?
Framesets разве в вэбе не работают? Да и в Xpage вроде как можно.
P.S. Ах, да, я с лотусиным вэбом практически не знаком... :discard:
фрэймы совсем не подходят в данном случае

Добавлено: Оо

без фрэймов можно? Просба рассказать как.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#5
Gandliar
если хочешь действительно ГРАМОТНО
то тебе нужно подсовывать ДОК - в котором уже сделаны все результаты и итоги, док лучше набить агентиком, тогда доминохе нужно будет лишь показывать контекст дока, что менее затратно, чем рефрешить виды и показывать их контент...
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
326
6
44
Минск
jobber.by
#6
Gandliar
если хочешь действительно ГРАМОТНО
то тебе нужно подсовывать ДОК - в котором уже сделаны все результаты и итоги, док лучше набить агентиком, тогда доминохе нужно будет лишь показывать контекст дока, что менее затратно, чем рефрешить виды и показывать их контент...
Спасибо, видимо так и поступлю.
 

duchan

Well-Known Member
20.09.2006
108
3
45
Красноярск
#7
если 8.5 - лучше xPages...
ну или 2 вычисляемых для показа поля, где получаешь свои 10 доктов, а затем формируешь HTML можно с CSSом так как хочешь это видеть, ну и поставь отображать как HTML...
 
#8
если 8.5 - лучше xPages...
ну или 2 вычисляемых для показа поля, где получаешь свои 10 доктов, а затем формируешь HTML можно с CSSом так как хочешь это видеть, ну и поставь отображать как HTML...
+1. Не надо мешать доминошный головняк и веб.
Делаем статическую страницу myMegaPage.html
Код:
<!doctype html ...>
...
<body>
<ul class="last">
</ul>
<ul class="popular">
</ul>
...
</body>
...
на onload вешаем два ajax запроса к вьюхам типа lastDocs?readViewEntries&outputFormat=json&count=10 , popularDocs?readViewEntries&outputFormat=json&count=10
(если одна категоризованная вьюха, добавляем в параметры запроса &RestrictToCategory=... ). разбираем json, набиваем соответствующие списки.
дальше при помощи css отрисовываем как хочеца.
Жуткие readViewEntries и пр. можно убрать при помощи Web Rules: будут вызовы типа /lastDocs&count=10. Т.е. можно полностью скрыть факт использования domino. Т.о. при желании всегда можно поменять бэкенд не меняя логики сайта. Это удобно для отладки страницы - вместо обращений к домине можно юзать стабы из файловой системы.
плюсы: получаем чистый html+js+css. Т.е. писать(отлаживаца, тестироваца) можно в любой IDE. От разработчика клиентской части не требуется знание domino.
На jquery это делаеца в несколько строк:
Код:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
$(function(){
$.getJSON('/lastDocs&count=10', function(data) {
$.each(data.viewentry, function(i,viewentry){
$(".last").append( $("<li></li>").html( выдираем данные из entry) );
});
})
})
});
</script>
 

NetWood

Well-Known Member
Lotus team
17.04.2008
370
16
Питер
#9
$.getJSON('/lastDocs&count=10', function(data) {
А есть у Вас пример простейшего шаблона с аяксом. Например отправка запроса из поля - получение данных на этой же странице НЕ в редактируемом поле, то есть не так. Там есть поле Result(s):, вот как сделать его контентным? Шаблон. Я несколько притормаживаю с этой техникой. Где-то не хватает запятой :)

Хотя по сабджу я с Тохой согласен. Слепил страничку статиком и всех делов. Но я лично так ленюсь. Хватает и вычисляемых полей и одной вьюхи. Контент там не бывает более 64К в одном поле, а если и бывает, то такие страницы не нужны - слишком медленно открываться будут, да и смысл такого контента...
 
#10
А есть у Вас пример простейшего шаблона с аяксом. Например отправка запроса из поля - получение данных на этой же странице НЕ в редактируемом поле, то есть не так. Там есть поле Result(s):, вот как сделать его контентным? Шаблон. Я несколько притормаживаю с этой техникой. Где-то не хватает запятой :)
Честно говоря, не понял вопроса. Особенно про нередактируемое поле. $.get -> получили данные -> дальше делаем с ними что хотим. можем хранить в объектах js, можем отрисовывать на странице...
Простого шаблона нет, но потрогать можно примерно так:
Делаем пустую базу, набиваем документами, строим вьюху myView. Далее, кладем в ресурсы базы html файл примерно такого содержания:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">helloLotusWorld.html</div></div><div class="sp-body"><div class="sp-content">
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> 
<title>Title</title> 
</head> 
<body> 
<ul class="viewcontent">
</ul>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script> 
<script type="text/javascript">
//<![CDATA[
$(function(){
$.getJSON('myView?readViewEntries&outputFormat=json&count=10', function(data) {
$.each(data.viewentry, function(i,viewentry){
$(".viewcontent").append( $("<li></li>").html( viewentry.entrydata[0].text[0]) );
});
})
});
//]]>
</script>
</body> 
</html>
Открываем http://server/db/helloLotusWorld.html и смотрим результат.
Тот же код можно повесить на кнопку: $("#myButtonID").click( function(){ /*$.get .... */ })

Домино в данном случае выступает как веб-сервер для статики( html, js, css ) и хранилище данных. Причем эти функции строго разделены.
Т.е. для создания клиентской части приложения, разработчику нет необходимости знать специфику lotus. Архитектура понятна любому веб-разработчику, а не только лотусоводам.
Это конечно слегка идеализировано, но в общем все примерно так и есть. Статику можно ваять в любой ide и заливать в БД через webdav. При этом 99% времени клиент lotus вообще не запущен на машине разработчика.

P.S. Если мне не изменяет память, то outpuformat=json доступен, начиная с 7.0.2.
 
D

dmytro.pastovenskyi

Гость
#12
я бы сделал как ToxaRat предложил.

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

аякс - это все хорошо и т.д. но если у тебя сайт внешний и тебе интересн инкам юзеров, то гугл такое не схавает соотв. для PR - плохо.
делать лукапи - понижать скорость, плохо и для юзеров и для гугл-СЕО.
 
#13
...либо как более логично исходя из бизнес логики приложения (рефреш при сейве новости-статьи). достаточно одноразово выполнить лукапы и сохранить результаты в документе в виде хтмл и все - на вывод в мир.
аякс - это все хорошо и т.д. но если у тебя сайт внешний и тебе интересн инкам юзеров, то гугл такое не схавает соотв. для PR - плохо.
это типичный лотусовый подход. оно работает, но требует от разработчика знания веб и домино.
отделение данных от представления позволяет вести "классическую" веб-разработку.
Кроме того в варианте с тремя GET запросами можно получить профит от правильной настройки кэша, отделяя статику от динамики.
Т.е. типа сама страница cc:max-age 1 year,
popularDocs cc:max-age 1 day
lastDocs cc:must-revalidate
в идеальном случае кэш можно настроить так, что в большинство запросов вообще не будет обслуживаться сервером...

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

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#14
Интертраст принял странное решение...
перевод на пых, с домины...
куда логичнее был бы томкат (как апсервер) с жсп
на кеширование - можно установить фронтэнд сервер (нжинкс тот же)
 
K

K-Fire

Гость
#15
Интертраст принял странное решение...
перевод на пых, с домины...
куда логичнее был бы томкат (как апсервер) с жсп
на кеширование - можно установить фронтэнд сервер (нжинкс тот же)
Вообще-то совершенно логичное и верное решение. Для опытного пхп разработчика сделать сайт будет раза в 1.5-2 быстрее чем на яве. Работать под нагрузкой будет гораздо быстрее.

Имхо только 1 вариант для веба когда вам нужно выбрать яву а не пхп - это большие веб-порталы с серьезной серверной логикой. Сайты-визитки (даже сложные) делать на яве нет никакого смысла.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#16
K-Fire я в корне не согласен...
-на пыхе не легче делать сайты (просто было модно)
-язык требует внимательности и большого опыта - иначе дыры неизбежны
-быстрее сайт не будет (да и с чего бы) - пых интрепретируемый язык, там и там есть "ускорители", есть результаты, в кот. пых выглядит ущербно http://blog.dhananjaynene.com/2008/07/perf...n-jruby-groovy/
-апач не быстрее и не устойчивее к нагрузкам чем тот же томкат (хотя пых живет и на др. хттп движках)
-в домине джава "родная" и даже есть интеграция в сервлетманаерами
-выбор фрэймворков у пыха беднее http://en.wikipedia.org/wiki/Comparison_of...tion_frameworks
-у пыха байдизайн плохое "разделение" кода (просто он так замышлялся, теперь это пытаются править)
ну и вот такая картинка:
http://shootout.alioth.debian.org/u32/benc...a&lang2=php
вывод - если оборудование старое (или слабое - по памяти) и денег жалко - можно ставить пых на "лёгкий" двиг (lighttpd, nginx)
в России (единственно) много "кодеров" (особливо студентов) для пыха - дешевизна раб-силы (НО не качество)
 
#18
загляните сюды http://lotus.net.ua/
обратите внимание как я сделал RSS/Atom - http://lotus.net.ua/rss/news.xml
формирую агентом этот файл, дальше веб-домино его кешит и всё, простенько и эффективненько
гм. насчет кэша похоже вы заблуждаетесь... сервер не возвращает для http://lotus.net.ua/rss/news.xml заголовков cache-control (СС). Поэтому запрос всегда обслуживаеца сервером. Каждый get гонит 46Kb трафика от сервера на клиента. Добавьте заголовки CC:max-age = интервал запуска агента и ETag и получите:
- разгрузку вычислительных мощностей сервера
- экономию исходящего трафика на сервере
- экономию входящего на клиенте.
Кэширование atom feeds - одна из ключевых фич, благодаря которой формат популярен.