Anonymní profil peter – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil peter – Programujte.comAnonymní profil peter – Programujte.com

 

Příspěvky odeslané z IP adresy 2001:718:2601:26c:4119:aa...–

peter
JavaScript, AJAX, jQuery › rychlejsi zmereni sirky slou…
10. 5. 2017   #215948

Jo, to je presne ten problem. V tom kodu si to muzes debugovat nebo napsat alerty, kdybys chtel. li = 20, takze to prochazi jen prvni radek. ale trva to 0.4s, coz je moc. Ted se mi podarilo najit kod pro mereni textu. Projdu slovo po slove, protoze to mam v poli a cas je 25% :)
V okamziku, kdyz v puvodnim kodu napisi offset, treba pro element table, tak cas vyskoci z 20 na 400.

function getTextWidth(text, font) {
    // re-use canvas object for better performance
    var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
    var context = canvas.getContext("2d");
    context.font = font;
    var metrics = context.measureText(text);
    return metrics.width;
}
getTextWidth.canvas = document.createElement("canvas")

Na te strance stackoverflow je i reseni s divkem, ale to se ukazalo jako stejne pomale, jako je offset pro td.

peter
JavaScript, AJAX, jQuery › rychlejsi zmereni sirky slou…
10. 5. 2017   #215940

http://mlich.zam.slu.cz/js-zas2/zas2.htm
Kdyz si rozbalite log, tak mezi c1 a c2 je 400 jednotek casu, ktere jen meri sirku bunek.
Nasel jsem ruzne navody podle mereni delky textu, ale to mi prijde nepouzitelne.
Potrebuji to kvuli tomu zahlavi, vyhledavani, pripadne polohu seznamu slov. Nechci to lepit dovnitr te tabulky, co by ji zpomalovalo, si myslim.

peter
JavaScript, AJAX, jQuery › rychlejsi zmereni sirky slou…
10. 5. 2017   #215939

Mam funkci pro mereni sloupcu tabulky. Problem je, ze trva 400 jednotek casu. Tabulka samotna se vykresluje asi 40 jednotek. Ma 800 radku, 20 sloupcu. Vsechno se to zkazi az tim cyklem v okamziku, kdy tam dam tds[i].offsetLeft nebo tds[i].offsetWidth. Je uplne jedno, jestli to prirazuji do promenne. Neni nejaky rychlejsi zpusob?

ENG.func.colsWidth = function(table)
{
var theads, trs, tds, i, li, pos;
trs = table.getElementsByTagName('TR');
if (!trs || trs.length==0) {return;}
tds = trs[0].getElementsByTagName('TH');
if (!tds || tds.length==0) {return;}
li = tds.length;
pos = {};
//ENG.func.log('c1=' + PERF.getTime());
for (i=0;i<li;i++)
	{
	pos = {'left':tds[i].offsetLeft, 'width':tds[i].offsetWidth};
	ENG.data.rendered_cols[i].pos = pos;
	}
//ENG.func.log('c2=' + PERF.getTime());
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý