Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Минимизация js программы 20 строк 500 символов. Считает скорость набора. (https://javascript.ru/forum/misc/46261-minimizaciya-js-programmy-20-strok-500-simvolov-schitaet-skorost-nabora.html)

xcislav 03.04.2014 15:19

Минимизация js программы 20 строк 500 символов. Считает скорость набора.
 
Тест можно наблюдать
lanother.tk/ccc.php

<form>
<textarea id="tb"></textarea>
<p id="pr" />
<input onclick="clc();" />
</form>
<script>
function initpr() {
bx = document.getElementById('tb');
bx.onkeypress = function () {
ts = te = new Date();
bx.onkeypress = function (en) {
te = new Date();
}
}
}
function clc() {
r = document.getElementById('pr');
deltams = te.getTime() - ts.getTime();
chars = bx.value.length;
cpms = chars / deltams;
r.innerHTML = chars+" chars (in "+deltams+" ms): "+cpms+" cpms";
initpr();
}
initpr();
</script>


Как только набрано в боксе и после того, как в нижний бокс щёлкнута мышь, программа начинает исполнение:
Выполняется фукнция clc() , где в конце функция initpr() - АТТАЧИТ bx к textarea, инициализируется дата start/end форматом new Date()
и bx.onkeypress = тут же обновляет te (концовку) новой датой new Date ()
*старая ts (старт) остаётся.

Вопрос №1: Почему initpr(); исполняется дважды - первый раз после всего clc() и второй до всего - сразу при загрузке страницы. (может быть тут есть излишество?) И как убрать это двойное излишество?
#догадка# может быть, это связано с минимально двумя клавишами нажатия в textarea.
(Хотя, я думаю, что двухклавишный минимум - внутри функции initpr)

Вопрос №2: Можно упростить initpr? (убрать function):

function initpr() {
   bx = document.getElementById('tb');
   bx.onkeypress = function () {
       ts = te = new Date();
       bx.onkeypress = function (en) {
           te = new Date();
       }
   }
}


Тут: 2 function, 2 onkeypress, две new Date() - и, собственно, внутренние циклы (структуры).


Остальные вопросы (ввод и вывод данных):
C .innerHTML вроди бы разобрался - он выводит.
document.getElementById() - находит и берёт куда-то данные

bx = document.getElementById('tb');
   bx.onkeypress = function () {


Данные попали в bx. Тогда уж можно ли написать что-то вроде:
function initpr() {
document.getElementById('tb').onkeypress = function () { ts = te = new Date();
bx и ...так далее без функций?

Наверное, я на этот вопрос я ещё не готов понятно ответить:
Цитата:

r = document.getElementById('pr');
~ .. МАТЕМАТИКА .. ~
r.innerHTML =
(математика понятна - дополнять не нужно)

getElementById/innerHTML - тут действуют в жёсткой связке?
И какова природа их взаимодействия.



Мне, конечно было бы проще целиком понять программу - если бы в ней не было двух функций и вообще не было функций.

А то запутался в двух соснах - двух функциях. Да ещё этих точек не знаю.

------
Спасибо за внимание.

jsnb 03.04.2014 16:12

Цитата:

Сообщение от xcislav (Сообщение 305855)
В JS, как вы уже увидели - не разбираюсь. НУЛЬ =)

А от нас чего надо тогда? Обучения методами телепатического внушения что ли? Какой смысл отвечать на твои вопросы, если ты ответов не поймешь?


Часовой пояс GMT +3, время: 10:40.