You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/06-advanced-functions/09-call-apply-decorators/04-throttle/solution.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,10 +29,10 @@ function throttle(func, ms) {
29
29
}
30
30
```
31
31
32
-
Uma chamada de`throttle(func, ms)` retorna `wrapper`.
32
+
Uma chamada a`throttle(func, ms)` retorna `wrapper`.
33
33
34
-
1. Durante a primeira chamada, o `wrapper` apenas executa `func` e configura o estado de espera (`isThrottled = true`).
35
-
2. Neste estado todas as chamadas são memorizadas em `savedArgs/savedThis`. Note que ambos, o contexto e os argumentos, são igualmente importantes e devem ser memorizados. Nós precisamos deles simultaneamente para reproduzir a chamada.
36
-
3.Depois que `ms` milissegundos passam, `setTimeout` é acionada. O estado de espera é removido (`isThrottled = false`) e, se nós tivermos chamadas ignoradas , o `wrapper` é executado com os últimos argumentos e contexto memorizados.
34
+
1. Durante a primeira chamada, o `wrapper` apenas executa a `func` e define o estado de arrefecimento (`isThrottled = true`).
35
+
2. Neste estado todas as chamadas são memorizadas em `savedArgs/savedThis`. É de notar que tanto o contexto como os argumentos são igualmente importantes e devem ser memorizados. Nós precisamos destes simultaneamente para reproduzir a chamada.
36
+
3.Após `ms` milissegundos, `setTimeout` é acionada. O estado de arrefecimento é removido (`isThrottled = false`) e, se tivermos ignorado chamadas, o `wrapper` é executado com os últimos argumentos e contexto memorizados.
37
37
38
-
O terceiro passo executa não`func`, mas o `wrapper`, porque nós não só precisamos de executar `func`, mas mais uma vez, de entrar no estado de espera e configurar o tempo limite para reiniciá-lo.
38
+
O terceiro passo não executa a`func`, mas sim o `wrapper`, porque não só precisamos de executar a `func`, como também entrar novamente no estado de arrefecimento e configurar o tempo de espera para reiniciá-lo.
Copy file name to clipboardExpand all lines: 1-js/06-advanced-functions/09-call-apply-decorators/04-throttle/task.md
+22-22Lines changed: 22 additions & 22 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,52 +2,52 @@ importance: 5
2
2
3
3
---
4
4
5
-
# O Decorador Throttle
5
+
# Decorador Regulador
6
6
7
-
Crie um decorador de "estrangulamento" `throttle(f, ms)` -- que retorne um encapsulador.
7
+
Crie um decorador de "regulação" `throttle(f, ms)` -- que retorna uma função envolvente.
8
8
9
-
Quando for chamado várias vezes, ele passa a chamada para`f` no máximo uma vez por `ms` milissegundos.
9
+
Quando é chamado várias vezes, este passa a chamada a`f` no máximo uma vez por `ms` milissegundos.
10
10
11
-
A diferença de debounce é que é um decorador completamente diferente:
12
-
-`debounce` executa a função uma vez depois do período de "espera". Boa para processar o resultado final.
13
-
-`throttle`não é executada mais do que uma vez em`ms` de tempo. Boa para atualizações regulares que não sejam efectuadas num intervalo de tempo pequeno.
11
+
Em comparação com o decorador de redução, o comportamento é completamente diferente:
12
+
-`debounce` executa a função uma vez após o período de "arrefecimento". Bom para processar o resultado final.
13
+
-`throttle`executa a função não mais frequentemente do que o tempo dado`ms`. Bom para atualizações regulares que não devem ser muito frequentes.
14
14
15
-
Por outras palavras, `throttle` é como uma secretária que aceita chamadas telefónicas, mas incomonda o chefe (chama a `f` atual) não mais do que uma vez por`ms` milissegundos.
15
+
Por outras palavras, `throttle` é como uma secretária que aceita chamadas telefónicas, mas que incomoda a chefe (chama a verdadeira `f`) não mais do que uma vez por`ms` milissegundos.
16
16
17
-
Vamos verificar a aplicação na vida real para melhor compreender esse requisito e ver de onde ele vem.
17
+
Vejamos a aplicação na realidade para compreender melhor este requisito e ver de onde vem.
18
18
19
19
**Por exemplo, queremos rastrear movimentos do rato**
20
20
21
-
Num navegador, nós podemos configurar uma função para ser executada a cada movimento do rato e receber a localização do ponteiro à medida que ele se move. Num período de uso constante do rato, esta função geralmente é executada com muita frequência, pode ser algo como 100 vezes por segundo (a cada 10 ms).
22
-
**Gostaríamos de atualizar alguma informação na página web sempre que o ponteiro se mover.**
21
+
Num navegador, podemos configurar uma função para ser executada em cada movimento do rato e obter a localização do ponteiro à medida que este se move. Durante uma utilização ativa do rato, esta função é normalmente executada com muita frequência, podendo ser algo como 100 vezes por segundo (a cada 10 milissegundos).**Gostaríamos de atualizar algumas informações na página da Web quando o ponteiro se move.**
23
22
24
-
A função de atualização `update()` é muito pesada de se fazer a cada micro-movimento. Também não faz sentido executar isso mais de uma vez por 100ms.
23
+
...Mas a função de atualização `update()` é demasiado pesada para o fazer em cada micro-movimento. Também não faz sentido atualizar mais do que uma vez por 100ms.
25
24
26
-
Portanto, vamos atribuir `throttle(update, 100)` como a função a ser executada a cada movimento de rato ao invés da `update()` original. O decorador será chamado com frequência, porém `update()` será chamada no máximo uma vez por 100ms.
25
+
Por isso, a envolveremos no decorador: usamos `throttle(update, 100)` como uma função a ser executada em cada movimento do rato, em vez da `update` original. O decorador será chamado frequentemente, mas encaminhará a chamada a `update`no máximo uma vez a cada 100ms.
27
26
28
-
Visualmente, se parecerá com algo assim:
27
+
Visualmente, terá o seguinte aspeto:
29
28
30
29
1. Para o primeiro movimento do rato a variante decorada passa a chamada para `update`. É importante que o usuário veja a nossa reação aos seus movimentos imediatamente.
31
-
2. Depois, ao mover do rato, até `100ms` nada acontece. A variante decorada ignora as chamadas.
32
-
3. Ao final de `100ms` -- mais um `update` acontece com as últimas coordenadas.
33
-
4. Continuando, finalmente, o rato pára em algum lugar. A variante decorada espera até `100ms` expirarem e depois executa o `update` com as últimas coordenadas. Então, talvez o mais importante, as coordenadas finais do rato são processadas.
30
+
1. Para o primeiro movimento do rato, a variante decorada passa imediatamente a chamada a `update`. Isso é importante, o usuário vê a nossa reação ao seu movimento imediatamente.
31
+
2. Depois, à medida que o rato se move, até `100ms` nada acontece. A variante decorada ignora as chamadas.
32
+
3. No final de `100ms` -- mais uma `update` acontece com as últimas coordenadas.
33
+
4. Então, finalmente, o rato para em algum lugar. A variante decorada espera até `100ms` expiraram e depois executa a `update` com as últimas coordenadas. Assim, o mais importante, as últimas coordenadas do rato são processadas.
34
34
35
-
Um código de exemplo:
35
+
Um exemplo de código:
36
36
37
37
```js
38
38
functionf(a) {
39
39
console.log(a);
40
40
}
41
41
42
-
// f1000 passa chamadas para f no máximo uma vez por 1000 ms
42
+
// f1000 passa chamadas a `f` no máximo uma vez por 1000 ms
43
43
let f1000 =throttle(f, 1000);
44
44
45
45
f1000(1); // exibe 1
46
-
f1000(2); // (estrangulamento, 1000ms ainda não passaram)
47
-
f1000(3); // (estrangulamento, 1000ms ainda não passaram)
46
+
f1000(2); // (regulação, 1000ms ainda não passaram)
47
+
f1000(3); // (regulação, 1000ms ainda não passaram)
48
48
49
-
// quando o tempo de 1000ms estiver esgotado...
49
+
// quando o tempo de 1000ms se esgota...
50
50
// ...exibe 3, o valor intermédio 2 foi ignorado
51
51
```
52
52
53
-
P.S. Os argumentos e o contexto `this` passados para`f1000` devem ser passados para a função original `f`.
53
+
P.S. Os argumentos e o contexto de `this` passados a`f1000` devem ser passados a `f` original.
0 commit comments