Skip to content

Instantly share code, notes, and snippets.

@island205
Forked from Raynos/critique.md
Created December 5, 2011 02:05
Show Gist options
  • Save island205/1432001 to your computer and use it in GitHub Desktop.
Save island205/1432001 to your computer and use it in GitHub Desktop.
jQuery library critique

jQuery

$ itself is a god object. Everything goes on it. The standard plugin / extension architecture that is recommended is to just bolt more methods on $ itself!

Surely this is bad. An example would be how we have both $.load which is overloaded to do completely different things. If they were on two separate sensibly named objects $Container.load and $EventTarget.load. Personally I would deprecate the latter in favour of .on('load'

The animation should be it's own little modular thing, not bolted onto $. Ajax should be it's own little modular thing, not bolted onto $

$

This is overloaded to three functions. It would be more sensible to have select, construct and domready as there seperate entities.

$.get, $.getJSON, etc

We have some subset of $.ajax short cuts which are uneven. These should be removed.

$.attr

What does it even do? It doesn't just set / get attributes. It does a whole bunch of weird logic for backwards compat.

:text :button :checkbox

Useless, slow utility selectors. Having these things promotes bad and slow code. You wouldn't want to use them for performance penalities. They also make the CSS selector a joke by throwing propitiatory selectors in the mix.

At least split the selector engine into two, one that adheres to (a subset of) standards and one which have their own extensions.

.css

css isn't bad as such. But it's overused, a lot. We do need a cross browser style manipulation utility but we don't need documentation recommending you use it everywhere.

The community seems to forget the massive penalty that is causing re flows. editing in-line css is slow and should be avoided

.toggle

Another overloaded method that shouldn't be overloaded, that's just plain confusing

.wrap, .live

These shouldn't exist.

.each, .map, etc

Doesn't match the .forEach, .map, etc signature. Massively confusing

.domManip

domManip executes all scripts irregardless of their status. It does not bother to check whether they are inserted into a document nor does it bother to check whether their "already started" flag is set.

The first is a flag indicating whether or not the script block has been "already started". Initially, script elements must have this flag unset (script blocks, when created, are not "already started"). The cloning steps for script elements must set the "already started" flag on the copy if it is set on the element being cloned.

.bind

Function.prototype.bind exists. Pick a better name

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment