Hacker Timesnew | past | comments | ask | show | jobs | submitlogin

> there is no necessity to load huge JS libraries with lots of utility functions which one might not be using.

I think we really need to see a tracing link-time-optimizer for Javascript code that can be run as part of an asset pipeline. Dump in your huge JS library, run your client scripts (with a thorough test suite) to detect what functions of the big library are or aren't called, then cull off the functions that aren't when writing out the final "compiled-and-linked" client library.



That's a really good idea. In the meantime you could use jquip which cuts out a lot of the commonly-unused jQ stuff. https://github.com/mythz/jquip


Google Closure and GWT both do exactly that - they use static analysis to cull code which never gets called. You can't use them with standard JS libs though - JS code needs to be specially marked up to use that feature in Closure, and GWT development is in Java.

GWT takes the idea one step further - the code splitting functionality lets you define split points, and code that only ever gets called behind the split point does not need to be downloaded on page load, but can instead be downloaded when that split point is first reached.


Unless the optimizer made sure that it didn't inadvertently break any cross-browser compatibility, you would lose one of the biggest benefits of libraries like jQuery.


Right; I imagine library authors would have to adopt some sort of conventional annotation on functions declaring something like "if you execute any function in the set {X,Y,Z}, you have to include all of {X,Y,Z}, because they're cross-platform equivalents for one-another."


GWT solves this problem a few years ago.


When we strip out or modify parts of a library's code we bring onto ourselves an unwanted task of patching it whenever there is a update. Living with the old working version is fine but not very optimal. Say if you made a custom version from jQuery 1.4 i bet it would be painful to update the custom version to use the current release ensuring cross browser compatibility.


You don't strip it out manually; you run the compiler on it. When you get the new version of the library, you update that library to the newest version (by simply replacing it) and then run the compiler again. You're never manually touching/modifying/updating any of the "object code" coming from the compiler, just regenerating it from scratch.


This is what Closure Compiler does, without the need to even dump in a large test suite.




Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: