nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 08:25



This topic is locked, you cannot edit posts or make further replies.  [ 27 posts ]  Go to page Previous  1, 2
Webitable 2005 -> 2012 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Post 
Что-же делать простому юзеру? Держать несколько броузеров?
Меня два - Опера и ИЕ рядом напрягают... Один одно не может,
другой - другое...
Решился я их уволить. И поставить Гугель-Хром. А мне сказали -
"Ат винта! Фсё, что кроме Оперы - это не для вас!" :roll:

Отсюда мне совершенно непонятна всплывающая (даже мешающая)
релама некоторых сайтов:"У Вас устаревший броузер! Поставьте себе..."

Вот решился поставить... Обломили накорню. :(


13 Mar 2012 09:17
Profile
God
User avatar

Joined: 13 Nov 2010 04:06
Posts: 1345
Post 
Lynx. Самый не глючный! :D


13 Mar 2012 09:39
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Post 
HardWareMan wrote:
Это почему это? Операмини идет на гаджетах. Альтернативы нет. Или гаджеты юзают только русские?


Что есть "гаджеты"? В америгах все смарт устройства имеют в себе полноценные браузеры на основе WebKit (в iPhone/iPod, webOS и Android) либо Gecko (Mozilla FireFox) - так что опера никому нафиг не упала. См. статистику:
http://www.w3schools.com/browsers/browsers_stats.asp
February 2012:
IE 19.5% (половина из которых IE8, а четверть - IE9)
FireFox 36.6% (половина из которых FF10)
Chrome 36.3%
Safari 4.5%
Opera 2.3% (из которых опера-мини составляет только пятую часть)
Вот более разнообразная статистика по браузерам, но тенденция таже (IE постепенно сливает, а Opera никому ненужна):
http://en.wikipedia.org/wiki/Usage_shar ... b_browsers

К тому же Webitable-странички как read-only будут доступны во всех браузерах (даже текстовых lynx и links), а вот редактировать и динамически подгружать контент можно будет только в нормальных браузерах

_________________
:dj: https://mastodon.social/@Shaos


13 Mar 2012 19:38
Profile WWW
Doomed

Joined: 18 Feb 2007 11:40
Posts: 408
Post 
Lavr wrote:
У Вас устаревший броузер! Поставьте себе...

... Linux и любую венду в виртуалке :lol:

А вообще, когда пишешь что-нибудь под веб, приходится учитывать весь зоопарк: IE 7-10, Chrome, Firefox, Opera... Так что от костылей никуда не уйти пока, Shaos. Браузеры еще подобны микроконтроллерам самой первой ревизии кристалла - сплошные Errata.


13 Mar 2012 21:14
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Post 
Shaos wrote:
Подбираюсь к программной манипуляции HTML-таблицами - выяснилась интероесная особенность - оказывается браузер (как минимум Firefox - на других пока не пробовал) добавляет после тэга table тэг tbody, если его там нет!


вот собственно говоря функция, которая строит таблицу требуемого размера:

Code:
$W.table = function(p,h,w,s) {
  var d = arguments[4];
  var ts = s+"~";
  if($(p)==null) return 0;
  $(p).innerHTML = "";
  if($(s)!=null) return 0;
  if($(ts)!=null) return 0;
  if($$(s+'.*').lendth > 0) return 0;
  var r = this.create(p,"table",ts);
  var t = $(ts);
  t.setAttribute("cellpadding","0");
  t.setAttribute("cellspacing","0");
  t.setAttribute("border","0");
  r += this.create(ts,"tbody",s);
  var i,j;
  for(j=0;j<h;j++) {
    var tr = s+"."+j;
    r += this.create(s,"tr",tr);
    for(i=0;i<w;i++) {
      var td = tr+"."+i;
      r += this.create(tr,"td",td);
      if(d!=null) $_(td,d);
      else $_(td,"&nbsp;");
    }
  }
  return r;
}


для работы функции нужна функция create, создающая HTML-объект внутри существующего объекта, и до кучи функция remove, удаляющий объект по имени (идентификатору):

Code:
$W.create = function(p,t,s) {
  if($(s)!=null) return 0;
  var e = $(p);
  if(e==null) return 0;
  var n = document.createElement(t);
  if(n==null) return 0;
  n.id = s;
  e.appendChild(n);
  this.clear();
  return 1;
}

$W.remove = function(s) {
  var e = $(s);
  if(e==null) return 0;
  var p = e.parentNode;
  p.removeChild(e);
  this.clear();
  return 1;
}


пример вызова:
Code:
$W.table('tut',43,80,'tab','<img src=8x8.gif>');

где 'tut' является идентификатором тега, в который будет вставлена таблица, например:
Code:
<p id='tut'>&nbsp;</p>

_________________
:dj: https://mastodon.social/@Shaos


14 Nov 2012 14:35
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Post 
Поправил свою AJAX функцию чтобы не только в HTML-элемент удалённый контент вписывало, но и могла функцию вызывать, которая этот контект обрабатывала бы:

Code:
function $__(s,u) {
  var r = null;
  var p = arguments[2];
  try {
    r = new XMLHttpRequest();
  } catch(e) {
    r = null;
  }
  if(r!=null)
  {
    r.onreadystatechange = function() {
      if(r.readyState==4 && r.status==200) {
        if(typeof s == 'string') {
          $_(s,r.responseText);
        }
        if(typeof s == 'function') {
          s(r.responseText);
        }
      }
    }
    if(p==null) {
      r.open("GET",u,true);
      r.send(null);
    } else {
      r.open("POST",u,true);
      r.send(p);
    }
  }
}

_________________
:dj: https://mastodon.social/@Shaos


16 Nov 2012 15:52
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Post 
Пришло время добавлять в Webitable виртуальную машину :)

