Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , 23 reacties

Google heeft een aantal Javascript-tools en -bibliotheken vrijgegeven die de zoekgigant gebruikt heeft bij de ontwikkeling van zijn webapps. Google hoopt dat de zogenaamde Closure Tools voor beter presterende webapplicaties zorgen.

Onderdeel van de opensource-gereedschapskist voor ontwikkelaars die met Javascript werken is de Closure Compiler. Deze tool analyseert Javascript-code, verwijdert overbodige code en optimaliseert de scripttaal voor een snellere verwerking door Javascript-engines.

Daarnaast wordt de aangeboden code gecontroleerd op syntaxis en waarschuwt de compiler ook voor andere fouten. De compiler is niet alleen beschikbaar als een commandline-tool, ook is er een Closure Compiler-webapp beschikbaar. Aanvullend kan de Closure Inspector in Firefox geinstalleerd worden, die weer samenwerkt met de Javascript-debugger van Firebug.

Om Javascript-programmeurs op weg te helpen, is ook de Closure Library toegankelijk gemaakt. Deze bibliotheek bevat kant-en-klare brokken Javascript die geoptimaliseerd zijn om te communiceren met servers. Geregistreerde gebruikers kunnen ook hun eigen code aandragen bij de Closure Library. De bibliotheek is volgens Google ontstaan uit de behoefte naar een standaard class library die bij bijvoorbeeld de Java Development Kit wordt meegeleverd.

De Closure Templates zijn opgebouwd op basis van Javascript en Java, en bevatten reeds gecompileerde templates voor met name interface-elementen. De templates bevatten volgens Google eenvoudig leesbare en aanpasbare syntax en zouden op stabiliteit beproefd zijn in webapplicaties als Gmail en Google Docs.

Gerelateerde content

Alle gerelateerde content (32)
Moderatie-faq Wijzig weergave

Reacties (23)

En onder 'overbodige code' moet ik comments en whitespace verstaan?
ook namen van variabelen worden ingekort ;). Zo krijg je de boel wel compact natuurlijk.
Als je hem op geadvanceerd zet, wordt ook unreachable code verwijderd, en in sommige gevallen worden stukjes uit methoden geknipt, in plaats van de gehele methode aanroepen. Een voorbeeld van google zelf:

function hello(name) {
// Greets the user
alert('Hello, ' + name);
}
hello('New user');
wordt dan gewoon alert('Hello, New user');. Als je hem gebruikt in ADVANCED_OPTIMIZATION mode.
Dat is zeker wel een vooruitgang qua performance. Netjes van google :)

[Reactie gewijzigd door Gamebuster op 6 november 2009 18:20]

Dan is dat meer een bug die de programmeur scripter heeft gemaakt dan een optimalisatie uitvoering.

unreachable code is een bug, geen optimalisatie fout :/

Maar de mogelijkheden voor syntax controle, variabele gebruike, etc.. is wel heel mooi :9~

[Reactie gewijzigd door s.stok op 7 november 2009 13:11]

Is dat niet gewoon een javascript compressor, waar er al zo'n 10 van bestaan?
En dat laat precies zien waar het bij Javascript aan schort op dit moment.
Is dat niet gewoon een javascript compressor, waar er al zo'n 10 van bestaan?
Als je eens op de site van de closure templates kijkt dan zie je dat de compiler een andere taal (Soy of Java) vertaalt naar Javascript, inclusief crossbrowser compatibility, veiligheid, etc.
Nu vraag ik me dus af of dit ook daadwerkelijk voor 100% van de JavaScripts werkt, die 'Closure_Compiler'
Het is een compleet andere taal wat omgezet wordt naar javascript.

Voorbeeldje:
http://code.google.com/cl...s/docs/helloworld_js.html
Je kijkt alleen naar de templates. Ze hebben daadwerkelijk meer, bijv. een "compiler".

Ik heb wat custom YUI javascript getest en ben er niet heel erg van onder de indruk. Het doet niet veel meer (in mijn geval) dan de YUI compressor (online versie).

Mijn test file werd met closure 21.74% kleiner. YUI Compressor wist er 32% af te snoepen.
Compressie is niet alles:
function displayNoteTitle(note) {
alert(note['myTitle']);
}
// Store the function in a global property referenced by a string:
window['displayNoteTitle'] = displayNoteTitle;
Word vertaald naar :
function a(b){alert(b.title)}window.displayNoteTitle=a;
Dat laatste stukje "window.displayNoteTitle=a;", is overbodig maar zorgt er wel voor dat javascript bestanden die nog ergens rondzwerven gewoon nog de oude functie kunnen aanroepen :) .

[Reactie gewijzigd door djexplo op 6 november 2009 21:41]

YUI Compressor maakt daar dit van:
function displayNoteTitle(a){alert(a.myTitle)}window.displayNoteTitle=displayNoteTitle;
Zelfde "optimalisatie", maar inderdaad, iets leesbaarder, aangezien 'displayNoteTitle' niet wordt vervangen door 'a' (wat closer ook niet doet in SIMPLE_OPTIMIZATIONS modus en wellicht dat je YUI Compressor met wat extra parameters ook wel zo gek krijgt).

