13 мар. 2017 г.

Simple run-time caching service worker with sw-toolbox

  • Install sw-toolbox
    npm i --save-dev sw-toolbox
  • Make installed file node_modules\sw-toolbox\sw-toolbox.js accessible on production site
  • Create Service Worker file service-worker-runtime-cache.js somewhere above the resources you want to cache (i.e. if you want to cache /app/assets/*.css, then Service Worker should be placed in /app/assets or /app or even / folder)
toolbox.options.debug = true;
toolbox.router.get(/\.(css|woff2|png)\?/, toolbox.fastest);
toolbox.router.get(/(main|bundle|ckeditor).js/, toolbox.fastest);
  • Add initialization code to your JavaScript application

if (navigator.serviceWorker && navigator.serviceWorker.register) {

  • Frequent problem: When DevTools are open, Service Worker does not work. Reason: if "Disable cache" in Network tab is checked, requests will go directly to the network.

More info:

  1. A collection of service worker tools: https://googlechrome.github.io/sw-toolbox/
  2. Predefined request handlers: https://googlechrome.github.io/sw-toolbox/api.html#handlers
  3. https://medium.com/dev-channel/progressive-web-app-libraries-in-production-b52cad37d34
  4. Debugging Service Workers: https://www.chromium.org/blink/serviceworker/service-worker-faq

3 мар. 2017 г.

Babel could create non-optimizable code

Babel transpiles default parameter value into code, that could not be optimized in V8:

   findAll(src, accumulatedItems = []) {  
     // code  

is transpiled to

   findAll: function(src) {  
     var t = this, accumulatedItems = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];  
     // code  

with warning "Not optimized: Bad value context for arguments value".

17 нояб. 2016 г.

Windows + Node + IRHydra2

1. Create somewhere in %PATH% cmd file node-irhydra.cmd with
node --trace-hydrogen --trace-phase=Z --trace-deopt --code-comments --hydrogen-track-positions --redirect-code-traces --redirect-code-traces-to=code.asm --print-opt-code --trace_hydrogen_file=hydrogen.cfg %*
2. Run node-irhydra.cmd yourFile.js
3. Go to http://mrale.ph/irhydra/2/ and upload files

15 апр. 2016 г.

How to handle big repositories with git

Shallow clone

Clone a repository keeping only the latest n commits of history. You can properly pull and push to repositories even from a shallow clone.

git clone --depth 1 remote-url

Clone only one branch

You can also limit the amount of history you clone by cloning a single branch

git clone URL --branch branch_name --single-branch [folder]

Sparse checkout

Original StackOverflow answer

mkdir <repo>
cd <repo>
git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo "some/dir/" >> .git/info/sparse-checkout
echo "another/sub/tree" >> .git/info/sparse-checkout
git pull origin master

Another way:

git clone
git config core.sparsecheckout true
echo src/ > .git/info/sparse-checkout
git read-tree -m -u HEAD

Sparse checkout + shallow clone

Original StackOverflow answer

git init <repo>
cd <repo>
git remote add origin <url>
git config core.sparsecheckout true
echo "src/*" >> .git/info/sparse-checkout
git pull --depth=1 origin master

Disable delta compression for binary files

Original discussion

Configure a .gitattributes file as such:

*.jpg  binary -delta
*.png  binary -delta
*.psd  binary -delta

... and so on

4 апр. 2016 г.

Premature optimization

Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.

Knuth, "Structured Programming with Goto Statements". Computing Surveys 6:4 (December 1974), pp. 261–301, §1.