Предположим, что мы хотим иметь несколько "тредов", которые необязательно эмулируют одну и туже систему команд. Запуск интерпретатора будет осуществляться через setInterval(function,0), а остановка - через clearInterval(id). Теперь непосредственно о "тредах" - каждый тред будет представлять из себя массив указателей на функции, перебираемые при интерпретации. Каждому треду можно дать "приоритет" - количество "циклов", которые тред должен "прошагать", до того как отдаст управление следующему треду (приоритет 0 означает, что тред остановлен).

$W.threads = []; // сначала список тредов пуст

Чтобы узнать количество тредов в любой момент времени, просто берём $W.threads.length

Каждый тред будет представлять из себя объект с четырьмя полями - неким абстрактным объектом эмуляции o, массивом эмулирующих функций f (которым передаётся объект эмуляции o), адресом следующей команды a и приоритетом треда p: {o:{},f:[],a:0,p:1}

Code:
threads = [];
started = 0;
....
$W.add = function(obj) {
 var m = this.threads.length;
 this.threads[m] = {o:obj,f:[],a:0,p:0};
 return m;
}

$W.del = function(i) {
 this.threads[m] = null;
}

$W.fun = function(i,j,f) {
 this.threads[i].f[j] = f;
}

$W.pri = function(i,p) {
 this.threads[i].p = p;
}

$W.stop = function() {
 if(this.started!=0) {
   clearInterval(this.started);
   this.started = 0;
 }
}

$W.start = function() {
 var p = arguments[0];
 if(p==null) p=16; // 0.8 duty
 else p=p/5; // for 20 ms
 this.stop();
 this.started = setInterval(
  function() {
   var t0 = Date.now();
   while(Date.now()-t0 < p) {
    for(var j=0;j<1000;j++) {
     for(var t in $W.threads) {
      var th = $W.threads[t];
      for(var i=0;i<th.p;i++) {
       th.a = th.f[th.a](th.o);
      }
     }
    }
   }
  }, 20);
}


P.S. Потом сделаю генерацию анонимной функции в $W.start() через eval - будет чуток быстрее...

P.P.S. Подкорректировал функцию start, чтобы подстраивалась под быстродействие компьютера, но не забирала более 80% времени работы - на своём рабочем ноуте получил около полумиллиона вызовов в секунду :kruto:

P.P.P.S. На другом компьютере получилось более миллиона вызовов в секунду...

_________________
:dj: https://mastodon.social/@Shaos


10 Dec 2012 16:09
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Post 
Shaos wrote:
P.S. Потом сделаю генерацию анонимной функции в $W.start() через eval - будет чуток быстрее...


Сделал, но через Function (eval не работал в IE8):

Code:
$W.start = function() {
 var p = arguments[0]; // percentage
 if(p==null) p=16; // 0.8 duty
 else p=p/5; // for 20 ms
 this.stop();
 var sf = "var t=+new Date;";
 for(var t in $W.threads) {
  sf += "var t"+t+"=$W.threads["+t+"];";
 }
 sf += "while(+new Date-t<"+p+"){";
 var i,j=0;
 while(j<100) {
  for(var t in $W.threads) {
   for(i=0;i<$W.threads[t].p;i++) {
    sf += "t"+t+".a=t"+t+".f[t"+t+".a](t"+t+".o);";
    j++;
   }
  }
 }
 sf += "}";
 this.started = setInterval(Function(sf),20);
}


