Serve your static files with an high-speed middleware
speedy-static is an high-speed middleware that allows you to serve files statically. It provides some useful options in order to make itself as near as possible to your needs.
- 0.3.1 - download and downloadRegExp options implemented
- 0.3.0 - Auto-compilation of ".less", ".coffee", ".cson" and ".yml"
- 0.2.3 - Index option implemented
- 0.1.7 - Hide dotfiles option implemented
- 0.1.6 - numeraljs format supported by max-cache-size option
- 0.1.4 - JSON minimization
- 0.1.3 - Cache-Control header, s-maxage implemented
speedy-static is fully optimized to reach the best performance in serving static resources.
The server side optimizations:
- use a LRU cache in order to limit as more as possible I/O waits generated by filesystem calls
- compress and minimize to reduce up to 70% the size of your source files
- stores already compiled, compressed and minimized source files into LRU to save CPU and memory
- can prepare cache to make the middleware start with the most of resources already loaded in memory
- allow the programmer to ignore some resources or an entire tree in order to prevent useless filesystem calls or wasting of cache space
The client side optimizations:
- use conditional headers to prevent the server send multiple times the same resources payload
- prevent the browser to frequently ask the server to validate resources using a validation time
npm install speedy-static
var express = ;var app = ;var speedyStatic = ;// if you don't want to prepare cache it returns the middlewarevar middleware = ;app;// if you want to prepare cache before having the middleware,// it will return you a promise in order to give you the middleware// as soon as the cache is prepared;
The path to mount is the root path of the static files you want to serve. The options allows you to make your tuning.
|index||It allows you to define your index files (it works for all the directories)||["index.html", "index.htm"]|
|compile(1)||It can make auto-compilations from ".less" to ".css", from ".coffee" to ".js" and from ".cson" and ".yml" to ".json"||[".less", ".coffee", ".cson", ".yml"]|
|compression||It allows you to serve files compressing them when possible||true|
|compression-level||It defines the level of the compression [0=BEST_SPEED,1=DEFAULT_COMRESSION,2=BEST_COMPRESSION]||1|
|minify||It allows you to minimize source files when possibile [.js,.css,.json]||false|
|minify-mangle||It allows you to also mangle minimized source files||true|
|etag||It produces and sends to the client the ETag header in order to validate further requests of the same resource||true|
|last-modified||It reads the last modification date and sends to the client the Last-Modified header in order to validate further requests of the same resource||true|
|content-type||It writes the Content-Type header referred to the requested resource||true|
|max-cache-size||It defines the size limit (in bytes) of the LRU cache (it supports numeraljs formats)||104857600 (100MB)|
|max-cache-age||It defines the expiration time (in milliseconds) of the LRU cache elements||0 (never expire)|
|prepare-cache||It prepares the LRU cache before giving the middleware||false|
|browser-cache||It allows you to use the browser cache to optimize the amount of calls and data||true|
|browser-cache-max-age||It defines the expiration time (in seconds) of the browser cache resources||300|
|browser-cache-s-maxage||It allows you to override the intermediary (such as CDNs) max-age and expires headers||300|
|hide-dotfiles||It allows you to hide dotfiles||true|
|ignore||It allows you to ignore resources. It works with an entire path or a single resource name||[ ]|
|ignoreRegExp||It allows you to ignore resources defining regular expressions. It works only on file names||[ ]|
|download(2)||It allows you to make resources downloadable. It works with an entire path or a single resource name||[ ]|
|downloadRegExp(2)||It allows you to make resources downloadable defining regular expressions. It works only on file names||[ ]|
|continue||It allows you to pass the request to the next middleware instead of ending it||false|
|ignore-errors||It allows you to ignore server errors hiding them with a 404||false|
- Compiled files can be minimized, mangled and compressed as if they were been fetched already compiled.
- Downloadable resources won't be compiled, minimized or compressed.
To test speedy-static be sure that mocha and istanbul were installed, otherwise you can install them typing
npm install -g mochanpm install -g istanbul
Be also sure that devDependencies was installed, otherwise you can install them jumping into speedy-static directory and typing
Then, inside speedy-static directory type the following command.
Licenced under MIT
Copyright (c) 2016 - Pietro Cucinella