Extreme JavaScript Compression With YUI Compressor

Nicholas Zakas
Nicholas ZakasFront End Guy at Box
Extreme JavaScript Compression with
          YUI Compressor
               Nicholas C. Zakas
     Principal Front End Engineer, Yahoo!
Who's this guy?
• Principal Front End Engineer, Yahoo! Front Page

• YUI Contributor
• Author
JavaScript
       Minification/Compression
• Problem: Lots of JavaScript
• Solution: Make JavaScript smaller
• Two areas:
  – Wire weight
  – Browser weight
Wire Weight Solution: Gzip



                   Internet




    Server
Wire Weight Solution: Gzip



Internet




                  Browser
Browser Weight
Browser Weight Solution: Minification
 •   Remove comments
 •   Remove extra white space
 •   Identifier replacement
 •   Other...
Minification Tools
• ECMAScript Cruncher (ESC)
  – http://www.saltstorm.net/depo/esc/
• JSMin
  – http://www.crockford.com/javascript/jsmin.html
• Packer
  – http://dean.edwards.name/packer/
• Dojo Shrinksafe
  – http://shrinksafe.dojotoolkit.org/
YUI Compressor




http://developer.yahoo.com/yui/compressor/
About YUI Compressor
•   Remove comments
•   Remove extra white space
•   Identifier replacement
•   Micro-optimizations
•   Built on top of Rhino interpreter
    – Makes all optimizations safe
Mozilla Rhino




• Open source JavaScript interpreter
• Written in Java
• Based on Firefox's interpreter

         http://www.mozilla.org/rhino/
How It Works
Micro Optimizations
The Results

      -44%


      -44%
Helping the Compressor
Best Optimization
            =
Identifier Replacement
    (aka munging)
Identifier Replacement
• Local identifiers only
   – Functions and variables
What Can't Be Replaced
• Primitive values
   – strings, booleans, numbers, null, and undefined
Primitive Values
• Strings take up the most space
• Non-numeric literals take second-most
  – true, false
  – null
  – undefined
• Approach: Any literal value used two or more
  times should be stored in a local variable
Primitive Values



                   263 b




                   172 b
Primitive Values




                   293 b




                   162 b
Prototype
•   79 repeated strings = 1196 bytes
•   80 true/false = 359 bytes
•   44 null = 176 bytes
•   21 undefined = 189 bytes
•   Total primitives = 1920 bytes
•   Potential savings > 1 kb
jQuery
•   96 repeated strings = 1742 bytes
•   107 true/false = 478 bytes
•   46 null = 184 bytes
•   Total primitives = 2404 bytes
•   Potential savings > 1.3 kb
•   undefined = negligible
jQuery
Primitive Variables
What Can't Be Replaced
• Primitive values
   – strings, booleans, numbers, null, and undefined
• Global variables
   – window, document, XMLHttpRequest, etc.
Global Variables
• Most bytes:
  – document
  – window
• Approach: Any global variable used two or more
  times should be stored into a local variable
Global Variables




                   293 b




                   162 b
Global Variables




                   317 b




                   162 b
Prototype
•   49 document = 392 bytes
•   29 window = 174 bytes
•   Total globals = 566 bytes
•   Potential Savings > 500 bytes
jQuery
•   24 document = 192 bytes
•   27 window = 162 bytes
•   Total globals = 354 bytes
•   Potential Savings > 300 bytes
What Can't Be Replaced
• Primitive values
   – strings, booleans, numbers, null, and undefined
• Global variables
   – window, document, XMLHttpRequest, etc.
• Property names
   – foo.bar
Property Names
• Next to repeated strings, biggest source of extra
  bytes
• Anything to the right of a dot cannot be replaced
• Makes a.b.c even more expensive
• Approach: Any property used two or more times
  should be stored into a local variable
Property Names




                 317 b




                 162 b
Property Names




                 291 b



                 144 b
What Can't Be Replaced
• Primitive values
   – strings, booleans, numbers, null, and undefined
• Global variables
   – window, document, XMLHttpRequest, etc.
• Property names
   – foo.bar
• Keywords
Keywords
• Most commonly overused:
  – var
  – return
• Approach: Try to have only one var statement
  and one return per function
Keywords




           291 b



           144 b
Keywords




           308 b



           127 b
The Results
Before:



                                              172 b
After:



                                              127 b
Total Savings (from original) = 136 b (52%)
Total Savings (from final)    = 181 b (59%)
Hurting the Compressor
Preventing Identifier Replacement
• Use of eval() function
“eval() is evil”
-Douglas Crockford
eval() is Evil
eval() is Evil
Preventing Identifier Replacement
• Use of eval() function
  – Solution #1: Don't use it
  – Solution #2: Create a global function that wraps
    eval()
Living with eval()
Preventing Identifier Replacement
• Use of eval() function
  – Solution #1: Don't use
  – Solution #2: Create a global function that wraps
    eval()
• Use of with statement
“with statement
considered harmful”
-Douglas Crockford
with Statement
Preventing Identifier Replacement
• Use of eval() function
  – Solution #1: Don't use
  – Solution #2: Create a global function that wraps
    eval()
• Use of with statement
  – Solution #1: Don't use
  – Solution #2: see Solution #1
Preventing Identifier Replacement
• Use of eval() function
  – Solution #1: Don't use
  – Solution #2: Create a global function that wraps
    eval()
• Use of with statement
  – Solution #1: Don't use
  – Solution #2: see Solution #1
• JScript conditional comments
Jscript Conditional Comments
Preventing Identifier Replacement
• Use of eval() function
  – Solution #1: Don't use
  – Solution #2: Create a global function that wraps
    eval()
• Use of with statement
  – Solution #1: Don't use
  – Solution #2: see Solution #1
• JScript conditional comments
  – Only solution: Don't use
The Compressor Helps You
Verbose Mode
• Use -v switch to enable
• Reports issues with code related to minification:
   –   Undeclared variables
   –   Unused variables
   –   Functions with more than one var statement
   –   Use of evil features (eval(), with, conditional
       comments)
Verbose Mode
Summary
For Optimal File Size
• Use local variables to store:
   – Repeated primitive values
   – Global variables
   – Object properties
• Limit each function to one var and one
  return
• Avoid using eval() and with()
• Heed YUI Compressor's advice
• Combine with HTTP compression for best savings
http://developer.yahoo.com/yui/compressor/
Questions?
Etcetera
• My blog:    www.nczonline.net
• My email:   nzakas@yahoo-inc.com
• Twitter:    @slicknet
Happy crunching!
Creative Commons Images Used
•   http://flickr.com/photos/velkr0/467471030/
•   http://flickr.com/photos/oskay/253010234/
•   http://flickr.com/photos/pacfolly/2304020816/
•   http://flickr.com/photos/blmurch/304690615/
•   http://flickr.com/photos/tshirbert/191179745/
•   http://flickr.com/photos/mc/27061495/
•   http://flickr.com/photos/oberazzi/318947873/
1 of 64

Recommended

Building GUI App with Electron and Lisp by
Building GUI App with Electron and LispBuilding GUI App with Electron and Lisp
Building GUI App with Electron and Lispfukamachi
20.4K views62 slides
Web crawl with Elixir by
Web crawl with ElixirWeb crawl with Elixir
Web crawl with Elixir이재철
719 views38 slides
Clack: glue for web apps by
Clack: glue for web appsClack: glue for web apps
Clack: glue for web appsfukamachi
2.5K views27 slides
What to know about Amazon Elastic Block Store (EBS) by
What to know about Amazon Elastic Block Store (EBS)What to know about Amazon Elastic Block Store (EBS)
What to know about Amazon Elastic Block Store (EBS)LCloud
229 views31 slides
Ruby on Rails & PostgreSQL - v2 by
Ruby on Rails & PostgreSQL - v2Ruby on Rails & PostgreSQL - v2
Ruby on Rails & PostgreSQL - v2John Ashmead
2.5K views14 slides
Woo: Writing a fast web server @ ELS2015 by
Woo: Writing a fast web server @ ELS2015Woo: Writing a fast web server @ ELS2015
Woo: Writing a fast web server @ ELS2015fukamachi
9.7K views63 slides

More Related Content

Viewers also liked

Fate of pyruvate - A quick review by
Fate of pyruvate - A quick reviewFate of pyruvate - A quick review
Fate of pyruvate - A quick reviewNamrata Chhabra
87.6K views40 slides
Basics of Compressor by
Basics of CompressorBasics of Compressor
Basics of CompressorSLA1987
49.7K views33 slides
Compressor And Compressed Air Systems by
Compressor And Compressed Air SystemsCompressor And Compressed Air Systems
Compressor And Compressed Air SystemsSaurabh Jain
38.3K views35 slides
Compressor by
CompressorCompressor
CompressorKushal Navandar
54K views181 slides
Romeo & juliet themes lesson by
Romeo & juliet themes lessonRomeo & juliet themes lesson
Romeo & juliet themes lessonKathy Strelow
89K views19 slides
Water Chilled Airconditioning by
Water Chilled AirconditioningWater Chilled Airconditioning
Water Chilled AirconditioningAljon Altiche
71.8K views30 slides

Viewers also liked(20)

Fate of pyruvate - A quick review by Namrata Chhabra
Fate of pyruvate - A quick reviewFate of pyruvate - A quick review
Fate of pyruvate - A quick review
Namrata Chhabra87.6K views
Basics of Compressor by SLA1987
Basics of CompressorBasics of Compressor
Basics of Compressor
SLA198749.7K views
Compressor And Compressed Air Systems by Saurabh Jain
Compressor And Compressed Air SystemsCompressor And Compressed Air Systems
Compressor And Compressed Air Systems
Saurabh Jain38.3K views
Romeo & juliet themes lesson by Kathy Strelow
Romeo & juliet themes lessonRomeo & juliet themes lesson
Romeo & juliet themes lesson
Kathy Strelow89K views
Water Chilled Airconditioning by Aljon Altiche
Water Chilled AirconditioningWater Chilled Airconditioning
Water Chilled Airconditioning
Aljon Altiche71.8K views
Chemical translocation & molecular fate by Sumer Pankaj
Chemical  translocation & molecular fateChemical  translocation & molecular fate
Chemical translocation & molecular fate
Sumer Pankaj1.2K views
presentation on Introducing components of ic engine (automobile engine), Powe... by Engr Soomro
presentation on Introducing components of ic engine (automobile engine), Powe...presentation on Introducing components of ic engine (automobile engine), Powe...
presentation on Introducing components of ic engine (automobile engine), Powe...
Engr Soomro27.2K views
Basics of IC engine by SLA1987
Basics of IC engineBasics of IC engine
Basics of IC engine
SLA198757K views
FOUR STROKE ENGINE by shaffu786
FOUR STROKE ENGINEFOUR STROKE ENGINE
FOUR STROKE ENGINE
shaffu786146.9K views
INTERNAL COMBUSTION ENGINES PPT by AKASH1001
INTERNAL COMBUSTION ENGINES PPT INTERNAL COMBUSTION ENGINES PPT
INTERNAL COMBUSTION ENGINES PPT
AKASH1001125.1K views
WordPress State of the Word 2012 by photomatt
WordPress State of the Word 2012WordPress State of the Word 2012
WordPress State of the Word 2012
photomatt146.1K views
Critical Thinking by ohassta
Critical ThinkingCritical Thinking
Critical Thinking
ohassta108.9K views
Intellectual Property Rights by harshhanu
Intellectual Property RightsIntellectual Property Rights
Intellectual Property Rights
harshhanu686.7K views
Diesel engine Powerpoint by kaushdave
Diesel engine PowerpointDiesel engine Powerpoint
Diesel engine Powerpoint
kaushdave83.3K views
Basics Of Automobile by shankaragiri
Basics Of AutomobileBasics Of Automobile
Basics Of Automobile
shankaragiri106.4K views
Digital Marketing Overview by Anton Koekemoer
Digital Marketing OverviewDigital Marketing Overview
Digital Marketing Overview
Anton Koekemoer287.8K views

Similar to Extreme JavaScript Compression With YUI Compressor

Kaggle nlp approaches by
Kaggle nlp approachesKaggle nlp approaches
Kaggle nlp approachesprabu palanisamy
553 views41 slides
Ajaxworld07 by
Ajaxworld07Ajaxworld07
Ajaxworld07tutorialsruby
213 views31 slides
Ajaxworld07 by
Ajaxworld07Ajaxworld07
Ajaxworld07tutorialsruby
224 views31 slides
High-Performance Python by
High-Performance PythonHigh-Performance Python
High-Performance PythonWork-Bench
11K views26 slides
Polyglot and Poly-paradigm Programming for Better Agility by
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
2.2K views90 slides
Игорь Фесенко "Direction of C# as a High-Performance Language" by
Игорь Фесенко "Direction of C# as a High-Performance Language"Игорь Фесенко "Direction of C# as a High-Performance Language"
Игорь Фесенко "Direction of C# as a High-Performance Language"Fwdays
1.1K views53 slides

Similar to Extreme JavaScript Compression With YUI Compressor(20)

High-Performance Python by Work-Bench
High-Performance PythonHigh-Performance Python
High-Performance Python
Work-Bench11K views
Polyglot and Poly-paradigm Programming for Better Agility by elliando dias
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
elliando dias2.2K views
Игорь Фесенко "Direction of C# as a High-Performance Language" by Fwdays
Игорь Фесенко "Direction of C# as a High-Performance Language"Игорь Фесенко "Direction of C# as a High-Performance Language"
Игорь Фесенко "Direction of C# as a High-Performance Language"
Fwdays1.1K views
How to start developing your own ExpressionEngine addons by Leevi Graham
How to start developing your own ExpressionEngine addonsHow to start developing your own ExpressionEngine addons
How to start developing your own ExpressionEngine addons
Leevi Graham15.2K views
Introduction to Ansible - Jan 28 - Austin MeetUp by tylerturk
Introduction to Ansible - Jan 28 - Austin MeetUpIntroduction to Ansible - Jan 28 - Austin MeetUp
Introduction to Ansible - Jan 28 - Austin MeetUp
tylerturk1K views
OSMC 2009 | Nagios Plugins: New features and future projects by Thomas Guyot-... by NETWAYS
OSMC 2009 | Nagios Plugins: New features and future projects by Thomas Guyot-...OSMC 2009 | Nagios Plugins: New features and future projects by Thomas Guyot-...
OSMC 2009 | Nagios Plugins: New features and future projects by Thomas Guyot-...
NETWAYS30 views
Rapid Application Development using Ruby on Rails by Simobo
Rapid Application Development using Ruby on RailsRapid Application Development using Ruby on Rails
Rapid Application Development using Ruby on Rails
Simobo3.8K views
Some Rough Fibrous Material by Murray Steele
Some Rough Fibrous MaterialSome Rough Fibrous Material
Some Rough Fibrous Material
Murray Steele657 views
CakePHP 2.0 - PHP Matsuri 2011 by Graham Weldon
CakePHP 2.0 - PHP Matsuri 2011CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011
Graham Weldon2.8K views
London devops logging by Tomas Doran
London devops loggingLondon devops logging
London devops logging
Tomas Doran17.3K views
Lecture 15 run timeenvironment_2 by Iffat Anjum
Lecture 15 run timeenvironment_2Lecture 15 run timeenvironment_2
Lecture 15 run timeenvironment_2
Iffat Anjum1.1K views
Introduction to DRBD by dawnlua
Introduction to DRBDIntroduction to DRBD
Introduction to DRBD
dawnlua4.3K views

More from Nicholas Zakas

Browser Wars Episode 1: The Phantom Menace by
Browser Wars Episode 1: The Phantom MenaceBrowser Wars Episode 1: The Phantom Menace
Browser Wars Episode 1: The Phantom MenaceNicholas Zakas
77.4K views168 slides
Enough with the JavaScript already! by
Enough with the JavaScript already!Enough with the JavaScript already!
Enough with the JavaScript already!Nicholas Zakas
260K views84 slides
The Pointerless Web by
The Pointerless WebThe Pointerless Web
The Pointerless WebNicholas Zakas
7K views64 slides
JavaScript APIs you’ve never heard of (and some you have) by
JavaScript APIs you’ve never heard of (and some you have)JavaScript APIs you’ve never heard of (and some you have)
JavaScript APIs you’ve never heard of (and some you have)Nicholas Zakas
51.4K views67 slides
JavaScript Timers, Power Consumption, and Performance by
JavaScript Timers, Power Consumption, and PerformanceJavaScript Timers, Power Consumption, and Performance
JavaScript Timers, Power Consumption, and PerformanceNicholas Zakas
54.4K views128 slides
Scalable JavaScript Application Architecture 2012 by
Scalable JavaScript Application Architecture 2012Scalable JavaScript Application Architecture 2012
Scalable JavaScript Application Architecture 2012Nicholas Zakas
94K views114 slides

More from Nicholas Zakas(20)

