unfetch icon indicating copy to clipboard operation
unfetch copied to clipboard

refactor response create function outside of promise handler

Open kalisjoshua opened this issue 5 years ago • 10 comments

not sure that this is favorable or not but thought that it might be and it allows for easier testing of the creation of responses and their properties.

kalisjoshua avatar Feb 14 '20 14:02 kalisjoshua

This will depend on the size impact - I've updated the repo to include a size check, we'll see what it nets.

developit avatar Feb 18 '20 15:02 developit

Ah - it looks like this adds a named export to the actual unfetch package, which means it won't work - folks using CommonJS will have to do import('unfetch').default which is a breaking change.

Instead, if we could retrofit your work here into proper support for the Response interface, that would definitely be a justifiable export! It would be a nice step towards supporting Headers, Request and Response, something that's been on my todo list for ages.

developit avatar Feb 18 '20 15:02 developit

Filename Size Change
dist/unfetch.es.js 553 B +47 B (8%) 🔍
dist/unfetch.js 548 B +43 B (7%) 🔍
dist/unfetch.umd.js 627 B +49 B (7%) 🔍

kalisjoshua avatar Feb 18 '20 16:02 kalisjoshua

@kalisjoshua that'll be the added export. One quick solution to check this would be to move the response function into a separate file (src/lib/response.mjs) that is imported by src/index.mjs and tests, that way it's not exported as unfetch.response.

developit avatar Feb 18 '20 16:02 developit

This is done now.

@kalisjoshua that'll be the added export. One quick solution to check this would be to move the response function into a separate file (src/lib/response.mjs) that is imported by src/index.mjs and tests, that way it's not exported as unfetch.response.

I will look into the Response interface compatibility.

kalisjoshua avatar Feb 18 '20 17:02 kalisjoshua

Filename Size Change
dist/unfetch.es.js 544 B +38 B (6%) 🔍
dist/unfetch.js 543 B +38 B (6%) 🔍
dist/unfetch.umd.js 617 B +39 B (6%) 🔍

kalisjoshua avatar Feb 18 '20 17:02 kalisjoshua

Interesting that the numbers are still so increased. My guess is that's because we're ending up with a closure around the two top-level functions, whereas currently there is no closure required since all functionality exists within the single unfetch(){} function (as a sort of wrapper + implementation). Perhaps that's just something that we'll be giving up.

developit avatar Feb 19 '20 03:02 developit

It's interesting to look at the compiled output diff of dist/unfetch.js between the master branch and my branch. On the master branch the for loop is expanded a little but on my branch the loop is most of the body of the function. I'm still examining it to see if there is anything that can be done to bring the output sizes closer because there isn't an extra closure.

kalisjoshua avatar Feb 19 '20 13:02 kalisjoshua

I think the biggest contributor to the bloat that I created is because of the lifting of the response function out of the scope necessitating that arguments be passed in and that also results in a more complicated clone attribute on the response object. I am able to slim the output size a slight bit; encapsulated in the most recent commit.

kalisjoshua avatar Feb 19 '20 13:02 kalisjoshua

Filename Size Change
dist/unfetch.es.js 534 B +23 B (4%)
dist/unfetch.js 534 B +24 B (4%)
dist/unfetch.umd.js 605 B +23 B (3%)

kalisjoshua avatar Feb 19 '20 14:02 kalisjoshua