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