Browser Wars Episode 1: The Phantom Menace by Nicholas Zakas
Browser Wars Episode 1: The Phantom MenaceBrowser Wars Episode 1: The Phantom Menace
Browser Wars Episode 1: The Phantom Menace
Nicholas Zakas77.4K views
Enough with the JavaScript already! by Nicholas Zakas
Enough with the JavaScript already!Enough with the JavaScript already!
Enough with the JavaScript already!
Nicholas Zakas260K views
JavaScript APIs you’ve never heard of (and some you have) by Nicholas Zakas
JavaScript APIs you’ve never heard of (and some you have)JavaScript APIs you’ve never heard of (and some you have)
JavaScript APIs you’ve never heard of (and some you have)
Nicholas Zakas51.4K views
JavaScript Timers, Power Consumption, and Performance by Nicholas Zakas
JavaScript Timers, Power Consumption, and PerformanceJavaScript Timers, Power Consumption, and Performance
JavaScript Timers, Power Consumption, and Performance
Nicholas Zakas54.4K views
Scalable JavaScript Application Architecture 2012 by Nicholas Zakas
Scalable JavaScript Application Architecture 2012Scalable JavaScript Application Architecture 2012
Scalable JavaScript Application Architecture 2012
Nicholas Zakas94K views
Maintainable JavaScript 2012 by Nicholas Zakas
Maintainable JavaScript 2012Maintainable JavaScript 2012
Maintainable JavaScript 2012
Nicholas Zakas90.8K views
High Performance JavaScript (CapitolJS 2011) by Nicholas Zakas
High Performance JavaScript (CapitolJS 2011)High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)
Nicholas Zakas57.5K views
Maintainable JavaScript 2011 by Nicholas Zakas
Maintainable JavaScript 2011Maintainable JavaScript 2011
Maintainable JavaScript 2011
Nicholas Zakas12.1K views
High Performance JavaScript 2011 by Nicholas Zakas
High Performance JavaScript 2011High Performance JavaScript 2011
High Performance JavaScript 2011
Nicholas Zakas10.1K views
Mobile Web Speed Bumps by Nicholas Zakas
Mobile Web Speed BumpsMobile Web Speed Bumps
Mobile Web Speed Bumps
Nicholas Zakas13.4K views
High Performance JavaScript (Amazon DevCon 2011) by Nicholas Zakas
High Performance JavaScript (Amazon DevCon 2011)High Performance JavaScript (Amazon DevCon 2011)
High Performance JavaScript (Amazon DevCon 2011)
Nicholas Zakas4.6K views
Progressive Enhancement 2.0 (Conference Agnostic) by Nicholas Zakas
Progressive Enhancement 2.0 (Conference Agnostic)Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)
Nicholas Zakas42.5K views
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011) by Nicholas Zakas
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
Nicholas Zakas10.1K views
YUI Test The Next Generation (YUIConf 2010) by Nicholas Zakas
YUI Test The Next Generation (YUIConf 2010)YUI Test The Next Generation (YUIConf 2010)
YUI Test The Next Generation (YUIConf 2010)
Nicholas Zakas3.7K views
High Performance JavaScript (YUIConf 2010) by Nicholas Zakas
High Performance JavaScript (YUIConf 2010)High Performance JavaScript (YUIConf 2010)
High Performance JavaScript (YUIConf 2010)
Nicholas Zakas61.8K views
High Performance JavaScript - Fronteers 2010 by Nicholas Zakas
High Performance JavaScript - Fronteers 2010High Performance JavaScript - Fronteers 2010
High Performance JavaScript - Fronteers 2010
Nicholas Zakas4.2K views
Nicholas' Performance Talk at Google by Nicholas Zakas
Nicholas' Performance Talk at GoogleNicholas' Performance Talk at Google
Nicholas' Performance Talk at Google
Nicholas Zakas4.6K views
High Performance JavaScript - WebDirections USA 2010 by Nicholas Zakas
High Performance JavaScript - WebDirections USA 2010High Performance JavaScript - WebDirections USA 2010
High Performance JavaScript - WebDirections USA 2010
Nicholas Zakas59.7K views
Performance on the Yahoo! Homepage by Nicholas Zakas
Performance on the Yahoo! HomepagePerformance on the Yahoo! Homepage
Performance on the Yahoo! Homepage
Nicholas Zakas7.9K views

Recently uploaded

