Ionic 2 vs. Ionic 1: Performans Kazanımları, Yeni Araçlar ve İleriye Doğru Büyük Bir Adım

Yayınlanan: 2022-03-11

İyonik proje hızla popülerlik kazanıyor. GitHub'da 27.000'den fazla yıldızla, dünya çapında en popüler 50 açık kaynak projesinden biri haline geldi.

Ve yakın zamanda Ionic 2'nin kararlı sürümü duyurulduğundan, mühendislerin Ionic 2 ile Ionic 1 arasındaki farkları analiz etmeleri ve anlamaları için mükemmel bir zaman.

Yüksek düzeyde, Ionic 2, Ionic 1 projesinin Angular >= 2.x ile tamamen yeniden yazılmış halidir. Ionic 1'i kullanma konusundaki 2+ yıllık deneyimime göre, bunun pratik anlamda ne anlama geleceği aşağıda açıklanmıştır.

Artırılmış Değişiklik Algılama Performansı

Ionic 1, Angular 1.x'i ve Ionic 2, Angular >= 2.x'i temel alır. Yalnızca Angular >= 2.x'i tek başına kullanarak elde ettiğiniz performans artışı önemlidir.

Angular 1.x ile, performanslı uygulamalar elde etmek için çok fazla derin çerçeve bilgisi gerekiyordu ( $watch , Tek seferlik bağlama vb.). Angular >= 2.,x uygulamaları kutudan çıktığı gibi hemen hemen performans gösterir.

Angular'ın yeni sürümü, ünlü ve reddedilen özet döngüsünü bıraktı (uygulamanın her değişkenini her değişiklikte izleme ve test etme). Bunun yerine Angular >= 2.x, uygulama değişikliklerini (hem eşzamanlı hem de eşzamansız) izlemek için Zone.js'ye güvenir.

Angular'da Değişim Algılama >= 2.x, kaputun altında işlerin nasıl yürüdüğünü anlamak için araştırmaya değer. Angular >= 2.x'de değişiklik tespiti her zaman yukarıdan aşağıya doğru yapılır. Uygulamanızın performansını kontrol etmek istiyorsanız, kendi bileşenlerinizde doğru değişiklik algılama stratejisini ( OnPush veya Default ) kullanmak çok önemlidir.

Tüm Ionic 2 bileşenleri OnPush stratejisini kullanır, yani değişiklik tespiti her zaman değil, bunun yerine yalnızca girişler değiştiğinde yapılır. Bu strateji ayrıca bileşenlerin alt ağaçlarının gereksiz şekilde oluşturulmasını da önler. Temelde zaten sizin için optimize edilmiştir.

Performanslı bir Ionic1 uygulamasını nasıl edineceğiniz hakkında daha fazla bilgi edinmek istiyorsanız, bu Ultimate AngularJS ve Ionic performans hile sayfasını okumanızı öneririm.

Daha Hızlı DOM Performansı

Açısal Belge Nesne Modeli (DOM) manipülasyonu çok gelişti. Reaktif bir Kullanıcı Arayüzü (UI) istiyorsanız, DOM manipülasyonu ve JavaScript performansı önemlidir.

açısal v1.5.8 açısal v2.2.1 Tepki v15.4.0 VanilyaJS
1k satır oluşturma 264.96 177.07 177.58 126.05
10k satır güncelleniyor 251.32 178.76 187.73 54.23
Bir satırı kaldırma 54.13 50.59 50.57 36.93
10k satır oluşturma 2247.40 1776.01 1839.46 1217.30
10k satırlık bir tabloya 1k satır ekleme 388.07 278.94 311.43 233.57
10k satırlık bir tabloyu temizleme 650.28 320.76 383,62 199.67

Örneğin, bir tabloda 1.000 satır oluşturmak Vanilla JavaScript ile 126 milisaniye, Angular ile %110 daha fazla (264ms) sürer. 1.x ve Angular >= 2 ile yalnızca %40 (177ms) daha fazla. Gördüğünüz gibi, Angular >= 2.x'in performansı Angular 1.x'ten daha iyidir ve React performansına benzer.

Ionic 2, bir kez daha bu performans yükseltmesinden yararlanıyor ve bunu "ücretsiz" yapıyor.

Yeni Web Animasyonları API'sı

