Dicas louco pela Microsoft: JScript vs JavaScript (parte 1)

Até agora nós esperar da Microsoft praticamente tudo, especialmente quando se trata do browser. Ofender a comunidade de inteligência, no entanto, é um pouco 'desconfortável para aceitar.
No Blog IE7 saiu hoje um artigo ( IE + JScript Desempenho Recomendações Parte 3: As ineficiências código JavaScript ), se assim podemos chamar Peter Gurevich, Desempenho PM para o IE, com a parte III do seu "conselho" para os desenvolvedores.

Primeiro ponto: por que a Microsoft está tão determinado a implementar a sua própria versão de JavaScript - JScript chamado apenas isso - complica a vida, afinal?

Segundo ponto: só porque o mecanismo JScript é de propriedade da Microsoft, em vez de perder tempo a dizer "nós" como contornar as falhas, por que não resolvê-los de uma vez por todas?

Deixando de lado a primeira sugestão desta Parte III, que você pode ler diretamente no blog ou em Ajaxian , o segundo é realmente impressionante, e eu sinceramente não diregisco próprio.

Não use Accessor Propriedade Funções

Quando você diz que progresso! Em pleno 2007, a Gerente de Projetos da Microsoft está nos desenvolvedores dizendo para não usar as funções get e set em JScript!
A loucura, é claro, é um estranho mal que afeta de modo repentino e enganosas. JScript - no estilo de Javascript - é implementado seguindo um modelo de objeto! É uma linguagem orientada a objetos, na esteira do C + +. O fato de que as variáveis ​​são acessíveis a partir do exterior (como apontado no artigo - óbvio por sinal) não é, definitivamente, um orgulho, de fato. A técnica de encapsulamento é a sua filosofia de programação OO. Encapsular as propriedades, a partir de-método virtual get e set é uma força para a linguagem Object Oriented, não um limite. Aconselho a não usá-los é nada menos do que criminal, bem como quaisquer problemas de desempenho são de responsabilidade do intérprete e de seus autores, e não o desenvolvedor final.
Então, no final, JScript é utilizado como um simples C, ai de tratá-lo como C + +, caso contrário, "impallare" do navegador ou qualquer outra coisa.

Além disso, como observou no blog, o todo é um falso problema, porque JScript não implementa as funções reais get e set só Javascript faz!

Mas o problema, obviamente, permanece. Em JavaScript (JScript desculpe, mas eu simplesmente não consigo digeri-lo), existem várias técnicas para criar um objeto. Por exemplo, você pode criá-lo on the fly assim:

1
2
3
4
5
{ var myObject = {
, miaProprieta: 0,

( ) { alert ( "Hello" ) ; } mioMethodo: function () {alert ("Olá");}
};

Desta forma, eu não declarei uma classe. O objecto é, por assim dizer declara e cria ao mesmo tempo. É uma maneira rápida quando o objeto que precisamos é único.

Ou, o que é equivalente, para fins práticos:

1
2
3
4
5
6
7
8
CMyObject função () {
= 0 ; este miaProprieta = 0.;

= function ( ) { alert ( "Hello" ) } isso. myMethod = function () {alert ("Olá")}

}
/ /
new CmyObject ( ) ; iMyObject CMyObject var = new ();

) e poi si crea esplicitamente l'oggetto con new . Neste caso, primeiro definir a classe - usando uma function - ( CmyObject ) e, em seguida, você explicitamente criar o objeto com new .

Uma parte das questões estilísticas relativas ao único desenvolvedor, o problema de como acessar as propriedades de uma classe permanece. Eu recomendo a todos os interessados, comumque, para ler as respostas para o Blog da Microsoft, realmente interessante.

No Blog havia três modos de acesso: com as funções get e set, direto e que se deslocam de protótipo. No final da coisa que era agradável no blogue existe um código para executar um testdrive, um teste de um dos três métodos acima mencionados. O código está presente no blog, mas eu relatá-lo aqui para ser completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<script>
/ / Carro lento definição
Função SlowCar ()
{
= 17 ; . este m_tireSize = 17;
= 250 ; // One can always dream! isso. m_maxSpeed ​​= 250, / / Pode-se sempre sonhar!
= SlowCar_get_tireSize ; . este GetTireSize = SlowCar_get_tireSize;
= SlowCar_put_tireSize ; . este SetTireSize = SlowCar_put_tireSize;
}
Function () SlowCar_get_tireSize
{
; devolver este m_tireSize.;
}
value ) Função SlowCar_put_tireSize (valor)
{
= value ; . este m_tireSize = valor;
}
</ Script>


<script>
/ / Mais rápido de carro, não mais os assessores da propriedade
Função FasterCar ()
{
= 17 ; . este m_tireSize = 17;
= 250 ; // One can always dream! isso. m_maxSpeed ​​= 250, / / Pode-se sempre sonhar!
}
</ Script>


<script>
/ / Protótipo de carro, use os recursos de linguagem!
Função PrototypeCar ()
{
= 17 ; . este m_tireSize = 17;
= 250 ; // One can always dream! isso. m_maxSpeed ​​= 250, / / Pode-se sempre sonhar!
}

= function ( ) { return this . m_tireSize ; } ; .. PrototypeCar Prototype GetTireSize = function () {return este M_tireSize;.}
= function ( value ) { this . m_tireSize = value ; } ; . PrototypeCar Prototype SetTireSize = function (value) {this M_tireSize = valor;.}.;
</ Script>


<script>
Função TestDrive ()
{
new SlowCar ( ) ; // Safe and reliable, probably not fast slowCar SlowCar var = new () / / Seguro e confiável, provavelmente não é rápido
new FasterCar ( ) ; // Lacks air-bags, probably faster fasterCar FasterCar var = new () / / Falta air-bags, provavelmente mais rápido
new PrototypeCar ( ) ; // Can technology win the day? protoCar PrototypeCar var = new () / / Pode tecnologia ganhar o dia?


( new Date ( ) ) . getTime ( ) ; var start = (new Date ()) getTime ().;
var i = 0 ; i < 100000 ; i ++ ) { slowCar. SetTireSize ( slowCar. GetTireSize ( ) + 1 ) ; } for (var i = 0; i <100000; i + +) {slowCar SetTireSize (slowCar. GetTireSize () + 1);.}
( new Date ( ) ) . getTime ( ) ; var fim = (new Date ()) getTime ().;
"Slow Car " + ( end - start ) + "<br>" ; innerHTML + = "carro lento" + (end - start) saída + "<br>";.


new Date ( ) ) . getTime ( ) ; iniciar = (new Date ()) getTime ().;
var i = 0 ; i < 100000 ; i ++ ) { fasterCar. m_tireSize += 1 ; } for (var i = 0; i <100000; i + +) {fasterCar m_tireSize + = 1;.}
new Date ( ) ) . getTime ( ) ; final = (new Date ()) getTime ().;
"Faster Car " + ( end - start ) + "<br>" ; innerHTML + = "Car Faster" + (end - start) saída + "<br>";.


new Date ( ) ) . getTime ( ) ; iniciar = (new Date ()) getTime ().;
var i = 0 ; i < 100000 ; i ++ ) { protoCar. SetTireSize ( protoCar. GetTireSize ( ) + 1 ) ; } for (var i = 0; i <100000; i + +) {protoCar SetTireSize (protoCar. GetTireSize () + 1);.}
new Date ( ) ) . getTime ( ) ; final = (new Date ()) getTime ().;
"Prototype Car " + ( end - start ) + "<br>" ; saída innerHTML + = "Prototype Car" + (end - start) + "<br>".;
}
</ Script>

"TestDrive();" > Test Drive Cars !</ button > <Button Onclick = "TestDrive ();"> Test Drive Cars! </ Button>
"output" ></ div > <div Id = "output"> </ div>

Agora, esta é a saída (em relação à minha máquina) com IE7:
Carro lenta 515
Faster Car 63
Protótipo de carro 547

Com o Firefox (v.2.0.0.1):
Carro lenta 156
Faster Car 47
Protótipo de carro 172

Com o Opera (v.9.10):
Carro lenta 172
Faster Car 47
Protótipo de carro 172

Em resumo :) IE7 sai muito mal ... Eu não sei se você percebe a diferença enorme. Então, eu diria JScript pode ser abolida, apagado, apagado, vaporizado. Esperamos que a Microsoft decide adotar seus substitutos também javscript e não.

Não há comentários para este post

Deixe um comentário

TAG XHTML permita: Código de acesso:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL