HTML küçültme mi? [kapalı]


99

Bir sayfanın HTML kaynağını girebileceğimiz ve kodu küçültecek çevrimiçi bir araç var mı ?

Bunu aspx dosyaları için yapardım, çünkü web sunucusunu onları gzip yapmak iyi bir fikir değildir ...


19
Gzip sunucusuna sahip olmak ne zaman kötü bir fikirdir?
Chuck

5
Aspx sayfaları statik dosyalar olmadığı için IIS tarafından önbelleğe alınmayacağını ve bu nedenle her istekte sayfayı gzip olarak sıkıştıracağını okudum ...
Paulo

23
... ve bu bir sorun mu? Sunucunuz zaten% 99,9 CPU'da değilse, muhtemelen hayır. gzip yapmak olağan bir şeydir ve herhangi bir 'küçültmeden' çok daha etkilidir.
bobince


2
Buradaki cevaplar modası geçmiş, bazılarının yanlış olduğunu belirtmiyorum bile. Lütfen sorun ve uygun araç hakkındaki açıklamamı kontrol edin .
Salvador Dali

Yanıtlar:


63

Belki HTML Compressor'ı deneyebilirsiniz , işte neler yapabileceğini gösteren bir öncesi ve sonrası tablosu (Stack Overflow'un kendisi için de dahil):

Maalesef markdown'da tablo kavramı yok

Sayfalarınızı optimize etmek için, güvenli olacağı yerlere komut dosyası küçültme (ompressor, Google Closure Compiler, kendi sıkıştırıcınız) dahil olmak üzere birçok seçenek sunar. Varsayılan seçenek kümesi oldukça muhafazakar, bu nedenle bununla başlayabilir ve daha agresif seçenekleri etkinleştirmeyi deneyebilirsiniz.

Proje son derece iyi belgelenmiş ve desteklenmiştir.


58

Bunu yapma . Daha doğrusu, ısrar ediyorsanız, daha önemli site optimizasyonları tamamlandıktan sonra yapın. Bu çabanın maliyetinin / faydasının ihmal edilebilir olma ihtimali çok yüksektir, özellikle de her sayfayla başa çıkmak için çevrimiçi araçları manuel olarak kullanmayı planlıyorsanız.

Sayfalarınızı optimize etmek için gerçekten ne yapmanız gerektiğini belirlemek için YSlow veya Page Speed kullanın . Tahminimce, HTML baytlarının azaltılması sitenizin en büyük sorunu olmayacak. Sıkıştırma, önbellek yönetimi, görüntü optimizasyonu vb. Sitenizin genel performansında daha büyük bir fark yaratması çok daha olasıdır. Bu araçlar size en büyük sorunların ne olduğunu gösterecektir - bunların hepsini çözdüyseniz ve yine de HTML küçültmenin önemli bir fark yarattığını fark ederseniz, bunun için gidin.

(Bunu yapmak istediğinizden eminseniz ve Apache httpd kullanıyorsanız, beyaz boşluğu azaltmak için mod_pagespeed kullanmayı ve bazı seçenekleri açmayı düşünebilirsiniz , ancak risklerin farkında olun .)


25
Küçültülmüş kodun otomatik güzelleştirme kullanılarak okunması kolaysa optimizasyonun nesi yanlış?

12
Muhtemelen en büyük sorun bu değil - ancak dev'den qa'ya veya prod'a derlerken küçük bir normal ifade kümesi aracılığıyla işaretlemeyi çalıştırmak önemsiz bir süreçse, neden daha küçük biçimlendirme belgeleri göndermek istemezsiniz?
Will Peavy