Ionic 1 ve Ionic 2, dahili geçişler ve animasyonlar için hala CSS animasyonlarına güveniyor, ancak Ionic 2 Angular >= 2.x'i temel aldığından, geliştiricilerin Angular animasyon sistemi aracılığıyla yeni Web Animasyonları (W3C) API'sine erişimi var.

Web Animasyonları API'si, geliştiricilere tarayıcının animasyon motoruna erişim sağlayan bir JavaScript API'sidir. Henüz tüm tarayıcılarda desteklenmemektedir, ancak bir çoklu dolgu ile onu hemen şimdi kullanabilir ve Web'i canlandırmanın en performanslı ve gelecek vaat eden yollarından birinin keyfini çıkarabilirsiniz.

Web Animasyonları (W3C) API ile animasyonlarınızın kontrolünü elinize alın

Kaynak

Angular >= 2.x animasyon API'si, karmaşık animasyonları (farklı durumlardan veya grup animasyonlarından giriş ve çıkış) kolayca tanımlamanıza olanak tanır ve geri aramalar aracılığıyla animasyonların yaşam döngüsüne erişmenizi sağlar.

 @Component({ template: ` <ul> <li *ngFor="let hero of heroes" (@flyInOut.start)="animationStarted($event)" (@flyInOut.done)="animationDone($event)" [@flyInOut]="'in'"> {{hero.name}} </li> </ul> `, animations: [ trigger('flyInOut', [ state('in', style({ opacity: 1, transform: 'translateX(0)' })), transition('void => *', [ style({ opacity: 0, transform: 'translateX(-100%)' }), animate('0.2s ease-in') ]), transition('* => void', [ animate('0.2s 10 ease-out', style({ opacity: 0, transform: 'translateX(100%)' })) ]) ]) ] })

Yerleşik Yerel Kaydırma

Yerel kaydırma, Ionic 2'nin desteklenen Web Görünümlerinde kaydırma olaylarını dinlemesini sağlar. Yapar
Pull to Refresh , List Reordering veya Infinite Scroll bu olayları taklit etmeden mümkündür (JavaScript kaydırma).

Yerel Kaydırma
iyonik 1 iyonik 2
️ Android ️ Android
iOS ️ iOS
Windows Telefon ️ Windows Phone

Şimdiye kadar JavaScript kaydırma gerekliydi, ancak Chromium (Android) ve WKWebView (iOS) Web Görünümleri gelişti ve şimdi yerel kaydırmayı destekliyor. Yalnızca Ionic 1 ile Android'de (Aralık 2015'ten beri) varsayılan olarak etkindir ve Ionic 2 ile tüm platformlarda etkinleştirilmiştir.

Yerel kaydırma desteği, daha iyi performans sağlar ve eşzamansız olaylar sayesinde sorunsuz kaydırma sağlamaya yardımcı olarak kullanıcı deneyimini iyileştirir.

Geliştirilmiş Bileşenler API'sı

Ionic 2, Ionic 1'i ünlü yapan, ancak şimdi geliştirilmiş ve Angular >= 2.x'e dayalı tüm bileşenlere erişmenizi sağlar. İşte en yaygın bileşenlerin listesi:

  • Buton
  • kart
  • Simge
  • Liste
  • Menü
  • kalıcı
  • araç çubuğu

API bileşenleri, Ionic 1 ve Ionic 2 arasında biraz değişti. Örneğin, Ionic 1 ion-spinner bileşenleri, döndürücü türü için icon özniteliğini kullanır:

 <ion-spinner icon="bubbles"></ion-spinner>

Ionic 2 name niteliğini kullanırken:

 <ion-spinner name="bubbles"></ion-spinner>

Gördüğünüz gibi, Ionic 1 bileşen API'sine aşina iseniz, Ionic 2 bileşenlerini kullanırken de kendinizi rahat hissedeceksiniz. Sadece bu farklılıkların farkında olmanız gerekecek.

Etkileyici bir bileşen listesiyle, Ionic 1 ile yapabileceğiniz her şey, Ionic 2 ile ve hatta daha fazlası ile yapılabilir.

Web Çalışanlarının Tanıtımı

Web Çalışanları, uygulamanızın arka plan JavaScript dizilerinde komut dosyaları çalıştırmasına izin verir. Çalışanlar, uygulama bağlamınızın dışında (yani, kullanıcı arayüzüne müdahale etmeden) sıkıcı görevleri ve HTTP isteklerini gerçekleştirebilir. Bugün, Web Çalışanları tüm büyük tarayıcılar tarafından desteklenmektedir.

Geleneksel olarak, tüm çerçeveler, window ve document nesnelerinin üzerine inşa edildi ve bunlara güvenildi. Ancak işçilerde de mevcut değildir. renderer ayrıştıran yeni Angular >=2 mimarisiyle, uygulamayı Web Workers (veya bu konuda başka bir platform) içinde çalıştırmak daha kolay hale getirildi.

Ionic 2, yeni ion-img bileşeniyle Web Workers kullanımını denemeye başlıyor. Şimdilik ion-img yalnızca VirtualScroll listesinde kullanılabilir. Görüntü HTTP çağrısını Web Çalışanlarına devreder ve ayrıca tembel yüklemeyi de destekler (yani, yalnızca görünüm alanında görüntüleri alır ve oluşturur). Web uygulamanız artık yalnızca kullanıcı arayüzüne odaklanıyor ve gerisini işçilere bırakıyor.

İşte nasıl kullanılacağına bir örnek:

 <ion-img width="80" height="80" [src]="imageSrc"></ion-img>

Bunun yalnızca başlangıç ​​olduğunu ve yakın gelecekte daha fazla kullanım veya Web Çalışanı görmeyi beklediğimizi unutmayın.

TypeScript Avantajları

Ionic 2 kullanıyorsanız, TypeScript kullandığını zaten biliyorsunuzdur. TypeScript, düz JavaScript'i derleyen bir JavaScript ES2015 üst kümesidir. TypeScript ile, tüm benzersiz özelliklerine (arayüzler, karışımlar vb.) ve ES2015 özelliklerine (ok işlevleri, oluşturucu, çok satırlı dizeler vb.) erişebilirsiniz.

Bir Birleşik Devletler başkanının adını görüntüleyen bir Angular >= 2.x bileşeni örneğine bakalım:

 import { Component } from '@angular/core'; export interface IPresident { id: number; name: string; } @Component({ selector: 'my-app', template: ` <h1>{{title}}</h1> <h2>{{president.name}}</h2> ` }) export class AppComponent { title:string = 'President of the United States'; president: IPresident = { id: 44, name: 'Barack Obama' }; }

Başkanın Nesne şeklini tanımlayan bir Arayüz ( IPresident ) kullanıyoruz. Özellikle bir projede birkaç geliştirici varsa, neyi manipüle ettiğinizi açıklayan arayüzlere sahip olmak ilginçtir. Bir hata yaparsanız ve örneğin başkan adı için bir boolean kullanırsanız, IDE'niz derleme gerçekleşmeden önce bile size bir şeylerin yanlış olduğunu söyleyecektir.

Kullandığınız hemen hemen her IDE'de (Visual Studio Code, Atom, WebStorm veya benzeri), otomatik tamamlamayı, tip kontrolünü ve bir linter'i etkinleştirmek için eklentiler bulacaksınız.

TypeScript, Ionic 2 için gerçek bir avantajdır, çünkü kodunuzu daha anlaşılır kılar, yazım hatalarından kaçınmanıza yardımcı olur ve daha üretken olmanıza yardımcı olur (otomatik tamamlama, modüllerin otomatik içe aktarılması, fareyle üzerine gelindiğinde araç ipucu tanımları ve CTRL + Click gibi özellikler aracılığıyla) tanımlara gidin).

Tamamen Yeni CLI v2

Ionic CLI v2, doğrudan komut satırı aracılığıyla Sayfalar, Bileşenler, Borular ve Yönergeler oluşturmanın bir yolunu ekler.

Örneğin, MyPage adında yeni bir sayfa oluşturmak istiyorsanız, çalıştırabileceğiniz komut şudur:

 $ ionic generate page MyPage √ Create src/pages/my-page/my-page.html √ Create src/pages/my-page/my-page.ts √ Create src/pages/my-page/my-page.scss

Komut, kuralları takip edecek ve sizin için üç dosya oluşturacaktır:

Şablonunuz için bir HTML dosyası. Bileşen stiliniz için bir SASS dosyası. Bileşen mantığınız için bir TypeScript dosyası.

