HTML5 ve JS uygulamalarının yerel uygulamalar kadar iyi performans göstermesini engelleyen nedir?


9

Anladığım kadarı ile,

  • HTML bir biçimlendirme dilidir, bu nedenle XAML, XIB ve Android'in kullandığı her şey ve diğer yerel kullanıcı arayüzü geliştirme çerçeveleri de.
  • JavaScript, olay işleme, istemci tarafı doğrulamaları ve C #, Java, Objective-C veya C ++ gibi çeşitli şeyleri içeren istemci tarafı komut dosyalarını işlemek için kullanılan bir programlama dilidir.
  • Sencha, Angular vb.Gibi form çerçevelerinde MVC / MVVM desenleri vardır.
  • Diğer çerçevelerde olduğu gibi hem sqlite hem de anahtar / değer deposu biçiminde localStorage var ve eksik olduğu hemen hemen her şey için API spesifikasyonunuz var.
  • Yerel bir UI çerçevesinin kullanıcı arayüzünü oluşturması gerektiğinde, benzer bir işaretlemeyi ayrıştırmalı ve kullanıcı arayüzünü oluşturmalıdır.

Soru dökümü

  • HTML ve JS'de de aynı şeyi yapmaktan vazgeçen nedir?
  • HTML (CSS ile birlikte) ve JS arasında neden aynı şekilde performans gösterilemiyor?
  • Bir katman olsa bile .net çalışma zamanı ve JVM, C ++, C'nin kullanılmadığı diğer durumlarda da vardır.
  • Öyleyse Dalvik gibi Android örneğini ele alalım, Chromium neden HTML'nin android işaretlemesinin yaptığı ve JavaScript'in Java'nın yaptığı için kullanıldığı başka bir seçenek (dalvik ve NDK ile birlikte) olamaz?

Yani soru şu ki,

Mevcut uygulamalar iyi olmasa da, teorik olarak HTML5 tabanlı uygulamaların mobil cihazlardaki diğer yerel uygulamalar gibi çalışmasını sağlamak mümkün müdür?


1
lütfen hangi ifadelerden başladığınızı ve asıl sorunun ne olduğunu açıklığa kavuşturun.
funkybro

Ne demek istediğini açıklayabilir misin "HTML ve JS'de aynı şeyi yapmanın anlamı nedir?" "Aynı" ile ne demek istediğinizi anlamıyorum - daha önce dört ifade verdiniz ve bu soruda hangisine atıfta bulunduğunuzdan emin değilim.
apsillers

Yeni bir şey yerine biçimlendirme olarak HTML kullanan bir yerel geliştirme platformum varsa. ve JS'yi dil olarak kullanır, performans daha iyi olur mu? Bu G / Ç'deki Google, Chrome OS'de değil pratik ve Android'i telefonda kullandıklarını söyledi. Yani, FF OS pratik bir kavram değil mi? en iyi uygulamalar takip edilirse FFOS uygulamalarının ilgili platformlarda android uygulamaları kadar iyi performans göstermesi mümkün müdür?
Amogh Talpallikar

Windows Metro uygulamalarına göz atın. GUI tasarımı için HTML ve arkasındaki mantık için Javascript kullanan yerel uygulamalardır.
Philipp

HTML / JS performansı genellikle bilgileri görüntüleyen ve kullanıcı eylemlerine dayanarak bir dış sunucuya istekte bulunan bir kullanıcı arabirimi için yeterince iyidir. Başlangıçta bundan daha fazlası için inşa edilmedi, ancak şimdiye kadar etkileyici bir şekilde daha yetenekli. Yine de, daha doğrudan cihaza erişim, yerel kodla arayüz oluşturma veya işletim sistemi ile etkileşim (örn. Bildirimler) gibi durumlar için, bunun için genel amaçlı web teknolojilerini kullanmanın iyi bir yolu yoktur.
Katana314

Yanıtlar:


11

HTML5 uygulamaları için poster çocuğu, LinkedIn 2013'ün başlarında yerli oldu . VentureBeat'teki röportajda nedenini açıklıyorlar.

Bence bu sorunuzla en ilgili kısım:

Prasad, performans sorunlarının çökmelere neden olmadığını veya uygulamanın yavaş çalışmasını sağlamadığını söyledi. Yaptığı şey, mobil web için HTML5'in hala parlak bir geleceğe sahip olduğunu gösteriyor - ancak yalnızca geliştiriciler bunu desteklemek için araçlar oluşturmak istiyorsa.

...

Eleştirel olarak eksik olan birkaç şey var. Bir tanesi takım desteğidir - gerçekten çalışan bir hata ayıklayıcıya sahip olmak, belleğin nerede bittiğini gösteren performans araçlarıdır. Android ve iOS'a bakarsanız, üretimde işler ters gittiğinde çok ayrıntılı bilgi vermek için araçlar oluşturmaya odaklanan iki çok büyük şirket var. Mobil web tarafında, bu masaüstü araçlarının mobil cihazlar için çalışmasını sağlamak gerçekten zordur. Mücadele ettiğimiz ikinci büyük parça, çalışabilirlik, çalışma zamanı tanılama bilgileri. Şimdi bile HTML5 oluşturduğumuzda, bunu istemci tarafı bir uygulama olarak oluşturuyoruz. Daha çok bir istemci-sunucu mimarisi. … Büyük bir kullanıcı kitlesine dağıtıldığımızda bize bilgi veren işlenebilirlik, bunu destekleyecek çok fazla araç da yok.