На линуксовых машинах FireFox делает 7 миллинов вызовов в секунду.
На виндовой машине - только 4 миллиона, а вот Chrome - все 14 (а через eval было аж 17 :o )
Opera - 7 миллионов
Safari - 3 миллиона
IE8 - только 200 тысяч...

P.S. На рабочем линуксовом компьютере около 8 миллионов FireFox делает, WebKit-браузер Epiphany делает 5 миллионов, а Konqueror только 750 тысяч

P.P.S. Предыдущий метод при больших приоритетах тоже даёт неплохие результаты, но трюковый метод всё-равно чуть быстрее...

P.P.P.S. Так как это у нас Threaded Code (шитый код), я решил переименовать новые функции Webitable:

$W.add -> $W.threaded_new
$W.del -> $W.threaded_delete
$W.fun -> $W.threaded_code
$W.pri -> $W.threaded_priority
$W.start -> $W.threaded_start
$W.stop -> $W.threaded_stop

_________________
:dj: https://mastodon.social/@Shaos


10 Dec 2012 21:20
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Post 
Shaos wrote:
Каждый тред будет представлять из себя объект с четырьмя полями - неким абстрактным объектом эмуляции o, массивом эмулирующих функций f (которым передаётся объект эмуляции o), адресом следующей команды a и приоритетом треда p: {o:{},f:[],a:0,p:1}


Вот думаю не добавить ли пятое поле - указатель на функцию, которая будет вызываться один раз за фрейм (50 раз в секунду)? Скажем назвать его f, а массив функций f переименовать в c (code).

_________________
:dj: https://mastodon.social/@Shaos


11 Dec 2012 23:34
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Post 
Shaos wrote:
Shaos wrote:
Каждый тред будет представлять из себя объект с четырьмя полями - неким абстрактным объектом эмуляции o, массивом эмулирующих функций f (которым передаётся объект эмуляции o), адресом следующей команды a и приоритетом треда p: {o:{},f:[],a:0,p:1}


Вот думаю не добавить ли пятое поле - указатель на функцию, которая будет вызываться один раз за фрейм (50 раз в секунду)? Скажем назвать его f, а массив функций f переименовать в c (code).


Добавил пятое необязательное поле, произвёл переименования и выложил на SourceForge CVS:

http://webitable.cvs.sourceforge.net/vi ... webitable/

_________________
:dj: https://mastodon.social/@Shaos


12 Dec 2012 00:42
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Post 
Shaos wrote:
$W.add -> $W.threaded_new
$W.del -> $W.threaded_delete
$W.fun -> $W.threaded_code
$W.pri -> $W.threaded_priority
$W.start -> $W.threaded_start
$W.stop -> $W.threaded_stop


Чего-то я думаю, что простые функции (del,fun,pri) надо убрать совсем - проще обращаться напрямую к $W.threads - тогда и короткие имена start и stop можно сохранить (а add переименовать в thread):

$W.threaded_delete -> threads[t] = null;
$W.threaded_code -> threads[t].c[j] = function(){...};
$W.threaded_priority -> threads[t].p = N;
$W.threaded_frame -> threads[t].f = function(){...};

_________________
:dj: https://mastodon.social/@Shaos


12 Dec 2012 22:43
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Post 
Shaos wrote:
На линуксовых машинах FireFox делает 7 миллинов вызовов в секунду.
На виндовой машине - только 4 миллиона, а вот Chrome - все 14 (а через eval было аж 17 :o )
Opera - 7 миллионов
Safari - 3 миллиона
IE8 - только 200 тысяч...


У меня опечаточка закралась в код - массив кодов почему-то был объектом - исправил на массив, перемерял:

Линуксовый FireFox - 12 миллионов
Линуксовая Opera 12.11 - 17 миллионов
Линуксовая Opera 11.52 - 16 миллионов
Линуксовая Opera 10.63 - 16 миллионов
Линуксовая Opera 9.64 - 0.8 миллиона
Виндовый FireFox - 7 миллионов
Виндовый Chrome - 24 миллиона
Виндовый Safari - 7 миллионов
Виндовая Opera 12.12 - 7 миллионов
Internet Explorer 8 - 0.2 миллиона

P.S. в 2018 году Webitable объединился с виртуальной машиной Robby и превратилось в Rgrid.js

_________________
:dj: https://mastodon.social/@Shaos


18 Dec 2012 16:12
Profile WWW
Display posts from previous:  Sort by  
This topic is locked, you cannot edit posts or make further replies.   [ 27 posts ]  Go to page Previous  1, 2

Who is online

Users browsing this forum: No registered users and 14 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.