26
Aslında asıl soruya bir cevap değil :(
Chuck Le Butt

7
@Will, HTML'yi normal ifadeleri küçültmek yoluyla çalıştırmak neredeyse kesinlikle önemsiz bir işlem değildir ve uygun bir ayrıştırıcı kullanmak bile muhtemelen önemsiz veya hızlı değildir. Dahası, JS / CSS küçültme işleminden farklı olarak, HTML küçültme kayıpsız olmayacaktır: herhangi bir etiketin stili olabilir white-space: preve küçültme önceden biçimlendirilmiş metni yok edebilir.
göz kapaksızlık

3
@eyelidlessness - Şu anda, sunulmadan önce normal ifadeler tarafından küçültülmüş binlerce sayfam var. Bu işlev, sistemin karmaşık veya pahalı bir parçası değildir. ... Öte yandan, biçimlendirilen öğelerin küçültülmesini önlemek için hesaplanmış stili ayrıştırmak istiyorsanız white-space:pre, evet, HTML'yi küçültmek daha karmaşık olacaktır. Ancak, birisinin neden beyaz boşluk kullanmak isteyeceği konusunda net değilim: a preveya codeelement kullanmak yerine ön .
Will Peavy

34

İşte sorunuza kısa bir cevap: HTML, CSS, JS'nizi küçültmelisiniz . Grunt denen kullanımı kolay bir araç var . Birçok görevi otomatikleştirmenize izin verir. Bunların arasında JS , CSS , HTML küçültme, dosya birleştirme ve diğerleri .

Burada yazılan cevaplar son derece güncelliğini yitirmiş ve hatta bazen bir anlam ifade etmiyor. Eski 2009'dan çok şey değişti, bu yüzden bunu doğru bir şekilde yanıtlamaya çalışacağım.

Kısa cevap - HTML'yi kesinlikle küçültmelisiniz . Bugün önemsiz ve yaklaşık % 5 hızlanma sağlıyor . Daha uzun cevap için cevabın tamamını okuyun

Eskiden insanlar css / js'yi manuel olarak küçültüyorlardı (küçültmek için belirli bir araçla çalıştırarak). Süreci otomatikleştirmek biraz zordu ve kesinlikle bazı beceriler gerektiriyordu. Şu anda bile birçok üst düzey sitenin gzip kullanmadığını bildiğimizden (ki bu önemsiz bir durumdur), insanların html'yi küçültme konusunda isteksiz olmaları anlaşılabilir bir durumdur.

Peki neden insanlar js'yi küçültürken html'yi küçültmüyordu ? JS'yi küçülttüğünüzde, aşağıdakileri yaparsınız:

  • yorumları kaldır
  • boşlukları kaldırın (sekmeler, boşluklar, yeni satırlar)
  • uzun isimleri kısaca değiştirin ( var isUserLoggedInolarak var a)

Eski günlerde bile çok gelişme sağladı. Ama html'de kısaca uzun isimleri değiştiremiyordunuz, ayrıca o süre zarfında yorum yapacak neredeyse hiçbir şey yoktu. Yani geriye kalan tek şey boşlukları ve satır başlarını kaldırmak oldu. Bu sadece az miktarda iyileştirme sağlar.

Burada yazılan yanlış bir argüman, içerik gzip ile sunulduğu için küçültmenin bir anlam ifade etmediğidir. Bu tamamen yanlış. Evet, gzip'in küçültmenin gelişimini azaltması mantıklıdır, ancak yorumları, boşlukları düzgün bir şekilde kırpıp yalnızca önemli kısımlarını gzip edebiliyorsanız neden gzip'lemelisiniz? Asla kullanmayacağınız bazı saçmalıklar içeren arşivlenecek bir klasörünüz var ve temizleyip sıkıştırmak yerine sadece sıkıştırmaya karar vermenizle aynıdır.

Küçültme yapmanın neden anlamsız olduğu bir başka argüman da sıkıcı olmasıdır. Belki bu 2009'da doğruydu, ancak bundan sonra yeni araçlar ortaya çıktı. Şu anda işaretlemenizi manuel olarak küçültmenize gerek yok. Gibi şeyler ile Grunt bunun yüklemek için Önemsiz hırıltı-contrib-htmlmin (güvenir HTMLMinifier @kangax tarafından) ve html küçültmek için yapılandırmak için. Homurtu öğrenmek ve her şeyi yapılandırmak için ihtiyacınız olan tek şey 2 saat gibi ve ardından her şey bir saniyeden daha kısa sürede otomatik olarak yapılır. 1 saniyenin ( grunt-katkıda-izle ile hiçbir şey yapmamak için bile otomatikleştirebileceğiniz ), yaklaşık% 5 iyileştirme için (gzip ile bile) o kadar da kötü olmadığını söylüyor.

Bir başka argüman da CSS ve JS'nin statik olması ve HTML'nin sunucu tarafından oluşturulduğudur, bu yüzden onu önceden küçültemezsiniz. Bu, 2009 yılında da doğrudur, ama şu anda daha fazla ve daha siteleri sunucu incedir ve istemci Rota, templating ve diğer mantığı yapıyor tek sayfa uygulama gibi bakıyoruz. Yani sunucu size sadece JSON veriyor ve istemci onu oluşturuyor. Burada sayfa için çok sayıda html ve farklı şablonlarınız var.

Yani düşüncelerimi bitirmek için:

  • google html'yi küçültüyor.
  • pageSpeed , html'yi küçültmenizi istiyor
  • yapmak önemsiz
  • ~% 5 iyileşme sağlar
  • gzip ile aynı değil

3
HTML'yi küçültmek kesinlikle önemsiz değildir , çünkü HTML'de boşluklar önemlidir ve herhangi bir beyaz alanın kaldırılıp kaldırılamayacağı CSS'ye bağlıdır. Ayrıca, zayıf istemciler korkunçtur ve bence dinamik HTML'yi küçültmenin sorunlarına karşı iyi bir argüman olarak gösterilemez. (Bunu yapmanın iyi bir yolu, ilk etapta oluşturulan çıktıda gereksiz boşluk içermeyen bir şablon motoru [Haml, Jade, vb.]
Seçmektir

@minitech HTML'yi küçültmek önemsizdir, ayrıca beyaz boşluklarla ilgili birkaç olası sorun vardır (gibi <span>). Her şeyden önce her zaman geçerli html yazmanın bir yolunu bulabilir ve onu boşluktan bağımsız hale getirebilirsiniz. Ayrıca bunu duymak sizi şaşırtabilir, ancak JS / CSS minifier bir hataya da neden olabilir - bu, onu kullanmamanız gerektiği anlamına gelmez. Bu nedenle, probleminizi çözmenin iki yolu: boşluk agnostik biçimlendirme yazmayı öğrenin, ürününüzü küçültmeden önce / sonra test edin (CSS / HTML / JS). Ayrıca Minifier'da hangi beyaz boşlukları korumak istediğinizi belirleyebilirsiniz.
Salvador Dali

Çılgın olmayan kodlardaki doğru JavaScript küçülticileri (yani, kendi kendini okumayan veya zamanlama ile hile yapmayan kod) bir hataya neden olamaz. Ve hayır, boşluktan bağımsız HTML yazmanın her zaman bir yolu yoktur, özellikle de HTML, yine, boşluktan bağımsız olmadığı için. Hiç. Kenar boşluklarının keseceğini düşünüyorsanız, kopyalayıp yapıştırmayı test ettiğinizden emin olun. Hangi boşlukları korumak istediğimi
belirterek

@minitech bana beyaz boşluktan bağımsız bir şekilde yazmanın imkansız olduğu CSS'yi gösterebilir misiniz? Uzun zamandır html'yi küçültüyorum ve şu ana kadar herhangi bir sorun görmedim.
Salvador Dali

* { white-space: pre; }bariz bir durumdur, ancak tüm beyaz boşlukları kaldırırsanız ve yalnızca daraltmazsanız (bunun yerine kenar boşluklarıyla değiştirirseniz), metin yanlış bir şekilde kopyalayabilir ve metin tarayıcıları ve ekran okuyucularda hasara yol açabilir.
Ry-

23

HTML'yi küçültmek için bir web aracı yazdım. http://prettydiff.com/?m=minify&html

Bu araç şu kuralları kullanarak çalışır:

  • Tüm HTML yorumları kaldırılır
  • Beyaz boşluk karakterleri tek boşluk karakterlerine dönüştürülür
  • Etiketlerin içindeki gereksiz beyaz boşluk karakterleri kaldırılır
  • Bu iki etiketten birinin tekli olmadığı iki etiket arasındaki beyaz boşluk karakterleri kaldırılır
  • Bir styleetiket içindeki tüm içeriğin CSS olduğu varsayılır ve bu şekilde küçültülür
  • scriptFarklı bir medya türü sağlanmadıkça ve daha sonra bu şekilde küçültülmedikçe, bir etiket içindeki tüm içeriğin JavaScript olduğu varsayılır
    • CSS ve JavaScript küçültme, oldukça çatallanmış bir JSMin formu kullanır. Bu çatal, CSS'yi yerel olarak desteklemek ve ayrıca SCSS sözdizimini desteklemek için genişletilmiştir. Otomatik noktalı virgül ekleme, JavaScript küçültme için desteklenir, ancak otomatik kaşlı ayraç ekleme henüz desteklenmemektedir.

    7
    Merhaba, bu satırı kaldır! <!--[if IE 8.0]><link rel="stylesheet" href="css/ie8.css" type="text/css" /><![endif]-->
    UnLoCo

    1
    evet ko kullanıyorsanız bu bir felaket olur!
    Ray Suelzer

    8

    Bu benim için çalıştı:

    http://minify.googlecode.com/git/min/lib/Minify/HTML.php

    Halihazırda mevcut bir çevrimiçi araç değildir, ancak basit bir PHP olmak, yeterince kolaydır, sadece kendiniz çalıştırabilirsiniz.

    Yine de sıkıştırılmış dosyaları kaydetmezdim, bunu gerçekten yapmanız gerekiyorsa dinamik olarak yapın ve Gzip sunucu sıkıştırmasını etkinleştirmek her zaman daha iyi bir fikirdir. Bunun IIS / .Net'e ne kadar dahil olduğunu bilmiyorum, ancak PHP'de global include dosyasına bir satır eklemek kadar önemsiz


    6

    CodeProject, aşağıdaki durumlardan bazılarını ele almak için yayınlanmış bir örnek projeye ( http://www.codeproject.com/KB/aspnet/AspNetOptimizer.aspx?fid=1528916&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2794900 ) sahiptir. .

    • ScriptResource.axd çağrılarını tek bir çağrıda birleştirmek
    • Gzip / deflate dahil olmak üzere tarayıcı yeteneğine göre tüm istemci tarafı komut dosyalarını sıkıştırın
    • Yorumları, girintileri ve satır sonlarını kaldırmak için bir ScriptMinifier.
    • Gzip / deflate dahil olmak üzere tarayıcı yeteneğine bağlı olarak tüm html biçimlendirmesini sıkıştırmak için bir HTML sıkıştırıcı.
    • Ve - en önemlisi - tam html'yi tek satıra yazmak ve olası düzeyde (yapım aşamasında) küçültmek için bir HTML Minifier.


    1

    http://code.mini-tips.com/html-minifier.html'yi deneyin , bu Html Minifier için .NET Kitaplığı'dır

    HtmlCompressor, içerik yapısını bozmadan fazladan boşlukları, yorumları ve diğer gereksiz karakterleri kaldırarak HTML veya XML kaynağı verilen küçük, hızlı ve kullanımı çok kolay bir .NET kitaplığıdır. Sonuç olarak, sayfaların boyutu küçülür ve daha hızlı yüklenir. Sıkıştırıcının komut satırı versiyonu da mevcuttur.

    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.