Kotlin vs
Mint már tudjuk, az összes Android-fejlesztők, a Google nemrég bejelentette a hivatalos támogatását Kotlin az Android. Sok a kapcsolódó kockázatok ezzel a csodálatos nyelvet az Android-projektek csökkent. De a tényleges, különösen a nagyon nagy projektek, mi a Badoo, marad a kérdés, a sebesség szerelvény. Örültem, hogy felfedezzék, hogy vannak már tanulmányokat ebben a témában a hálózatban, és az átruházás egyikük szeretné megosztani.
Tehát, ha át az alkalmazást a Java Kotlin, hogy ez lesz összeállítani tovább?
Egy korábbi cikkben beszéltünk az átalakítás Java Android-alkalmazások teljesen Kotlin. Kotlin kódot kap kisebb és könnyebb volt megtartani, mint a Java, így arra a következtetésre jutott, hogy ez megéri. De néhány a fejlesztők nem akarnak kipróbálni Kotlin, attól tartva, hogy ő lehessen készíteni lassabb Java. És ez az aggodalom - igaz: senki nem akar időt pazarolni kódkonverzió ha az eredmény a szerelvény tovább tartanak. Tehát nézzük meg időtartama az App Lock app összeállítása előtt és után a Kotlin. Nem fogok összehasonlítani a sebesség Kotlin és Java sor, hanem próbálja megválaszolni a kérdést, hogy az átalakítás hatással lesz az egész kódot alap egyik nyelvről a másikra teljes időtartamára a szerelvény.
Amint azt vizsgáltuk idejére a szerelvény
Írtam egy shell-script ismétlések Gradle-szerelvények a különböző forgatókönyveket. Minden teszteket következetesen tízszer. Mielőtt minden új forgatókönyv tisztítjuk projekt. Mert szkripteket használó Gradle démon. Az utolsó megálló előtt fut a viszonyítási alap.
Minden referenciaértékeket végeztük a gép Intel Core i7-6700, futás frekvenciája 3,4 GHz-es, felszerelt 32 GB DDR4 memória és SSD-meghajtó Samsung 850 Pro. A forráskód megy keresztül Gradle 2.14.1.
Azt akartam, hogy megszabaduljon a referenciaértékek több közös használati esetek: tiszta szerelés nélkül / démon Gradle, inkrementális szerelés módosítása nélkül fájlokat, inkrementális szerelvény egy módosított fájl.
Codebase App Lock a Java módszer tartalmazott 5491 12 371 sor kódot. Átalakítása után számos módszert Kotlin csökkent 4987 és a sorok száma - akár 8564. Az átalakítási folyamat az építészet nem hoz jelentős változásokat, így a mérési összeállítása időtartama előtt és után az átalakítás az, hogy világos képet a különbség a között eltelt időtartamot szerelés és Java Kotlin .
Tiszta szerelés nélkül démon Gradle
Ez legrosszabb esetben szempontjából az összeállítás időtartama alatt a két nyelv: a dob egy tiszta épít egy hidegindítás. Ehhez a vizsgálathoz, lekapcsoltam a démon Gradle.
Ennyi ideig tartott mind a tíz összeállítások:
Tíz egymást követő szerelvények nélkül nettó démon Gradle
Az átlagos időtartama Java build 15.5 másodperc Kotlin - 18,5 másodperc: a növekedés 17%. Nem a legjobb kezdés Kotlin, de a legtöbb ember összeállítja a kódot más forgatókönyveket.
állítunk össze néhányszor gyakrabban, mint az ugyanazt a kódot bázis tesszük változik. Ez az a forgatókönyv volt a célja Gradle démon, úgyhogy foglalja azt, hogy mi történik.
Tisztítsuk meg a szerelvényt a mellékelt démon Gradle
Az egyik probléma a JIT compiler-szerű JVM az, hogy az idő, hogy fordítanod végrehajtható kódot, úgy, hogy legalább a végrehajtási folyamat növeli a termelékenységet. De ha abbahagyja a JVM-folyamat, a teljesítmény nyereség elvész. Minden Java-kód szerelvény általában szükséges a start és stop a JVM. Ennek eredményeként, valahányszor újra ugyanazt a feladatot végzi. A probléma megoldására Gradle jön egy démon, továbbra is működik a szerelvények és segít fenntartani a teljesítmény-növekedést, amelyet a JIT lefordított. Engedélyezze a démon használhatja --daemon Gradle-csapat. belépett a parancssorban, vagy úgy, org.gradle.daemon = true gradle.properties fájlt.
Íme az eredmény futtatni ugyanazt a sorozatot szerelvények, de a benne démon Gradle:
Tíz egymást követő egységek engedélyezett démon Gradle
Mint látható, az első futás körülbelül ugyanabban az időben, mint a forgatókönyv nélkül démon. Az alábbi épít a teljesítmény növekszik egészen a negyedik távon. Ilyen forgatókönyv megfelelőbb értékelésére az átlagos időtartama az összeállítás után a harmadik távon a démon már felmelegedett. Ebben az esetben tisztítsa meg a szerelvényt Java tart átlagosan 14,1 másodperc, és Kotlin - 16,5 másodperc: a növekedés 13%.
Kotlin felzárkózik Java, de még mindig elmarad. Mindazonáltal, függetlenül a használt nyelvet Gradle démon csökkenti az időtartamát a szerelvény több mint 40%. Ha nem használja még, akkor itt az ideje elkezdeni.
Tehát a teljes szerelvényt Kotlin fut valamivel lassabb, mint a Java. De általában összeállítjuk a változás után csak néhány sornyi kódot, hogy az inkrementális szerelvény bizonyítania kell a különböző teljesítmény. Hadd tudja, ha Kotlin felzárkózni Java, ahol fontos.
fokozatos megvalósítását
Növekményes összeállítása az egyik legfontosabb tulajdonsága, hogy a fordító a teljesítmény javítása érdekében. A hagyományos összeszerelési újrafordítottuk a projekt valamennyi forrás fájlokat, és az inkrementális - nyomon követheti, hogy mely fájlok változtak, mivel az előző épít, és ennek következtében az recompiled csak azokat a fájlokat, és azokat, amelyek függnek tőlük. Ez lehet egy nagyon erős hatással tart a válogatás, különösen a nagy projektek.
Fokozatos megvalósítását megjelent Kotlin 1.0.2. beépíthetők, hozzátéve kotlin.incremental = true gradle.properties fájlt. vagy a parancssorból.
Szóval, hogyan kell változtatni a időtartamát Kotlin összeállítás képest a Java segítségével inkrementális összeállítást?
Itt vannak az eredmények a viszonyítási alap hiányában változások a fájlokat:
Tíz egymást követő inkrementális épít megváltoztatása nélkül a fájl
Most pedig teszteljük az inkrementális összeállítása előírt egyetlen forrásból változásokat. Ehhez csaltam előtt minden építeni Java-fájl és a Kotlin vetítve. Ez benchmark egy fájl kapcsolódik a felhasználói felület, ez nem függ más fájlokat:
Tíz egymást követő inkrementális összeállítások egy egyedi módosított fájlt
Végül nézzük meg az eredményeket az inkrementális összeállítás egy megváltozott az eredeti fájl behozott sok más projekt fájlok:
Tíz egymást követő fokozatos változások rendszereken, feltéve egyik kulcs fájl
Mint látható, a démon Gradle még bemelegedni két vagy három fut, de azután, hogy a két nyelv nagyon közel vannak a teljesítmény. Ennek hiányában változások fájlokat Java vesz 4,6 másodperc alatt előmelegített összeszerelés, és Kotlin - 4,5 másodperc. Ha megváltoztatjuk a fájlt, de nem használt más fájlokat, a Java csak 7 másodperc, hogy végre a fűtött szerelés és Kotlin - 6,1 másodperc. Végül, ha a módosított fájlt importálja sok más projekt fájlokat, ha melegítik démon Gradle építeni inkrementális Java vesz 7,1 másodperc, míg a Kotlin tart átlagosan 6 másodpercig.
következtetés
Megmértük a teljesítményét számos különböző forgatókönyvek, hogy ha Kotlin képes versenyezni Java fordítási időtartamát. Amikor a háló szerelvények, amelyeket végre viszonylag ritkán, Java Kotlin haladja meg a 10-15%. De a legtöbb fejlesztő elvégzi a részszereléshez, amely nagy nyereség időt elérni inkrementális fordítás. Hála démon Gradle és lehetővé inkrementális összeállítás Kotlin nem rosszabb, sőt valamivel nagyobb, mint a Java. Egy lenyűgöző eredmény, amely nem is vártam. Azt ajánlom a fejlesztőcsapat Kotlin tiszteletük létrehozására nyelv, amely nem csak kiváló lehetőség, de összefog olyan gyorsan.
Ha még nem próbálta Kotlin félelem időtartamának növelésére összeállítására, akkor nem aggódni: lefordítja ugyanolyan gyors, mint a Java.
A nyers adatokat összegyűjtjük rám, amikor futás referenciaértékek, feküdjön ide.