Oluşturulan my-page.ts dosyası şöyle görünür:

 import { Component } from '@angular/core'; import { NavController, NavParams } from 'ionic-angular'; @Component({ selector: 'page-my-page', templateUrl: 'my-page.html' }) export class MyPagePage { constructor(public navCtrl: NavController, public navParams: NavParams) {} ionViewDidLoad() { console.log('ionViewDidLoad MyPagePage'); } }

Bir ekip üzerinde çalışırken, CLI kullanımı yoluyla kuralların uygulanması harikadır. Angular 2.x ve Ionic 2, Angular uygulama mimarisinin ne olması gerektiğinin daha iyi anlaşılmasına yardımcı olmak için harika bir iş çıkarıyor. Tabii ki, isterseniz sözleşmelerden ayrılmakta özgürsünüz.

Geliştirilmiş Paketleme

Ionic 1, uygulamaları bir araya getirmek için Gulp ekosistemine güvenirken, Ionic 2 favori araçlarınızı seçmenize izin verir. Ionic 2, ayrı bir proje olarak kendi araç koleksiyonunu sağlar: ionic-app-scripts.

ionic-app-scripts , geliştiricilerin paketleme konfigürasyonu hakkında hiç endişelenmemesi gerektiği fikrine dayanmaktadır. Projenizin Ionic 2 ile sahip olacağı tek paketleme bağımlılığı @ionic/app-scripts . Varsayılan olarak Webpack'i kullanır, ancak Rollup'u da kullanabilirsiniz.

Ionic 2 ve CLI v2 ile assets ve TypeScript dosyaları aynı src klasöründe yaşar. www artık her derleme sırasında oluşturuluyor ve bu nedenle sürüm kontrol takibinden çıkarılmalıdır.

Hata Raporlama Aracının Tanıtımı

Yeni CLI ayrıca harika bir Hata Raporlama aracını da tanıttı. Bunu elde etmek için İyonik sürüm >= 2.1 yüklemeniz gerekir:

 $ npm install -g ionic $ ionic -v # should return at least 2.1.12

Artık her hata yaptığınızda, bununla ilgili anlamlı bilgiler içeren bir modal açılır. Örneğin:

Hata Raporlama

Geliştirme sırasında çalışma zamanı hatalarından en kısa sürede haberdar olmak inanılmaz derecede değerlidir ve Ionic 2 bu konuda harika bir iş çıkarmıştır.

Zaman Öncesi Derlemesinin (AoT) Faydaları

Ahead of Time Derleme (AoT), Angular ekosisteminde küçük bir devrimdir. Angular 2.x ile tanıtılan AoT, şablonların tarayıcı tarafından anında derlenmek yerine bir derleme adımında önceden derlenmesine olanak tanır.

Bu büyük bir fark gibi görünmese de, aslında öyle. AoT ile şablon derleyiciyi uygulama ile birlikte göndermemiz gerekmez. Bunun iki avantajı vardır. İlk olarak, paket daha küçük olacaktır, bu da ağı doğrudan etkiler ve bu nedenle uygulamanızın daha hızlı indirilmesini sağlar. İkincisi, anında şablon derlemesi gerekmediğinden uygulama daha hızlı önyüklenir.

Ionic 2, uygulamanızın boyutunu ve yükleme süresini ücretsiz olarak optimize etmek için Angular 2.x AoT'nin tüm avantajlarından yararlanır.

AOT öncesi ve AOT sonrası

İyonik 2 İleriye Doğru Büyük Bir Adım

Genel olarak, Ionic 2, hibrit mobil endüstrisi için ileriye doğru atılmış büyük bir adımdır. Ionic 2 bileşenleri seti, Ionic 1 bileşenlerine benzese de, Ionic 2 birçok araç ve performans iyileştirmesi sunar.

Gerçekten de TypeScript, ionic-app-scripts ve Ionic CLI gibi araçlarla Ionic 2 geliştiricileri daha üretken olabilir, bakımı daha kolay kodlar üretebilir ve çalışma zamanı hataları meydana gelir gelmez uyarılır.

Ionic 2 ayrıca, özellikle darboğazlarını (değişiklik algılama, animasyonlar, yükleme süresi vb. ile ilgili) ortadan kaldırarak veya azaltarak Ionic 1'e göre ücretsiz bir performans artışı sağlar.

Ionic 2 ile uygulamalarınız her zamankinden daha yerel hissedecek. Bir tur atmak için çıkarın. Yaptığına sevineceksin.

İlgili: İyonik Geliştiricilerin Yaptığı En Yaygın 9 Hata