10
votes

Bonnes ressources pour JavaScript extrême minifiée (style JS1K)

Alors que je suis sûr que la plupart des javascrectes sont conscientes, il y a un nouveau, JS1K à thème de Noël . Je prévois de saisir cette époque, mais je n'ai aucune expérience produisant ce code mini-minificateur. Est-ce que quelqu'un connaît de bonnes ressources pour ce genre de chose?


0 commentaires

7 Réponses :


14
votes

Le compilateur de fermeture Google est un bon mini-inform javascript.

Il y a un bon < un href = "http://closure-compiler.appot.com/home" rel = "noreferrer"> outil en ligne pour une utilisation rapide ou vous pouvez télécharger l'outil et l'exécuter dans le cadre d'une construction de site Web Processus.


EDIT: Ajout d'une liste non exhaustive des astuces que vous pouvez utiliser pour minifier JavaScript extrêmement, avant d'utiliser un minificateur:

raccourcir les noms de variables longs
Utilisez des références raccourcies à des variables intégrées telles que d = document; w = fenêtre .

Intervalle de jeu
La fonction seinterval peut prendre une fonction ou une chaîne. Passez une chaîne pour réduire le nombre de caractères utilisés: setInterval ('A -; B ++', 10) . note qui passant dans une chaîne force une invocation d'évaluation afin qu'elle soit plus lente que de passer dans une fonction.

réduire les calculs mathématiques
Exemple A = B + B + B peut être réduit à A = 3 * B .

Utilisez la notation scientifique < BR> 10000 peut être exprimé en notation scientifique comme 1e4 sauvegarder 2 octets.

DROP Drop Zeroes

0,2 = .2 enregistre un octet

Opérateur de terraine xxx

peut être exprimé comme < Code> Résultat = a> B? x: y

bretelles de goutte

Les accolades ne sont nécessaires que pour les blocs de plusieurs instructions.

PRÉCÉDENCE DE L'OPERATEUR

Compter sur la priorité de l'opérateur plutôt que d'ajouter des supports inutiles qui facilitent la lisibilité du code.

Coup d'accumulation de variable

Plutôt que fonction x () {A = 1, b = 2; ...} () passe des valeurs dans la fonction, fonction x (a, b) {...} ( 1,2)

Pensez en dehors de la boîte

Ne touchez pas automatiquement les façons standard de faire des choses. Plutôt que d'utiliser d.getelementByID ('P') pour obtenir une référence à un élément DOM, pourriez-vous utiliser b.children [4] d = document ; B = corps .


source d'origine pour la liste ci-dessus de tours:

http://thingsinjars.com/post/293/the-Quest-for-extreme-javascript-Minification/


0 commentaires

2
votes

Tout d'abord tout, je viens de lancer votre code dans un mini-informer ne vous aidera pas autant beaucoup. Vous devez avoir la petite taille de fichier extrême lorsque vous écrivez le code. Donc, en partie, vous devez apprendre toutes les tours vous-même.

Aussi, quand il s'agit de minificateurs, Uglifyjs est la nouvelle star de tir ici, sa sortie est plus petite que GCC's et c'est bien plus vite aussi. Et comme il est écrit en pure JavaScript, il devrait être trivial pour que vous puissiez découvrir quelles sont toutes les astuces que cela s'applique.

Mais à la fin, tout va de même pour que vous puissiez trouver une solution intelligente et petite pour quelque chose qui est génial.


1 commentaires

Merci - je suis conscient que les minificateurs ne font qu'une partie de la solution. J'espérais que quelqu'un pourrait avoir des conseils sur "les astuces".



1
votes

Un ami a écrit packer JSCrush pour JS1K.

Gardez à l'esprit de garder autant de code aussi semblable que possible.

Mon flux de travail pour l'emballage extrême est: Fermeture (jolie imprimée) -> Optimisations des mains, Similaire de la fonction, Autre Code Similarité -> Fermeture (espact uniquement) -> Jscrush.

Ceci s'éloigne environ 25% des données.

Il y a aussi Packify , mais je n'ai pas testé cela moi-même.


0 commentaires

4
votes

Spolto a raison.
Tout meneur de code ne fera pas le tour seul. Vous devez d'abord optimiser votre code, puis faire des modifications manuelles sales.

En plus de la liste des astuces de Spolto, je souhaite encourager l'utilisation d'opérateurs logiques forts> au lieu du classique si code> autre code> Syntaxe. Ex:
Le code suivant p> xxx pré>

est un peu équivalent à p> xxx pré>

une autre chose à prendre en compte pourrait être DÉCLARATION DE VARIABLE multiple : P>

var a = "eval(''.replace(/function/g,'F'))".length,
    b = ('function'.length-'F'.length)*4;
alert("you should" + (a<b?"":" NOT") + " use this technique!");


0 commentaires

1
votes

Ceci est la seule version en ligne de @Cowboy Script Packer 'S:

http://iwantaneff.in/packer/

très pratique pour l'emballage / minier JS


1 commentaires

Lien brisé :-(



2
votes

0 commentaires

4
votes

Dans le lien suivant, vous trouverez des astuces étonnamment bonnes pour minifier le code JS pour ce concours:

http://www.claudioc.com/javascript-golfing/

Un exemple: (extrait de la section opérateurs de court-circuit ): xxx

ou plus essoticérique TRUK Contexte de contexte de toile : xxx

et voici une autre liaison de ressource avec incroyablement bonnes astuces: https://github.com/jed/140bytes/wiki/byte- Techniques de sauvegarde


0 commentaires