diff --git a/.gitignore b/.gitignore index b079e77..8b7cc89 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ tarpaulin-report.html actix-example/target actix-example/prod prod56/ +src/cache_buster_data.json +actix-example/src/cache_buster_data.json diff --git a/README.md b/README.md index 6f07184..b520fd8 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@

Cache Buster

- cache-buster - A library that aids in staticfile cache busting with SHA-258 hashes + cache-buster - A library that aids in static file cache + busting with SHA-256 hashes

[![Documentation](https://img.shields.io/badge/docs-master-blue)](https://realaravinth.github.io/cache-buster/cache_buster/index.html) @@ -12,6 +13,22 @@
+## What is cache busting? + +To optimise network load time, browsers cache static files. Caching +greatly improves performance but how do you inform browsers to +invalidate cache when your files have changed? + +Cache busting is a simple but effective solution for this issue. There +are several ways to achieve this but the way this library does this is +by changing file names to include the hash of the files' contents. + +So if you have `bundle.js`, it will become +`bundle..js`. This lets you set a super long cache age +as, because of the file names changing, the path to the filename, too, +will change. So as far as the browser is concerned, you are trying to load +a file that it doesn't have. Pretty neat, isn't it? + ## Features - [x] `SHA-256` based name generation during compile-time diff --git a/actix-example/src/cache_buster_data.json b/actix-example/src/cache_buster_data.json deleted file mode 100644 index 01c7df2..0000000 --- a/actix-example/src/cache_buster_data.json +++ /dev/null @@ -1 +0,0 @@ -{"map":{"../dist/a/b/c/d/s/d/svg/github.svg":"./prod/a/b/c/d/s/d/svg/github.FA9EB1C66F548EC2C7598B94BA6A17275E1EA383D42B6C83351A2388C773E621.svg","../dist/a/b/c/d/s/d/svg/settings.svg":"./prod/a/b/c/d/s/d/svg/settings.910C6241743C9C694141971BE8E1C4016A1A5BF203E4E9D676D4CE93BD518F4C.svg","../dist/svg/file.svg":"./prod/svg/file.F9E376D9F78FFD918D8D592A8B2D97EAAC14E638B5A7AE3C58DDB075375D8E0E.svg","../dist/a/b/c/d/s/d/svg/4.svg":"./prod/a/b/c/d/s/d/svg/4.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/a/b/c/d/s/d/svg/tag.svg":"./prod/a/b/c/d/s/d/svg/tag.E0BC111B8E81BBFC62B6A9E7E4AC162B7085A6543D995B7A0030CB7632901BD4.svg","../dist/file.svg":"./prod/file.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/file-text.svg":"./prod/file-text.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/2.svg":"./prod/a/b/c/d/s/d/svg/2.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/a/b/c/d/s/d/svg/menu.svg":"./prod/a/b/c/d/s/d/svg/menu.A2C4DD00686F5D23F78885AC4CE3E075FCA78DFBDEA70407667FBBD9801B7A75.svg","../dist/svg/filter.svg":"./prod/svg/filter.6D5FBD96BA2E2020663AAC4994A991295917D73F3592C07EE103647B655A2275.svg","../dist/filter.svg":"./prod/filter.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/tag.svg":"./prod/tag.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/svg/toggle-left.svg":"./prod/svg/toggle-left.E421950C5922E84015F0A86F272AE5637A2ED96E267D2C962543F5994E5D1172.svg","../dist/help-circle.svg":"./prod/help-circle.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/8.svg":"./prod/a/b/c/d/s/d/svg/8.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/a/b/c/d/s/d/svg/file.svg":"./prod/a/b/c/d/s/d/svg/file.F9E376D9F78FFD918D8D592A8B2D97EAAC14E638B5A7AE3C58DDB075375D8E0E.svg","../dist/a/b/c/d/s/d/svg/globe.svg":"./prod/a/b/c/d/s/d/svg/globe.44C2A069EBD637663E938ECE7B8E4EC2A8BDE049A8A044EC68D9CB69AE8C592E.svg","../dist/svg/credit-card.svg":"./prod/svg/credit-card.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/svg/help-circle.svg":"./prod/svg/help-circle.BE230ABD2E05EB05EF6C5B7D04D35A3A43637EF1E046DEF3D244425609B99F81.svg","../dist/icon.png":"./prod/icon.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.png","../dist/a/b/c/d/s/d/svg/moon.svg":"./prod/a/b/c/d/s/d/svg/moon.1E151D68949CA3B2DC7DE34BC25B7586E4175AC3BA7F56DDBB34227334EF7155.svg","../dist/svg/globe.svg":"./prod/svg/globe.44C2A069EBD637663E938ECE7B8E4EC2A8BDE049A8A044EC68D9CB69AE8C592E.svg","../dist/a/b/c/d/s/d/svg/toggle-right.svg":"./prod/a/b/c/d/s/d/svg/toggle-right.15BF49887941593CE3FE09FA73E3CAF1F4B1E8ABCB42A23D85B4FCBC24FDF5AA.svg","../dist/a/b/c/d/s/d/svg/10.svg":"./prod/a/b/c/d/s/d/svg/10.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/github.svg":"./prod/github.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/bell.svg":"./prod/bell.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/filter.svg":"./prod/a/b/c/d/s/d/svg/filter.6D5FBD96BA2E2020663AAC4994A991295917D73F3592C07EE103647B655A2275.svg","../dist/svg/toggle-right.svg":"./prod/svg/toggle-right.15BF49887941593CE3FE09FA73E3CAF1F4B1E8ABCB42A23D85B4FCBC24FDF5AA.svg","../dist/log-out.svg":"./prod/log-out.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/shield.svg":"./prod/shield.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/eye.svg":"./prod/a/b/c/d/s/d/svg/eye.9DE4D24D3C9B055D02B94A8AD65E8C0C644852381FDD131A64448B6DA7859167.svg","../dist/a/b/c/d/s/d/svg/9.svg":"./prod/a/b/c/d/s/d/svg/9.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/toggle-right.svg":"./prod/toggle-right.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/shield.svg":"./prod/a/b/c/d/s/d/svg/shield.13AFE15DCB4882B4A940CFDC3E2088A733CD4E6F97F25B211D87C7C9D6DBA2B6.svg","../dist/a/b/c/d/s/d/svg/6.svg":"./prod/a/b/c/d/s/d/svg/6.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/a/b/c/d/s/d/svg/7.svg":"./prod/a/b/c/d/s/d/svg/7.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/svg/tag.svg":"./prod/svg/tag.E0BC111B8E81BBFC62B6A9E7E4AC162B7085A6543D995B7A0030CB7632901BD4.svg","../dist/svg/log-out.svg":"./prod/svg/log-out.92AB4384FD41D9AFE4735C480361BB64789CD767B7DD0FF3C6F56287B3D4498E.svg","../dist/svg/menu.svg":"./prod/svg/menu.A2C4DD00686F5D23F78885AC4CE3E075FCA78DFBDEA70407667FBBD9801B7A75.svg","../dist/menu.svg":"./prod/menu.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/eye-off.svg":"./prod/eye-off.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/home.svg":"./prod/a/b/c/d/s/d/svg/home.28C26C2D3E4013D24D755A589A80D8DD5C49DA5397032E3F09B76BC3A2C314ED.svg","../dist/svg/shield-off.svg":"./prod/svg/shield-off.85394A6AD92D550F8EBA72AAB095E078E7A0E3359DF81174532C8D1AF53B5876.svg","../dist/svg/home.svg":"./prod/svg/home.28C26C2D3E4013D24D755A589A80D8DD5C49DA5397032E3F09B76BC3A2C314ED.svg","../dist/a/b/c/d/s/d/svg/toggle-left.svg":"./prod/a/b/c/d/s/d/svg/toggle-left.E421950C5922E84015F0A86F272AE5637A2ED96E267D2C962543F5994E5D1172.svg","../dist/svg/settings.svg":"./prod/svg/settings.910C6241743C9C694141971BE8E1C4016A1A5BF203E4E9D676D4CE93BD518F4C.svg","../dist/svg/moon.svg":"./prod/svg/moon.1E151D68949CA3B2DC7DE34BC25B7586E4175AC3BA7F56DDBB34227334EF7155.svg","../dist/user.svg":"./prod/user.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/eye.svg":"./prod/eye.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/svg/user.svg":"./prod/svg/user.B164ECD2C4A09DC5189F1F252487E2AC6A33646BEA67AF9C528CDA61FE5E146F.svg","../dist/a/b/c/d/s/d/svg/help-circle.svg":"./prod/a/b/c/d/s/d/svg/help-circle.BE230ABD2E05EB05EF6C5B7D04D35A3A43637EF1E046DEF3D244425609B99F81.svg","../dist/svg/bell.svg":"./prod/svg/bell.9DA292704EE9907EFDB870F4510C97336977CA27FBFAAD83CF46F8E22D3828F7.svg","../dist/globe.svg":"./prod/globe.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/toggle-left.svg":"./prod/toggle-left.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/5.svg":"./prod/a/b/c/d/s/d/svg/5.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/a/b/c/d/s/d/svg/log-out.svg":"./prod/a/b/c/d/s/d/svg/log-out.92AB4384FD41D9AFE4735C480361BB64789CD767B7DD0FF3C6F56287B3D4498E.svg","../dist/credit-card.svg":"./prod/credit-card.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/svg/file-text.svg":"./prod/svg/file-text.CF57DF252051E7E81C240D36AF1DB8A9DDAF282F9A5E8C338408FE88A6545A02.svg","../dist/a/b/c/d/s/d/svg/3.svg":"./prod/a/b/c/d/s/d/svg/3.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/moon.svg":"./prod/moon.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/file-text.svg":"./prod/a/b/c/d/s/d/svg/file-text.CF57DF252051E7E81C240D36AF1DB8A9DDAF282F9A5E8C338408FE88A6545A02.svg","../dist/svg/github.svg":"./prod/svg/github.FA9EB1C66F548EC2C7598B94BA6A17275E1EA383D42B6C83351A2388C773E621.svg","../dist/svg/eye-off.svg":"./prod/svg/eye-off.939360B335D1D35B57C3E2070129D14ABB168E4AC137B5BE4F6F8BD450B712F5.svg","../dist/settings.svg":"./prod/settings.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/1.svg":"./prod/a/b/c/d/s/d/svg/1.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/svg/shield.svg":"./prod/svg/shield.13AFE15DCB4882B4A940CFDC3E2088A733CD4E6F97F25B211D87C7C9D6DBA2B6.svg","../dist/shield-off.svg":"./prod/shield-off.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/user.svg":"./prod/a/b/c/d/s/d/svg/user.B164ECD2C4A09DC5189F1F252487E2AC6A33646BEA67AF9C528CDA61FE5E146F.svg","../dist/svg/eye.svg":"./prod/svg/eye.9DE4D24D3C9B055D02B94A8AD65E8C0C644852381FDD131A64448B6DA7859167.svg","../dist/home.svg":"./prod/home.99378E293369ED6C5DC48A825BFF345A442988AEAFD48CC5EA399EDC87A3CBFA.svg","../dist/a/b/c/d/s/d/svg/credit-card.svg":"./prod/a/b/c/d/s/d/svg/credit-card.DF612AFE367A7B31410F2F6CD3C7B515B0F1889C0107EA695D840DFFA492E07D.svg","../dist/a/b/c/d/s/d/svg/shield-off.svg":"./prod/a/b/c/d/s/d/svg/shield-off.85394A6AD92D550F8EBA72AAB095E078E7A0E3359DF81174532C8D1AF53B5876.svg"},"base_dir":"./prod"} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 0e471bd..67ec6e0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,6 +5,25 @@ * License. */ #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms)] +//! # What is cache busting? +//! +//! To optimise network load time, browsers cache static files. Caching +//! greatly improves performance but how do you inform browsers to +//! invalidate cache when your files have changed? +//! +//! Cache busting is a simple but effective solution for this issue. There +//! are several ways to achieve this but the way this library does this is +//! by changing file names to include the hash of the files' contents. +//! +//! So if you have `bundle.js`, it will become +//! `bundle..js`. This lets you set a super long cache age +//! as, because of the file names changing, the path to the filename, too, +//! will change. So as far as the browser is concerned, you are trying to load +//! a file that it doesn't have. Pretty neat, isn't it? +//! +//! ## Example: +//! +//! - `build.rs` //! ```no_run //! use cache_buster::BusterBuilder; //! @@ -30,6 +49,22 @@ //! config.process().unwrap(); //! } //! ``` +//! - `main.rs`: +//! +//! Module describing runtime compoenet for fetching modified filenames +//! +//! Add the following tou your program to load the filemap during compiletime: +//! +//! ```no_run +//! use cache_buster::Files; +//! use cache_buster::CACHE_BUSTER_DATA_FILE; +//! +//! fn main(){ +//! let files = Files::new(CACHE_BUSTER_DATA_FILE); +//! // the path to the file before setting up for cache busting +//! files.get("./dist/github.svg"); +//! } +//! ``` pub mod processor; pub use processor::BusterBuilder;