26/12/2009

Fastest Iteration

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π²: ЭкспСримСнты — Nicolas Prof @ 11:28

НСбольшой наглядный тСст, сравнСния ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ. ΠžΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ дискуссий Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π° ΠΈΠ»ΠΈ иная итСрация быстрСС Π΄Ρ€ΡƒΠ³ΠΎΠΉ.
Π‘Π°ΠΌΠΎΠ΅ интСрСсноС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΡ‡Π΅Π½ΡŒ большом количСствС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ (1 000 000 000), Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°ΠΌΠΈ For, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ исчСзаСт.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСста ΠΏΡ€ΠΈ 1 000 000 000 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ:

4103 ms
5340 ms
4087 ms
4089 ms
4090 ms
4090 ms

Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² дСйствии

P.S.
ΠŸΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ врСмя Π½Π° Ρ‚ΠΈΠΏ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠ»ΠΎ Π² Ρ€Π°ΠΉΠΎΠ½Π΅ 500мс.
На Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌ процСссорС, это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 100 000 000 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ.
Π’Π°ΠΊ ΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ самая мСдлСнная итСрация, это ΠΊΠΎΠ³Π΄Π° Π² конструкции For, i ΠΈ len ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ int ΠΈ uint, ΠΏΡ€ΠΎ Number Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ стоит Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ.

07/12/2009

Tips & Tricks 3

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π²: ΠžΠΏΡ‹Ρ‚ — Вэги: , — Nicolas Prof @ 22:05
  1. Papervision: ΠŸΡ€ΠΈ использовании 3Π” Π½Π° сайтС, Π² 90% случаСв Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ 3D ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅ 1:1 ΠΊ 2D ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. Π’ послСднСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΡƒΠ± ΠΊΠ°ΠΊ элСмСнт Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ этом тСкстуры Π½Π° гранях Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ:
    [as]
    _camera.z = (_camera.zoom – 1) * _camera.focus + _cubeSide * 0.5;
    [/as]
    ΠΊΡƒΠ± находится Π² Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ….
  2. Если Π΅ΡΡ‚ΡŒ XML Π΄Π΅Ρ€Π΅Π²ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ, ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅ XML property ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π²ΠΎ всСх элСмСнтах Π΄Π΅Ρ€Π΅Π²Π°. И ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°:
    [as]
    myXML..item.(@id == someID)
    [/as]
    Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ReferenceError ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ пСрСмСнная @id Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€:
    [as]
    myXML..item.(attribute(‘id’) == someID)
    [/as]
  3. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сайта, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с SharedObject, приходится ΠΏΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π½Π° сайтС, ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ. Π‘Π°ΠΌΡ‹ΠΉ простой способ, это ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» .sol. Если Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ очистка кэша Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ, Ρ‚ΠΎ Π²Ρ‹ ΠΎΡˆΠΈΠ±Π°Π΅Ρ‚Π΅ΡΡŒ. Π’Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ, ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ SharedObject. Но всС ΠΆΠ΅, ΠΏΠ°Ρ€Ρƒ Ρ€Π°Π· ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ· систСмы, ΠΊΠ°ΠΊ ΠΏΠΎ ΠΌΠ½Π΅, ΠΏΡ€ΠΎΡ‰Π΅. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, Π³Π΄Π΅ ΠΈΡ… ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… систСмах, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Wikipedia
  4. Timer ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ сразу послС Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° start(), Π° лишь Ρ‡Π΅Ρ€Π΅Π· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ delay, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π² конструкторС. Π§Ρ‚ΠΎ Π±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сразу, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ всСго ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:
    [as]
    _someTimer.dispatchEvent(new TimerEvent(TimerEvent.TIMER));
    _someTimer.start();
    [/as]

    [as]
    this.someTimerListener(null);
    [/as]
    Π’Ρ‹Π·Π²Π°Ρ‚ΡŒ сразу listener, ΠΏΠ»ΠΎΡ…ΠΎ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ updateAfterEvent

  5. Маска с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ прозрачности с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ BlendMode. Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ Π²Π΅Ρ‰ΡŒ, ΠΊΠ°ΠΊ для программистов, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΡƒΡŽ маску, ΠΈ ΠΏΡ€ΠΈ этом ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΏΠΎΠ΄ маской анимируСтся, Ρ‚Π°ΠΊ ΠΈ для Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
    Π’Π΅Ρ…Π½ΠΈΠΊΠ° ΠΎΡ‡Π΅Π½ΡŒ проста:
    Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, маска ΠΈ содСрТимоС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ маску. Для этого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° устанавливаСм BlendMode.LAYER.
    [as]
    _container.blendMode = BlendMode.LAYER;
    [/as]
    ВсС размСщаСтся ΠΏΠΎ слоям. Маска ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ находится Π²Ρ‹ΡˆΠ΅ содСрТимого. Для маски устанавливаСм BlendMode.ALPHA.
    [as]
    _gradMask.blendMode = BlendMode.ALPHA;
    [/as]
    Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС выходящСС Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ маски, создаСтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° маска, ΠΈ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ способом примСняСтся ΠΊ содСрТимому
    [as]
    _content.mask = _mask;
    [/as]

    Π’ ΠΈΡ‚ΠΎΠ³Π΅, всС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π³Π΄Π΅ Ρ‚ΠΎ Ρ‚Π°ΠΊ:
    [as]
    _container.addChild(_content);
    _container.addChild(_gradMask);
    _container.addChild(_mask);

    _gradMask.mouseEnabled = false;
    _gradMask.blendMode = BlendMode.ALPHA;
    _container.blendMode = BlendMode.LAYER;
    _content.mask = _mask;
    [/as]

    P.S.
    Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ для Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ΠΎΠ². Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Movieclip, мСняСм Π΅ΠΌΡƒ BlendMode Π½Π° Layer, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π² Π½Π΅Π³ΠΎ 3 Movieclip’a: НиТний слой – Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅, Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ слой – маска, Π΄Π΅Π»Π°Π΅ΠΌ Π΅Π΅ маской для содСрТимого, Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ слой – полупрозрачная маска, мСняСм Π΅ΠΉ BlendMode Π½Π° Alpha (Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΡƒΡŽ маску ΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ маску, ΠΈΠ»ΠΈ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π΅Π΅ Ρ‚ΠΎΠΆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ маской).

    P.P.S.
    Если ΠΊΡ‚ΠΎ Ρ‚ΠΎ всю Тизнь пользовался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊΠΈΠΌ способом с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ BlendMode, Ρ‚ΠΎ для вас Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ простой способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для статичСского содСрТимого, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ тСкст.
    [as]
    _mask.cacheAsBitmap = true;
    _content.cacheAsBitmap = true;
    _content.mask = _mask;
    [/as]

    Π’Π΅ ΠΆΠ΅ ΠΊΡ‚ΠΎ Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ BlendMode + cacheAsBitmap, Ρ‚ΠΎ исправляйтС ΠΊΠΎΠ΄. Π Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ cacheAsBitmap для слоТного Π²Π΅ΠΊΡ‚ΠΎΡ€Π°.

 
ο»Ώ
Menu:
Twitter Updates:
    Archive:
    Control:
    Flash & Flex friends: