getify / LABjs

Loading And Blocking JavaScript: On-demand parallel loader for JavaScript with execution order dependencies
http://labjs.com
2.28k stars 313 forks source link

It's nearing time for 3.0 #113

Open getify opened 8 years ago

getify commented 8 years ago

Specifically:

  1. link rel=preload is becoming a reality.
  2. Also, IE is dead now
  3. There's several small feature requests that have built up over time that should be rolled in (if anyone even still cares)
devilking15292 commented 8 years ago

@getify I'm interested in this

dudesl commented 8 years ago

Maybe its time to CORS support?

getify commented 8 years ago

@dudesl can you be more specific?

pihvi commented 8 years ago

I'd like to help, what could I do?

I'd like to see LABjs in NPM as I'm using it for version management. Should I just add it there or would you like to be the owner of that?

getify commented 8 years ago

The goal is the 3.x launch will be on npm

pihvi commented 8 years ago

Great, what should happen next to get things started? How can I help?

getify commented 8 years ago

it's started... there's a separate branch for the 3.0 work. it's in progress. just haven't had much time lately.

nyrosmith commented 8 years ago

@getify is there anything I could help with?

fatso83 commented 8 years ago

@getify To get some help on this you should make it easy to contribute. Make a list of issues that you need help with, possible from a overview issue "3.0 release", and mark them with "help wanted". As this thread shows there are many folks who would like to help out, but don't know where to start.

artknight commented 8 years ago

lets add local storage to cache the scripts!

jbmonroe commented 7 years ago

@artknight How will you load scripts from local storage?

artknight commented 7 years ago

@jbmonroe I recently wrote a script to use localStorage to cache JS & CSS scripts. The way it works is to store the JS/CSS content as a STRING and inject it into the header on subsequent page loads. I added a cache buster to force cache reloads when needed ( version changes, etc... ). The performance is amazing but I do realize that it has some drawbacks as mentioned in the comments.

fatso83 commented 7 years ago

@artknight, you don't link to to any script and there are no comments in this issue that mentions anything about drawbacks. mind elaborating?

kylebakerio commented 7 years ago

What's the word on this, @getify?

Also, I can't seem to find any comprehensive 'how-to' on using this library. I can derive most of it from the examples, but there are mention of features in the README.md regarding e.g. queuing, where there is no code example and no illustration. Are we just expected to look through the source, or am I missing some obvious file?

getify commented 7 years ago

I appreciate that several people have interest in this project. I do definitely want to complete the 3.0 rewrite (I'm about 1/3 of the way through that). However, the project is lower on my priority list. I have several other projects that are more pressing.

@finetype the site (http://labjs.com) is down, but it's up on http://archive.org so you can consult the docs there. They should have the info you're inquiring about. Part of the rewrite will be to migrate all that documentation over to this repo.

getify commented 7 years ago

I've just pushed up my long-in-progress work on the 3.0 rewrite. It's at bare minimum functioning status. Still very much pre/alpha, but at least it's coming along finally. :)

ptomasroos commented 7 years ago

Awesome! Do you need a hand with anything @getify ?

getify commented 7 years ago

See below for a checklist. Theoretically, others can help with this coding.

TBH, I still expect most likely to be the one to do (most of) the code for the core library. It's not a particularly simple flow control to fully understand, and it's not documented anywhere, so I'm not expecting other contributors to fully understand what I'm juggling in my head. :)

But there's several extra projects (like the server util, the mock DOM, etc) that definitely are good for others to tackle. Definitely will also appreciate help eventually with docs and tests. :)

For now, please take a look at the code and see if you spot anything or have any suggestions. That much I'm happy to have help with, for sure!

getify commented 7 years ago

Gonna start a checklist here (in no particular order) for the rest of the stuff I think will need to be done for 3.0... expect this list to grow significantly:

getify commented 7 years ago

FYI: I've moved the mock-DOM thing to its own separate project:

https://github.com/getify/mock-DOM-resources

getify commented 7 years ago

Mock-DOM-Resources is now capable (enough) to sit at 1.0.0. It's ready to use for a LABjs test suite.

Edit: it's matured to 7.0.0 now and has a full test suite of its own, so it's definitely reliable enough now for LABjs to use.

kylebakerio commented 7 years ago

that blending in scantree feature looks awesome.

jbmonroe commented 7 years ago

This is sort of a mix of ES5 and ES6. I don't know if support for IE11 is required, but if it is, some of the property definitions will have to be downgraded to the ES5 style.

getify commented 7 years ago

@jbmonroe Pretty sure the src/index.js file doesn't have any ES6 in it. My goal is definitely to target ES5. The test suite does require ES6 at the moment.

jbmonroe commented 7 years ago

Dunno about that. Mock-DOM index.js has some ES6-looking get/set code in Object.addProperty:

get() { return thing; },

vs

get() : function () { return thing; },

Also in an obj = {} setup as well.

JSHint also wasn't happy here:

function setupLocation(location) {
    var loc = {
        toString() {  // <<---
            return location;
        },
        get href() {    // <<---
            return location;
        },
        set href(val) {  // <<---
            location = val;
            parseLocation();
        },
        assign: function assign(val){
            this.href = val;
        },
        reload: function(){},
        replace: function replace(val){
            this.href = val;
        }
    };

Those look very ES-sixy to me, too.

getify commented 7 years ago

@jbmonroe

Ah, I thought you were talking about LABjs since that's this repo and the main topic of the thread.

Yes, "Mock-DOM-Resources" uses ES6 because it's primarily designed to be run in node. It's only used by LABjs' test suite, so again the tests are ES6 but LABjs itself should be ES5.

ES6-looking get/set code

BTW, getters/setters are ES5 not ES6. But there are a few other ES6 features in Mock-DOM-Resources, indeed, such as concise properties in object literals.

artknight commented 6 years ago

@getify Thank you all for the awesome work!!! Just curious when this might be released?

getify commented 5 years ago

https://jasonformat.com/modern-script-loading/

fatso83 commented 5 years ago

@artknight I am wondering if @getify is hinting that there won't be a version 3 as it's no longer needed when using the module/nomodule and typical bundler workflows of today.

getify commented 5 years ago

No I am not hinting that. 3.0.will definitely eventually happen (once I can write a sufficient test suite).

However, the landacape of this stuff is shifting, and 3.0 needs to eventually "catch up", including handling ES6 modules. The article has some useful hints/tricks I want to remember and use.

Also, 3.0 will likely also include my thoughts on using service workers client-side to improve loading behavior. Lots more still to explore here, exciting potential.

Unfortunately, lower priority since very few people care about loaders any more.

getify commented 4 years ago

https://www.filamentgroup.com/lab/load-css-simpler/