Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Performance Tips on Javascript

Avatar for yang qi yang qi
October 28, 2013

Performance Tips on Javascript

Presentation on webrebuild

Avatar for yang qi

yang qi

October 28, 2013

Other Decks in Technology

Transcript

  1. Topics Scope: – Single-page application – Ajax and Web 2.0

    – Download and execute more code as you interact Topics: – Variable Scope Management – Data accessing – Loops & Functions – ASMJS
  2. Scope Chain ? How to find out a variable ?

    – Variable inside javascript: Data Reference. – How to locate a variable in functions: From Local to Global – What does the VM do before execution a function? • Create a stackframe before getting into functions • Reference all the outer function variables by pointers to array in stackframe • Referencing local variables in stackframe • Push stackframe into vm's execution context • All the stackframes => Scope Chain – What does the VM do during execution ?
  3. Matters ? It really matters? – Testing cases: • scope

    chain lookups • Scope Chain • Simple Test – ResuIt: It does NOT matter ! Special cases – try/catch – try/catch with fail
  4. Scope Chain ? Why ? – Just in time compiler!

    • All the variables is looked up inside the scope chain as less times as possible. • Once referenced, cached it! • Check the type & avaibilities on the fly with minus cost (usually assembly code) – The state of art javascript vm supporting jit! What matters ? – Calling slower routings (exception blow up) – Variable type changed during executions (delete a.b)
  5. Ways of data accessing Data variables for accessing – Literal

    value – Variable – Object property – Array item
  6. The old report Data variables for accessing – Literal value

    – Variable – Object property – Array item
  7. The latest report Data variables for accessing – Variable vs

    Object property • Nearly the same. Thanks to hidden class and jit. • A hidden class is some hint that provide the jit how to access the property data inside a object. – Array item vs Object property • Object is faster than array in dealing with sparse data.
  8. Loops for (a in b) / forEach – Loops tests

    – for (A in B )? • Same: – Pickout A from B each loop – Create reference on the fly • Diff: – foreach use iterator & generator – for-in track whether this property is enumable. – Using normal while/for loop will be better. For / While – For vs While – It is nearly the same
  9. Functions Arguments/ Prameters – args vs params – Please using

    parameters. Function Costs – Function cost • Creating stackframes. • Maintaining local variables. • GC. – Try to inline something
  10. ASMJS ASMJS ? – an extraordinarily optimizable, low-level subset of

    JavaScript Performance Boost? – fib normal vs asm • Using asmjs slower! (Due to compilation overhead) • DFG etc is enough to find out the data types. – asm vs no-asm Conclusion – Better NOT use it now!
  11. Rock & Roll Write simple code ! Do not use

    asmjs now! Use more hint to ignite the v8/squirrelfish !