Top 10 Web Development Companies in California by
Top 10 Web Development Companies in CaliforniaTop 10 Web Development Companies in California
Top 10 Web Development Companies in CaliforniaTopCSSGallery
24 views27 slides
Pitch Deck Teardown: Scalestack's $1M AI sales tech Seed deck by
Pitch Deck Teardown: Scalestack's $1M AI sales tech Seed deckPitch Deck Teardown: Scalestack's $1M AI sales tech Seed deck
Pitch Deck Teardown: Scalestack's $1M AI sales tech Seed deckHajeJanKamps
24 views18 slides
Components of Induction Melting Furnace.pdf by
Components of Induction Melting Furnace.pdfComponents of Induction Melting Furnace.pdf
Components of Induction Melting Furnace.pdfMAKPOWER TRANSFORMER
8 views1 slide
Amazon Music - Market Analysis by
Amazon Music - Market AnalysisAmazon Music - Market Analysis
Amazon Music - Market AnalysisAna Weathers
32 views11 slides
TNR Gold Shotgun Gold Project Presentation by
TNR Gold Shotgun Gold Project PresentationTNR Gold Shotgun Gold Project Presentation
TNR Gold Shotgun Gold Project PresentationKirill Klip
85 views38 slides
shoot pitch.pptx by
shoot pitch.pptxshoot pitch.pptx
shoot pitch.pptxlomatteo995
7 views17 slides

Recently uploaded(20)

Top 10 Web Development Companies in California by TopCSSGallery
Top 10 Web Development Companies in CaliforniaTop 10 Web Development Companies in California
Top 10 Web Development Companies in California
TopCSSGallery24 views
Pitch Deck Teardown: Scalestack's $1M AI sales tech Seed deck by HajeJanKamps
Pitch Deck Teardown: Scalestack's $1M AI sales tech Seed deckPitch Deck Teardown: Scalestack's $1M AI sales tech Seed deck
Pitch Deck Teardown: Scalestack's $1M AI sales tech Seed deck
HajeJanKamps24 views
Amazon Music - Market Analysis by Ana Weathers
Amazon Music - Market AnalysisAmazon Music - Market Analysis
Amazon Music - Market Analysis
Ana Weathers32 views
TNR Gold Shotgun Gold Project Presentation by Kirill Klip
TNR Gold Shotgun Gold Project PresentationTNR Gold Shotgun Gold Project Presentation
TNR Gold Shotgun Gold Project Presentation
Kirill Klip85 views
chung chi tam compact chiu axit by MaiThiAnh
chung chi tam compact chiu axitchung chi tam compact chiu axit
chung chi tam compact chiu axit
MaiThiAnh14 views
TNR Gold Los Azules Copper NSR Royalty Holding with McEwen Mining Presentation by Kirill Klip
TNR Gold Los Azules Copper NSR Royalty Holding with McEwen Mining PresentationTNR Gold Los Azules Copper NSR Royalty Holding with McEwen Mining Presentation
TNR Gold Los Azules Copper NSR Royalty Holding with McEwen Mining Presentation
Kirill Klip63 views
Concierge Services Business Plan by Jessica Larson
Concierge Services Business PlanConcierge Services Business Plan
Concierge Services Business Plan
Jessica Larson16 views
Discover the Finest Interior Painting Services in Miami Elevate Your Space wi... by Florida Painting Miami
Discover the Finest Interior Painting Services in Miami Elevate Your Space wi...Discover the Finest Interior Painting Services in Miami Elevate Your Space wi...
Discover the Finest Interior Painting Services in Miami Elevate Your Space wi...
How to get your business featured on Forbes - Business Show 23 by Quibble
How to get your business featured on Forbes - Business Show 23How to get your business featured on Forbes - Business Show 23
How to get your business featured on Forbes - Business Show 23
Quibble26 views
ERC-BEIS Longitudinal Small Business Survey Dissemination Event Slides by enterpriseresearchcentre
ERC-BEIS Longitudinal Small Business Survey Dissemination Event  Slides ERC-BEIS Longitudinal Small Business Survey Dissemination Event  Slides
ERC-BEIS Longitudinal Small Business Survey Dissemination Event Slides
Coomes Consulting Business Profile by Chris Coomes
Coomes Consulting Business ProfileCoomes Consulting Business Profile
Coomes Consulting Business Profile
Chris Coomes38 views
NewBase 23 November 2023 Energy News issue - 1676 by Khaled Al Awadi_compre... by Khaled Al Awadi
NewBase  23 November 2023  Energy News issue - 1676 by Khaled Al Awadi_compre...NewBase  23 November 2023  Energy News issue - 1676 by Khaled Al Awadi_compre...
NewBase 23 November 2023 Energy News issue - 1676 by Khaled Al Awadi_compre...
Khaled Al Awadi17 views

Extreme JavaScript Compression With YUI Compressor