Al met al, weinig innovatiefs onder de zon.

[Reactie gewijzigd door tomhagen op 6 november 2009 21:56]

Innovatief, tja....

Ik vind het publiceren van de libraries en templates en code, een dienst van betekenis waar veel bedrijven hun voordeel mee zullen doen.
De naam van globale properties aanpassen is natuurlijk een risico, zeker als er afhankelijkheden bestaan tussen verschillende scriptfiles. Het is mooi dat er een pointer naar de oude naam wordt bewaard, maar de introductie van de nieuwe property 'a' kan natuurlijk wel andere conflicten opleveren.

Daarbij is dit gerommel in de marge; als je een 'simpele' compressor gebruikt (bijvoorbeeld JSMin+ ;)) en daarnaast je JS files gewoon serveert met HTTP compressie dan bereik je nagenoeg hetzelfde, introduceer je geen extra risico's en hoef je je werkwijze ook niet aan te passen om eventuele ongewenste effecten te voorkomen.

edit: een snelle test leert mij ook dat deze 'compiler' geen ondersteuning biedt voor IE conditional compilation statements; deze worden volledig gestripped als ware het comments.

[Reactie gewijzigd door crisp op 8 november 2009 13:14]

En wat voor test file gebruik je dan?
Misschien ook logica verbetering?
Btw een javascipt compiler?? Is het niet meer optimalisator.
Aangezien javascipt niet gecompiled wordt.
Een compiler hoeft niet perse naar machinetaal te compileren, je hebt ook de Java en .Net-compilers, die compileren naar bytecode, wat nog steeds niet direct uivoerbaar is zonder een interpreter of JIT-compiler (deze bytecode is eigenlijk gewoon een minder leesbare maar nog steeds platform-onafhankelijke taal).
Je zou kunnen stellen dat, ondanks dat deze tool niet echt naar een andere taal compileert, deze tool de code zodanig in een andere staat brengt dat deze niet meer echt als geoptimaliseerde versie van de normale code gelezen valt te worden, en dan zou de naam compiler wel op zijn plek zijn denk ik :)

[Reactie gewijzigd door graey op 6 november 2009 18:31]

Oops: 8)7 Aangezien je templates moet maken toch een compiler O+ Maar goed, blijft leuk spul.
Ze hebben echt een compleet andere taal ontwikkeld wordt omgezet wordt naar javascript.

Zie:
http://code.google.com/cl...s/docs/helloworld_js.html

Met LivPHP had ik oorspronkelijk als idee ook een eigen "taal" te ontwikkelen welke je kon "compileren" tot 2 scripts: 1 JS script en 1 PHP script. Zo kon de server data outputten of kon er via aJaX data verzonden worden dat via javascript werd weergegeven op basis van deze scripts.

Zie ook:
http://www.phphulp.nl/forum/showtopic.php?id=62547&cat=1

Omdat een compleet andere taal een beetje lomp en iets te hoog gegrepen was had ik maar LivPHP ontwikkeld om ongeveer hetzelfde te bereiken, maar ben niet helemaal tevreden met het resultaat. Ga in de toekomst zeker mijn oude idee weer eens naar boven halen.

[Reactie gewijzigd door Gamebuster op 6 november 2009 18:16]

Ik heb al een aantal keer JSlint gebruikt op mijn code. Het is niet leuk om je code de eerste keer door heen te halen, maar het levert uiteindelijk wel nettere code op.
Ik heb ook effe snel door het gehele pakket van Closure gekeken.
Ik ben tegenwoordig ook dagelijks bezig met javascript, en heb al veel js frameworks gebruikt als Prototype, jquery, Ext JS 2.0 en 3.0 etc etc.
En ik gebruik ook al een tijdje javscript compressoren.
Wat ik vind, is omdat het van Google komt, het weer allemaal overrated wordt door iedereen. Natuurlijk is het weer een handig hulpmiddel van Google. En die schieten ook tegenwoordig als paddenstoelen uit de grond. Hetzelfde geldt voor de javscript frameworks.
Maar het is niet echt een toegevoegde waarde voor mij. Een goede programmeur van javascripts weet alle do's en dont's. En fouten in je code, gebruik gewoon een goede editor/programmeer omgeving. Na de ontwikkeling haal je de code door de compressor en klaar is kees. Ik denk dat iedereen zijn pakketje zoekt wat het meest bij hem/het bedrijf past en wat je wil ontwikkelen. Het is niet meer dan weer one of kind pakketje. Het valt me zelfs wat tegen, ik had hogere verwachtingen.
Mooizo.. En euh, nice hoor.. Die compiler!!

Op dit item kan niet meer gereageerd worden.



Apple iOS 10 Google Pixel Apple iPhone 7 Sony PlayStation VR AMD Radeon RX 480 4GB Battlefield 1 Google Android Nougat Watch Dogs 2

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True