[Prasad ayrıca sorunları hızlı bir şekilde çözmek için dev ve op araçlarının “yok” dedi.

Çünkü bu iki şey yok, insanlar yerli yerine geri dönüyorlar. HTML5 hazır değil; ekosistem bunu desteklemiyor. … Araçlar var, ama başlangıçta. İnsanlar sadece temelleri anlıyorlar.


Anlamıyorum. Çok büyük şirketlerimiz var: Google, Microsoft, Apple, Chrome, Safari ve IE'yi desteklemeye odaklandı. Mozilla’yı Firefox’a adadık. Chrome Dev Tools, Web Inspector, Firebug'umuz var. Prasad hiçbir araç olmadığını mı söylüyor?
niutech

@niutech: HTML5 uygulaması için Valgrind gibi bir araç istediğinizi varsayalım. Fazla bir şey yok.
vartec

5

Bir Javascript standart kütüphanesinin olmaması korkunç bir inhibitördür. Birkaç isim jQuery, Dojo, YUI gibi harika çerçeveler var, ancak hepsi sadece sunum katmanına ve XHR'ye odaklanıyor.

Yapılandırılabilir günlük kaydı, şifreleme araçları, grafik algoritmaları, UUID jeneratörleri, Haritalar, Kümeler, Ağaçlar, şablonlar, bağımlılık yönetimi, tarih manipülasyonu, yerelleştirme / uluslararasılaştırma, matris işlemleri, bağımlılık enjeksiyonu, birim testleri, harita azaltma, XML işleme istiyor musunuz? JVM veya .NET dilleri için önemsiz - Javascript'te genellikle kendi uygulamanızı döndürmeniz gerekir.


Buna rapor ekleyin.
Alan B

ECMAScript 6, bu özelliklerin çoğunu ekler. Google Closure Library başka bir çözümdür.
niutech

Açısal şimdi güzel bir bildirim yolu sunuyor.
Amogh Talpallikar

2

Javascript'in yavaş olmasının bir nedeni, toplam tip güvenliği olmamasıdır. Herhangi bir değişken herhangi bir zamanda herhangi bir türde olabilir. Ayrıca, çoğu işlem birçok farklı türde geçerlidir , ancak farklı semantiğe sahiptir . Basit bir terim

a += b;

tercüman olduğu önemsiz değil, çünkü ave bsayılar veya dizeleri olabilir. Her ikisi de sayı olduğunda, bu aritmetik bir ektir. Her ikisi de dize olduğunda, bu bir dize birleşimidir. Biri bir dize ve diğeri bir sayı olduğunda, dize birleştirme gerçekleştirilmeden önce sayı biçimlendirilmelidir. Bunlar, argümanları farklı şekilde yorumlamayı gerektiren tamamen farklı işlemlerdir.

Türüne bağlı olarak ave b, tipi aartık ne olursa olsun eskisi yazdıklarınıza arasında, çift ya da dize tamsayı olabilir.

JS'deki değişkenler türlerini herhangi bir zamanda değiştirebildiğinden, yanlış işlem yapmamak için bu komut çağrıldığında yorumlayıcı türleri değerlendirmek için neredeyse hiç uğraşmaz. Bu, ek CPU döngüleri gerektirir.

Optimizasyonu çok daha zorlaştıran diğer özellikler, seyrek diziler veya her zaman ateşlenebilen çöp toplama ve olay işleyicileridir.

Asm.js'ye bir göz atın - Bu, bazı JS özelliklerinden, özellikle dinamik yazmadan kurtularak çok daha iyi optimizasyon sağlayan bir Javascript alt kümesidir.


1
Modern Javascript JIT derleyicileri, gerçek çalışma zamanı kullanımınızda kararlıysa kullandığınız türler için özel makine kodu oluşturur. Gerçekten atamsayı, dize veya çift vb bir şekilde kodlama yapıyorsanız, o zaman haklısınız. Ve hala yorumlayıcı kullanan eski tarayıcılarda da bu optimizasyonlar yok.
Esailija

1
@Esailija Modern JavaScript ortamları eskilerinden çok daha hızlıdır. Ancak, .NET, JVM, ErlangVM vb.Gibi statik olarak yazılan modern ortamlarla karşılaştırıldığında hala daha yavaşlar
David Sergey

@nirth evet demiyorum, sadece bu yazının bir tercüman / optimizasyon yapmayan jit derleyicisinin nasıl yapacağını açıkladığını söyleyerek ve bu oldukça yavaş.
Esailija
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.