Your JavaScript Library

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

5 comments

Comments 1 - 5 of 5 previous next Post a comment

  • + Dmitry.Baranovskiy Dmitry Baranovskiy 1 week ago
    @mangrar That was a whole point of the slide. Of course it works better when I talking next to slide.
  • + mangrar mangrar 1 week ago
    About the for loop in the slide 24, don’t you think this is better?:

    var arrLength = a.length;
    for(var i=0; i

    In your sample, in any iteration you call a.length, with acces to arrLength var you get better performance, I think, because you only call a.length one time.
  • + Dmitry.Baranovskiy Dmitry Baranovskiy 1 week ago
    There will be audio on the Edge of the Web web site. So far you can take a look at detaild notes: http://passingcuriosity.com/2009/notes-on-dmitry-baranovskiys-talk-on-your-javascript-library/
  • + gueste98522 Kevin 1 week ago
    Is there a video or some audio to go along with this presentation?
  • + Cary Cary Yang 1 week ago
    generally speaking why and how to make a js lib
Post a comment
Embed Video
Edit your comment Cancel

28 Favorites & 1 Group

Your JavaScript Library - Presentation Transcript

  1. Your JavaScript Library Edge of the Web ’09 Dmitry Baranovskiy
  2. http://www.atlassian.com/
  3. http://raphaeljs.com/ http://g.raphaeljs.com/
  4. Why should I write a library of my own?
  5. function trim(str) { return str.replace(/^s+|s+$/g, ""); } function $(id) { return document.getElementById(id); }
  6. Low Level
  7. High Level
  8. Toolbox
  9. Widgets
  10. Scr i p t ac u l o us gR a ph aël jQuery UI Pr o to t ype ue r y R a ph aël Do j o jQ Ex t
  11. API & Functionality
  12. Library is the answer. So, what is the question?
  13. Library is the answer. So, what is the question?
  14. Who is the target? Java, Ruby, PHP, JavaScript…
  15. Who is the target? Java, Ruby, PHP, JavaScript…
  16. “Everything should be made as simple as possible, but not simpler.” Albert Einstein
  17. JavaScript is your friend
  18. Performance
  19. var a = [1, 2, 3, 4, 5, 6, 7, 8, 9]; for (var i = 0; i < a.length; i++) { a[i] *= 2; } var j = a.length; while (j--) { a[j] *= 2; }
  20. function parseColour(colour) { // #XXXXXX var value = parseInt(colour.substring(1), 16); return { r: (value & 0xff0000) >> 16, g: (value & 0xff00) >> 8, b: value & 0xff, }; }
  21. var parseColour = (function () { var cache = {}; return function (colour) { if (colour in cache) { return cache[colour]; } // calculation cache[colour] = value; return value; }; })();
  22. var parseColour = (function () { var cache = {}, count = []; return function (colour) { if (colour in cache) { return cache[colour]; } // calculation cache[colour] = value; count.push(colour); if (count.length > 1000) { delete cache[count.shift()]; } return value; }; })();
  23. JavaScript Rocks! presents... JavaScript Performance Rocks by Thomas Fuchs & Amy Hoy find more awesome JavaScript stuff at http://www.jsrocks.com
  24. Animation
  25. Bulletproof
  26. Global Scope
  27. Global Scope Treat it as a public toilet
  28. var myLib = { method1: function () {}, method2: function () {}, // ... };
  29. var myLib = {}; (function () { var libVariable = 2; myLib.method1 = function () {}; myLib.method2 = function () {}; })();
  30. Native Prototypes
  31. String.prototype.trim = function () { return this.replace(/^s+|s+$/g, ""); }; Number.prototype.times = function (func) { for (var i = 0; i < this; i++) { func(i); } };
  32. Object.prototype
  33. for (var value in cache) { this.setAttribute(value, cache[value]); } var horizontal = {left: 1, right: 1}; if (direction in horizontal) { this.horizontal(direction); }
  34. Object.prototype.top = 3; // ... for (var value in cache) { this.setAttribute(value, cache[value]); } var horizontal = {left: 1, right: 1}; if (direction in horizontal) { this.horizontal(direction); }
  35. Object.prototype.top = 3; // ... for (var value in cache) { if (cache.hasOwnProperty(value)) { this.setAttribute(value, cache[value]); } } var horizontal = {left: 1, right: 1}; if (horizontal.hasOwnProperty(direction)) { this.horizontal(direction); }
  36. function isArray(object) { return object && (object instanceof Array); }
  37. Beware of <iframe>
  38. function isArray(object) { return Object.prototype.toString.call(object) === "[object Array]"; }
  39. undefined
  40. function setSomething(a) { if (a == undefined) { a = 5; } this.set(a); }
  41. var undefined; function setSomething(a) { if (a == undefined) { a = 5; } this.set(a); }
  42. function setSomething(a) { this.set(a || 5); }
  43. Packaging
  44. Minify / Pack / Obfuscate
  45. JSMin Dojo ShrinkSafe Packer YUI Compressor
  46. 120 Kb jQuery 56 Kb 19 Kb 138 Kb Prototype 80 Kb 24 Kb 121 Kb Raphaël 52 Kb 18 Kb Original Minified GZIP
  47. function calculate(value) { if (typeof value == "number") { return parseFloat(value); } if (isArray(value)) { var i = value.length; while (i--) value[i] = parseFloat(value[i]); return value.join(","); } var values = value.split(","), i = values.length; while (i--) values[i] = parseFloat(values[i]); return values.join(","); } 394 b
  48. function calculate(c){if(typeof c=="number"){return parseFloat(c);}if(isArray(c)){var b=c.length;while(b--){c[b]=parseFloat(c[b]);}return c.join(",");}var a=c.split(","),b=a.length;while(b--) {a[b]=parseFloat(a[b]);}return a.join(",");} 394 b 235 b
  49. function calculate(value) { var parseFloat = parseFloat; if (typeof value == "number") { return parseFloat(value); } if (isArray(value)) { var i = value.length; while (i--) value[i] = parseFloat(value[i]); return value.join(","); } var values = value.split(","), i = values.length; while (i--) values[i] = parseFloat(values[i]); return values.join(","); } 394 b 235 b 427 b
  50. function calculate(value) { var parseFloat = parseFloat; if (typeof value == "number") { return parseFloat(value); } if (isArray(value)) { var i = value.length; while (i--) value[i] = parseFloat(value[i]); return value.join(","); } var values = value.split(","), i = values.length; while (i--) values[i] = parseFloat(values[i]); return values.join(","); } 394 b 235 b 427 b
  51. function calculate(d){var b=b;if(typeof d=="number") {return b(d);}if(isArray(d)){var c=d.length;while(c--){d[c]=b(d[c]);}return d.join(",");}var a=d.split(","),c=a.length;while(c--) {a[c]=b(a[c]);}return a.join(",");} 394 b 235 b 427 b 216 b
  52. element.setAttribute("width", 320);
  53. element.setAttribute("width", 320); var setAttribute = function (element, key, value) { element.setAttribute(key, value); } // ... setAttribute(element, "width", 320);
  54. element.setAttribute("width", 320); var setAttribute = function (element, key, value) { element.setAttribute(key, value); } // ... setAttribute(element, "width", 320); var setAttribute = "setAttribute"; // ... element[setAttribute]("width", 320);
  55. Error Handling
  56. function setWidth(width) { width = parseFloat(width); if (isNaN(width)) { handleErrors("‘width’ is not a number"); } } function handleErrors(message) { throw new Error(message); }
  57. function update(x, y, width, height) { try { this.setX(x); this.setY(y); this.setWidth(width); this.setHeight(height); } catch (err) { throw new Error("Some error happened… Somewhere."); } }
  58. JSLint http://jslint.com/
  59. Share the magic
  60. Thank You http://dmitry.baranovskiy.com dmitry@baranovskiy.com Icons used with permission of Iconfactory

+ Dmitry BaranovskiyDmitry Baranovskiy, 2 weeks ago

custom

3910 views, 28 favs, 2 embeds more stats

Edge of the Web presentation on building your JavaS more

More info about this document

CC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs License

Go to text version

  • Total Views 3910
    • 3903 on SlideShare
    • 7 from embeds
  • Comments 5
  • Favorites 28
  • Downloads 165
Most viewed embeds
  • 4 views on http://engl302n14fall2009.pbworks.com
  • 3 views on http://www.proyectosenior.net

more

All embeds
  • 4 views on http://engl302n14fall2009.pbworks.com
  • 3 views on http://www.proyectosenior.net

less

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

Cancel
File a copyright complaint
Having problems? Go to our helpdesk?

Categories

Groups / Events