Replies: 28 comments
-
Motivação 6O Google Analytics, provavelmente é o arquivo JavaScript mais usado no mundo! Sabem quantos use strict ele tem? https://www.google-analytics.com/analytics.js Nenhum. Provavelmente no Google, eles devem ter feito essa conta. |
Beta Was this translation helpful? Give feedback.
-
Motivação 7O Twitter, que é uma ótima referência diferente do Facebook, faz request de 4 arquivos JS + um native_bundle_v1 quando abri em aba privada. jQuery + Twitter - init.ed8d97cfa822b126eec2277d2c5a8938053ff89a.js - 12 use strict |
Beta Was this translation helpful? Give feedback.
-
O @grvcoelho que me questionou sobre isso a alguns dias, resolvi sair pesquisando e faz muito sentido. Gostaria de saber a opinião de outras pessoas também. |
Beta Was this translation helpful? Give feedback.
-
no desenvolvimento tem que utilizar... // 'use strict';
const a = [1, 2, 3];
for (y of a) {
console.log(y);
} out: 'use strict';
const a = [1, 2, 3];
for (y of a) {
console.log(y);
} out: e em produção que é o caso do GA e o seu também, deixa que o Avoid bugs!! |
Beta Was this translation helpful? Give feedback.
-
@lagden: o primeiro ponto do @felquis foi a utilização de um linter! Um linter ia pegar o erro do exemplo que você deu :D |
Beta Was this translation helpful? Give feedback.
-
sim... mas você não coda sozinho... se um outro cara pegar o código e for um novato, com certeza ele não terá o linter configurado... |
Beta Was this translation helpful? Give feedback.
-
@lagden pois é
http://eslint.org/docs/rules/no-undef O Linter é um processo que passa no Continuous Integration Thiago. |
Beta Was this translation helpful? Give feedback.
-
o importante é deixar seu |
Beta Was this translation helpful? Give feedback.
-
Então, Pensando em ES6, teoricamente, quando você usa ES6 Modules, o seu código já é implicitamente O Google Analytics provavelmente não usa porque não vai fazer diferença naquele código minúsculo - até porque não dá pra ter o Google como referência pra melhores práticas de código, ou estou errado? xD E pra fechar, sobre a questão do linter, apesar de ele não permitir fazer coisas erradas, existem comportamentos que você não pode evitar: o O ponto-e-vírgula ok, é desnecessário em boa parte dos casos, então podemos evitar, desde que o linter esteja configurado corretamente. Mas o |
Beta Was this translation helpful? Give feedback.
-
@lagden: não! Linter é obrigatório! No nosso caso, tem um hook de precommit do github e passa no CI Se o linter não for enforced, ele não serve para nada |
Beta Was this translation helpful? Give feedback.
-
mas o lint é configurável!!! muita atenção!! ele mesmo... node 4.0.0 // 'use strict';
const a = [1, 2, 3];
for (const y of a) {
console.log(y);
} out: lint foi pro espaço!!! sempre digo... avoid bug!!! |
Beta Was this translation helpful? Give feedback.
-
Acredito que a moral da história é: Uma boa prática, é evitar dezenas de |
Beta Was this translation helpful? Give feedback.
-
Visto que a grande maioria cria JS pro front com builds, module bundlers, etc, sou da opinião de que o |
Beta Was this translation helpful? Give feedback.
-
@joaolucasl o mesmo bug se aplicava para o chrome já que ele utiliza o |
Beta Was this translation helpful? Give feedback.
-
Mas isso é algo bem pontual né @lagden? É um bug da engine, poderia mto ser o contrário: não funcionar no strict e funcionar no normal, ao que parece? |
Beta Was this translation helpful? Give feedback.
-
ai carai!! hihihi... |
Beta Was this translation helpful? Give feedback.
-
To perguntando namoralzinha, fiquei curioso mesmo! Sem avacalhar hahahaha |
Beta Was this translation helpful? Give feedback.
-
@joaolucasl não é contigo... o @felquis fez um lindo trabalho e a conclusão dele é excelente, mas pode dar problemas dependendo do vendor!! exemplo: se você utiliza o código de um vendor e o pia escreveu assim... var a = [1, 2, 3];
for (var i = 0; i < a.length; i++) {
y = a[i];
} sem o colocar o 1 por isso recomendam utilizar o o assunto é delicado... |
Beta Was this translation helpful? Give feedback.
-
Existe estes dois caras né: Código da Casa e Código de Terceiros. No Código de Terceiro o máximo que fazemos é concatena-los em um bundle, da forma que eles são, ninguém altera um código de terceiro, eles permanecem intocáveis. No Código da Casa é onde você tem total poder de edição, é aqui que aconcelho ter apenas 1 use strict. Beleza @lagden? |
Beta Was this translation helpful? Give feedback.
-
@felquis mas rola fazer coisas pretty crazy!! app.html <script src="bundle-vendor.js"></script>
<script src="bundle-my.js"></script> bundle-vendor.js var a = [1, 2, 3];
for (i = 0; i < a.length; i++) {
y = a[i];
console.log('vendor', y);
} bundle-my.js console.log(y);
var x = y || 1;
console.log(x); |
Beta Was this translation helpful? Give feedback.
-
No bundle-my.js o ESLint não vai deixar vc usar uma variável Y pois ela não foi definida. Geralmente o bundle-my.js é algo como: ;(function (window, document, undefined) {
'use strict'
/* lots of js */
}(window, document)) |
Beta Was this translation helpful? Give feedback.
-
sim... fiz um exemplo de qualidade altamente tosco!! |
Beta Was this translation helpful? Give feedback.
-
eu tive uma problema em 2014 com relação a meu time na época da comscore usava angular e um dos módulos que injetamos tinha sobre um dos seus argumentos... você esqueceu de
76 bytes |
Beta Was this translation helpful? Give feedback.
-
Muito bem notado @rictorres obrigado :D |
Beta Was this translation helpful? Give feedback.
-
Ponto e virgula é controlável se usar um minifier, irrelevante ter ou não, assim como quebra de linha. ES Modules são use strict, sem declaração. Muitos desses códigos são gerados por transpiler que, para reproduzir um ambiente similar em ES5, colocam 'use strict' na função. Isso pode ser gerenciável via bundler (webpack, rollup, browserify, etc). Usar o modo strict é muito mais questão de adaptação hoje em dia. Se você migrar seu código para ES Modules, você pode evitar uma dor de cabeça extra com erros surpresa. Mas aí é viver na incerteza: quando migrar. Se você publica uma biblioteca para ser consumida por outras pessoas, é importante usar, como código de terceiros evita que encontrem incompatibilidades fora do seu escopo. |
Beta Was this translation helpful? Give feedback.
-
Eu não estou mais usando e nem ; por incrível que pareça LOL Alguém aí está seguindo? https://github.com/feross/standard |
Beta Was this translation helpful? Give feedback.
-
Adiós ;) |
Beta Was this translation helpful? Give feedback.
-
@suissa gosto do XO |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Continuando a discussão iniciada em #257 porém com um pouco mais de acidez.
Motivação
Se nosso código já está passando por um linter, que não nos permite fazer várias coisas erradas no JavaScript, por que precisamos do
'use strict'
?Motivação 2
Recentemente vi um projeto que tinha cerca de 260 ocasiões de
'use strict'
, isso me deixou pensando..Motivação 3
Abri o código do Facebook, além de carregar 1.4mb de JS em 85 requests, ordenei a tabela pelo size dos arquivos, abri o maior que tinha e encontrei 680 ocorrências de
'use strict'
Motivação 4
Teoricamente, não precisamos de centenas de 'use strict', mas se todo o código abaixo está sob nosso controle, precisamos de apenas 1
'use strict'
visto que module bundlers, geralmente deixam todo o código embaixo de uma IIFEComo saber a quantidade de bytes que o use strict ocupa
O
use strict
pesa 12 bytes, pelo site byte counter ou se vc salvar um arquivo com 10use strict
um do lado do outro, este arquivo irá pesar 121 bytes... 1 byte deve ser algo do arquivo mesmo.Então deve ser isso mesmo, a quantidade de bytes é relacionada a quantidade de caracteres..
Então segundo a calculadora do Google bytes to kilobytes
680 * 12 / 1000
da 8.16kbMotivação 5
Se um site tem 1 milhão de unique page views no mês, e no Brasil temos sites com muito mais que isso.
(680 * 12) * 1000000 = 8160000000 o que da 8,16GB de transferência de dados apenas em 1 mês... e jogando isso por ano 8.16 * 12 fácil fácil o Facebook se manter aquele script por 1 ano ele vai ter bem mais que 97GB de transferências só de
use strict
Conclusão
Precisamos mesmo do use strict se nosso projeto está bem lintado e sob o nosso controle? Se tivermos apenas 1
use strict
já não deveria resolver?NOTA: só neste artigo tem
"'use strict'".repeat(14).length * 12 / 1024
1.96kb de use strictBeta Was this translation helpful? Give feedback.
All reactions