web. таблица 300 на 300
![](/images/graemlins/smile.gif)
ЗЫ: ноликом ошибся имхо: 450кб
Картинку менять надо в зависимости от действий клиента на HTML странице. Менять часто — на каждое действие. Т.е. будет не "страница с контентом" а "программа на странице".
> каждая ячейка = 1 пиксель и все они по рандому закрашены
ячейка — 3 на 5 пикселей, например, чтоб глазом видно было. Это не картинка а "табличное представление". Цветов, соответственно, не больше 20.
Всякий обмен с сервером в процессе работы тоже нежелателен. HTML страничка в идеале должна быть независима от сервера, после того как на нем сгенерируется. Логика программы такая.
В данном случае Flash будет, конечно, существенно быстрее JavaScript
Ещё есть canvas
правильный ответ: Java
Если тебе не критична кроссплатформенность, то у майкрософта специально для таблиц есть контрол. Они и сортироваться могут на лету, и подгружаться, и перекрашиваться.
Должно работать под Linux, Mac, Windows в IE, FF, Opera + на наладонниках (Opera Mobile и тд).
Т.е. максимально просто должно быть, поэтому очень-очень не хочется flash.
+ на наладонникахА их браузер не загнётся, когда будет рендерить эту таблицу?
А то большие таблицы и на десктопе не очень быстро обрабатываются.
Умрут. Если это делать через HTML все умрут -)
Я научился делать такую таблицу в HTML:
<html>
<head>
<title>Test</title>
<style type="text/css">
table.carpet {
position: absolute;
border: thin solid ;
padding: 0px;
margin: 0px;
}
table.carpet td {
background-color: ;
}
</style>
<script type="text/javascript">
carpet = null;
function init{
carpet = new Carpet('carpet');
carpet.create(300,300);
}
function Carpet(carpet_id){
this.create = function(width,height,cellwidth,cellheight){
cellwidth = (cellwidth || 10);
cellheight = (cellheight || 2);
var arr = new Array;
var carpet = document.getElementById(carpet_id);
arr.push('<colgroup span="'+width+'" width="'+cellwidth+'">');
arr.push('</colgroup>');
for(var i=0;i<height;i++){
arr.push('<tr>');
for(var j=0;j<width;j++){
arr.push('<td/>');
}
arr.push('</tr>');
}
carpet.innerHTML = arr.join('');
}
}
</script>
</head>
<body onload="init">
<table border="0" id="carpet" class="carpet"></table>
</body>
</html>
Такая штука делается пару секунд.
Остается вопрос: можно ли уменьшить расстояния между ячейками?
Остается вопрос: можно ли уменьшить расстояния между ячейками?
cellspacing & cellpadding
Картинку менять надо в зависимости от действий клиента на HTML странице. Менять часто — на каждое действие. Т.е. будет не "страница с контентом" а "программа на странице".image map?
скачать и показать картинку всяко проще чем таблицу такого же размера
И на сколько быстро он перерисовывает изображение? Например если я изменю размер окна?
Например если я изменю размер окна?
Нетрудно видеть, что размеры везде абсолютные. Поэтому размер окна влияет только на размер окна. Придется скроллить.
И на сколько быстро он перерисовывает изображение?
Какое? Скроллит быстро.
А какой у тебя проц?А это неважно. Рисует быстро — он не пересчитывает расположение ячеек друг относительно друга.
Я прочитал про table layout на w3c.org:
http://www.w3.org/TR/html4/struct/tables.html#edef-COLGROUP
http://www.w3.org/TR/html4/appendix/notes.html#notes-tables
И там говорится про Fixed Layout Algorithm
1. Не кроссбраузерный скрипт - в ИЕ не работает. Хотя эту проблемы ты решишь я думаю
2. При изменении размеров окна тратится около секунды на перерисовку изображения в FF
3. При скроллинге имеются явно различимые тормоза в FF
4. На моей машине скрипт отрабатывает где-то за 5 секунд.
Вывод не дай боже такое окажется на компе слабже моего. Там все умрут. Причем проблема не в скрипте, а в скорости обработки документа DOM браузером
А теперь самое веселое. Необходимо не только показать 90000 квадратиков, но и обеспечить некую работу с ним. Можешь дать оценку сколько времени будут работать скрипты, обслуживающие данную табличку? -)
2. А, это. Это я не считал за время даже
![](/images/graemlins/smile.gif)
3. не могу различить
4. 5 секунд — это _очень_ хорошо. Пользователь будет готов и к 10 — потому что это прога а не сайт. Нет задачи удержать проходящего мимо пользователя.
И последнее: рисование заключается только в изменении цвета. Я тестировал на 150 на 150 — рисует быстро. Линии рисует.
Сейчас написал рандом — тоже быстро. Фишка в том что ты заранее знаешь структуру детей table.
Поэтому можно не искать нужную ячейку, а вычислять ее:
this.paint = function{
var row = carpet.childNodes[1].childNodes[Math.floor(Math.random*carpet.childNodes[1].childNodes.length)];
row.childNodes[Math.floor(Math.random*row.childNodes.length)].className = 'active';
setTimeout(paint,100);
}
var paint = this.paint;
Не проще просто написать на сях прогу и пусть люди работают с ней?
кросс-платформенность
Что за брет? Использовать убогую оболчку, только из-за того что не могут в элементарной задаче решить вопрос кросс-платформенности?
Имхо должно получиться лучше таблички во всех отношениях.
Да, дивы ессно генерить js.
Из каких соображений div'ы будут лучше?
Оставить комментарий
pilot
Хочется чтоб на html-странице была таблица. Размер, к примеру, 300 на 300. В таблице нужно уметь перекрашивать клетки (то есть какая-то программа для визуализации результатов будет их красить).Вопрос: как сделать такую таблицу?
1. Запихать в html-файл: 300*300*length("<td/>") = 90000*5 = 450000 = 450 Кб. Много, долго грузится и инициализируется. Плохо.
2. Генерировать javascript'ом динамически: тоже долго. порядка минут 5.
Можно ли сделать через Flash или Java? Будет ли оно быстрее Javascript'a?
А если умерить аппетиты до таблицы 100 на 100?