การย่อขนาด HTML? [ปิด]


99

มีเครื่องมือออนไลน์ที่เราสามารถใส่ซอร์สHTMLของเพจลงในและจะย่อโค้ดหรือไม่?

ฉันจะทำเช่นนั้นสำหรับไฟล์ aspx เนื่องจากไม่ใช่ความคิดที่ดีที่จะทำให้เว็บเซิร์ฟเวอร์ gzip พวกเขา ...


19
เมื่อใดที่ควรมีเซิร์ฟเวอร์ gzip
Chuck

5
ฉันอ่านว่าเนื่องจากหน้า aspx ไม่ใช่ไฟล์คงที่ IIS จะไม่ถูกแคชดังนั้นมันจะ gzip หน้าทุกคำขอ ...
Paulo

23
... และนั่นเป็นปัญหาหรือไม่? ถ้าเซิร์ฟเวอร์ของคุณมี CPU 99.9% อยู่แล้วก็อาจจะไม่ได้ gzipping เป็นเรื่องปกติที่ต้องทำและมีประสิทธิภาพมากกว่า 'minification' ใด ๆ
bobince

2
สิ่งนี้น่าสนใจทีเดียว: perfectionkills.com/experimenting-with-html-minifier kangax.github.com/html-minifier
StefanS

2
คำตอบที่นี่ล้าสมัยไม่ต้องพูดถึงว่าบางคำผิด กรุณาตรวจสอบของฉันคำอธิบายเกี่ยวกับปัญหาและเครื่องมือที่เหมาะสม
Salvador Dali

คำตอบ:


63

อาจลองใช้ HTML Compressor ต่อไปนี้เป็นตารางก่อนและหลังที่แสดงสิ่งที่สามารถทำได้ (รวมถึง Stack Overflow เอง):

ขออภัย markdown ไม่มีแนวคิดเกี่ยวกับตาราง

มีตัวเลือกมากมายสำหรับการเพิ่มประสิทธิภาพหน้าเว็บของคุณและรวมถึงการย่อขนาดสคริปต์ (ompressor, Google Closure Compiler, Compressor ของคุณเอง) ซึ่งจะปลอดภัย ชุดตัวเลือกเริ่มต้นค่อนข้างอนุรักษ์นิยมดังนั้นคุณสามารถเริ่มต้นด้วยสิ่งนั้นและทดลองด้วยการเปิดใช้งานตัวเลือกเชิงรุกมากขึ้น

โครงการนี้ได้รับการบันทึกและสนับสนุนเป็นอย่างดี


58

อย่าทำอย่างนี้ หรือหากคุณยืนยันให้ทำหลังจากการเพิ่มประสิทธิภาพไซต์ที่สำคัญเสร็จสมบูรณ์แล้ว มีโอกาสสูงมากที่ต้นทุน / ผลประโยชน์สำหรับความพยายามนี้จะน้อยมากโดยเฉพาะอย่างยิ่งหากคุณวางแผนที่จะใช้เครื่องมือออนไลน์ด้วยตนเองเพื่อจัดการกับแต่ละหน้า

ใช้YSlowหรือความเร็วหน้าเพื่อตรวจสอบสิ่งที่คุณจริงๆต้องทำเพื่อเพิ่มประสิทธิภาพของหน้าเว็บของคุณ ฉันเดาว่าการลดไบต์ของ HTML จะไม่ใช่ปัญหาใหญ่ที่สุดสำหรับไซต์ของคุณ มีแนวโน้มมากขึ้นที่การบีบอัดการจัดการแคชการเพิ่มประสิทธิภาพรูปภาพและอื่น ๆ จะสร้างความแตกต่างที่มากขึ้นให้กับประสิทธิภาพของไซต์ของคุณโดยรวม เครื่องมือเหล่านี้จะแสดงให้คุณเห็นว่าปัญหาใหญ่ที่สุดคืออะไร - หากคุณจัดการกับปัญหาทั้งหมดแล้วและยังพบว่าการย่อขนาด HTML สร้างความแตกต่างอย่างมีนัยสำคัญให้ทำ

(หากคุณแน่ใจว่าต้องการไปและใช้ Apache httpd คุณอาจลองใช้mod_pagespeedและเปิดตัวเลือกบางอย่างเพื่อลดช่องว่าง ฯลฯ แต่ระวังความเสี่ยง )


25
เกิดอะไรขึ้นกับการเพิ่มประสิทธิภาพหากโค้ดย่อขนาดอ่านง่ายโดยใช้การตกแต่งอัตโนมัติ

12
อาจไม่ใช่ปัญหาใหญ่ที่สุด แต่ถ้าเป็นกระบวนการที่ไม่สำคัญในการเรียกใช้มาร์กอัปผ่านชุด regex ที่ลดขนาดเมื่อรวบรวมจาก dev เป็น qa หรือ prod แล้วทำไมคุณไม่ต้องการส่งเอกสารมาร์กอัปที่มีขนาดเล็กลง?
Will Peavy

26
ไม่ใช่คำตอบสำหรับคำถามเดิม :(
Chuck Le Butt

7
@ ถึงแม้จะเป็นกระบวนการที่ไม่สำคัญในการเรียกใช้ HTML ผ่านการย่อขนาด regexes และแม้กระทั่งการใช้ parser ที่เหมาะสมก็อาจไม่สำคัญหรือเร็ว ยิ่งไปกว่านั้นซึ่งแตกต่างจากการย่อขนาด JS / CSS การลดขนาด HTML จะไม่สูญเสียโดยไม่สูญเสียแท็กใด ๆ สามารถจัดรูปแบบเป็นwhite-space: preและการลดขนาดจะทำลายข้อความที่จัดรูปแบบไว้ล่วงหน้า
เปลือกตา

3
@eyelidlessness - ปัจจุบันฉันมีหลายพันหน้าที่ regexes ลดขนาดก่อนที่จะเสิร์ฟ ฟังก์ชันนี้ไม่ใช่ส่วนที่ซับซ้อนหรือมีราคาแพงของระบบ ... ในทางกลับกันหากคุณต้องการแยกวิเคราะห์สไตล์ที่คำนวณเพื่อหลีกเลี่ยงการย่อองค์ประกอบที่มีสไตล์ด้วยwhite-space:preใช่การย่อขนาด HTML จะซับซ้อนกว่า อย่างไรก็ตามฉันไม่ชัดเจนว่าทำไมบางคนถึงต้องการใช้ white-space: pre แทนที่จะใช้ a preหรือcodeelement
Will Peavy

34

นี่คือคำตอบสั้น ๆ สำหรับคำถามของคุณ: คุณควรลดขนาด HTML, CSS, JS ของคุณ มีเป็นเรื่องง่ายที่จะใช้เครื่องมือที่เรียกว่าเสียงฮึดฮัด ช่วยให้คุณทำงานหลายอย่างโดยอัตโนมัติ ในหมู่พวกเขาJS , CSS , HTML minification, ไฟล์เรียงต่อกันและอื่น ๆ อีกมากมาย

คำตอบที่เขียนนี้ล้าสมัยมากหรือบางครั้งก็ไม่สมเหตุสมผล หลายสิ่งหลายอย่างเปลี่ยนไปจากปี 2009 เก่าดังนั้นฉันจะพยายามตอบให้ถูกต้อง

คำตอบสั้น ๆ - คุณแน่นอนควรลดขนาด HTML มันเป็นเรื่องเล็ก ๆ น้อยในวันนี้และให้ประมาณspeedup 5% สำหรับคำตอบที่ยาวขึ้นโปรดอ่านคำตอบทั้งหมด

ย้อนกลับไปในสมัยก่อนผู้คนกำลังลดขนาด css / js ด้วยตนเอง (โดยเรียกใช้ผ่านเครื่องมือเฉพาะบางอย่างเพื่อย่อขนาด) เป็นเรื่องยากที่จะทำให้กระบวนการเป็นไปโดยอัตโนมัติและต้องใช้ทักษะบางอย่างอย่างแน่นอน เมื่อทราบว่าไซต์ระดับสูงจำนวนมากแม้ในขณะนี้ไม่ได้ใช้ gzip (ซึ่งเป็นเรื่องเล็กน้อย) เป็นที่เข้าใจได้ว่าผู้คนไม่เต็มใจที่จะลดขนาด html

เหตุใดผู้คนจึงลดขนาด js แต่ไม่ใช่ html ? เมื่อคุณย่อขนาด JS ให้ทำสิ่งต่อไปนี้:

  • ลบความคิดเห็น
  • ลบช่องว่าง (แท็บช่องว่างบรรทัดใหม่)
  • เปลี่ยนชื่อยาวเป็นสั้น ( var isUserLoggedInถึงvar a)

ซึ่งทำให้ดีขึ้นมากแม้ในวันเก่า แต่ใน html คุณไม่สามารถเปลี่ยนชื่อยาว ๆ สั้น ๆ ได้และแทบไม่มีอะไรจะแสดงความคิดเห็นในช่วงเวลานั้น สิ่งเดียวที่เหลืออยู่คือการลบช่องว่างและขึ้นบรรทัดใหม่ ซึ่งให้การปรับปรุงเพียงเล็กน้อย.

ข้อโต้แย้งที่ไม่ถูกต้องอย่างหนึ่งที่เขียนที่นี่คือเนื่องจากเนื้อหาถูกแสดงด้วย gzip การลดขนาดจึงไม่สมเหตุสมผล นี่เป็นความผิดโดยสิ้นเชิง ใช่มันสมเหตุสมผลแล้วที่ gzip จะลดการปรับปรุงการลดขนาดลง แต่ทำไมคุณต้อง gzip ความคิดเห็นเว้นวรรคถ้าคุณสามารถตัดแต่งได้อย่างเหมาะสมและ gzip เฉพาะส่วนที่สำคัญ มันเหมือนกับว่าคุณมีโฟลเดอร์ที่จะเก็บถาวรซึ่งมีอึบางอย่างที่คุณจะไม่เคยใช้และคุณตัดสินใจที่จะซิปมันแทนที่จะทำความสะอาดและซิป

ข้อโต้แย้งอีกประการหนึ่งว่าทำไมการลดทอนความไร้จุดหมายก็คือมันน่าเบื่อ อาจจะเป็นจริงในปี 2009 แต่มีเครื่องมือใหม่ปรากฏขึ้นหลังจากเวลานี้ ตอนนี้คุณไม่จำเป็นต้องย่อขนาดมาร์กอัปด้วยตนเอง ด้วยสิ่งต่างๆเช่นGruntการติดตั้งgrunt-Contrib-htmlminนั้นเป็นเรื่องเล็กน้อย(อาศัยHTMLMinifierโดย @kangax) และกำหนดค่าเพื่อลดขนาด html ของคุณ สิ่งที่คุณต้องมีคือ 2 ชั่วโมงในการเรียนรู้คำสั่งและกำหนดค่าทุกอย่างจากนั้นทุกอย่างจะเสร็จสิ้นโดยอัตโนมัติในเวลาไม่ถึงวินาที ฟังดูว่า 1 วินาที (ซึ่งคุณสามารถทำได้โดยอัตโนมัติโดยไม่ต้องทำอะไรกับนาฬิกาที่มีส่วนร่วม ) นั้นไม่เลวเลยสำหรับการปรับปรุงประมาณ 5% (แม้จะใช้ gzip)

อีกหนึ่งอาร์กิวเมนต์คือ CSS และ JS เป็นแบบคงที่และ HTML ถูกสร้างขึ้นโดยเซิร์ฟเวอร์ดังนั้นคุณจึงไม่สามารถย่อขนาดล่วงหน้าได้ นี่ก็เป็นความจริงในปี 2009 แต่ในปัจจุบันมากขึ้นและมากขึ้นเว็บไซต์มีการมองเช่นแอปหน้าเดียวที่เซิร์ฟเวอร์คือบางและลูกค้าจะทำทุกเส้นทาง templating และตรรกะอื่น ๆ ดังนั้นเซิร์ฟเวอร์จึงให้JSONและไคลเอนต์เท่านั้นที่แสดงผล ที่นี่คุณมี html มากมายสำหรับเพจและเทมเพลตต่างๆ

เพื่อจบความคิดของฉัน:

  • Google กำลังลดขนาด html
  • pageSpeedขอให้คุณลดขนาด html
  • เป็นเรื่องเล็กน้อยที่จะทำ
  • ให้การปรับปรุง ~ 5%
  • มันไม่เหมือนกับ gzip

3
การลดขนาด HTML ไม่ใช่เรื่องเล็กน้อยอย่างแน่นอนเนื่องจากช่องว่างมีความสำคัญใน HTML และช่องว่างใด ๆ ที่สามารถลบได้นั้นขึ้นอยู่กับ CSS นอกจากนี้ไคลเอนต์บาง ๆ ยังแย่มากและในความคิดของฉันไม่สามารถถูกมองว่าเป็นข้อโต้แย้งที่ดีกับปัญหาในการลดขนาด HTML แบบไดนามิก (วิธีที่ดีวิธีหนึ่งคือเลือกเครื่องมือแม่แบบ [Haml, Jade ฯลฯ ] ที่ไม่มีช่องว่างที่ไม่จำเป็นในผลลัพธ์ที่แสดงผลตั้งแต่แรก)
Ry-

@minitech การย่อขนาด HTML เป็นเรื่องเล็กน้อยนอกจากนี้ยังมีปัญหาเล็กน้อยกับช่องว่าง (เช่น<span>) ก่อนอื่นคุณสามารถหาวิธีเขียน html ที่ถูกต้องได้เสมอโดยทำให้ช่องว่างไม่เชื่อเรื่องพระเจ้า นอกจากนี้คุณอาจแปลกใจที่ได้ยิน แต่ตัวย่อ JS / CSS ยังสามารถแนะนำข้อบกพร่องได้ซึ่งไม่ได้หมายความว่าคุณไม่ควรใช้มัน ดังนั้นสองวิธีในการแก้ปัญหาของคุณ: เรียนรู้การเขียนมาร์กอัปที่ไม่เชื่อเรื่องพระเจ้าในช่องว่างทดสอบผลิตภัณฑ์ของคุณก่อน / หลังการลดขนาด (CSS / HTML / JS) นอกจากนี้ใน Minifier คุณสามารถระบุช่องว่างที่คุณต้องการรักษาได้
Salvador Dali

ตัวย่อ JavaScript ที่ถูกต้องบนโค้ดที่ไม่บ้า (เช่นรหัสที่ไม่อ่านเองหรือโกงตามเวลา) ไม่สามารถทำให้เกิดข้อบกพร่องได้ และไม่ไม่มีวิธีการเขียน HTML แบบไม่เข้าใจเรื่องพระเจ้าเสมอไปโดยเฉพาะอย่างยิ่งเนื่องจาก HTML เป็นอีกครั้งที่ไม่ใช่ช่องว่างที่ไม่เชื่อเรื่องพระเจ้า เลย. อย่าลืมทดสอบการคัดลอกและวางสิ่งนี้หากคุณคิดว่าระยะขอบจะลดลง ระบุช่องว่างที่ฉันต้องการรักษาเสียงเหมือนเสียเวลา (ยกเว้น Google) …
Ry-

@minitech คุณช่วยแสดง CSS ที่ไม่สามารถเขียนด้วยวิธีไม่เชื่อเรื่องพระเจ้าในพื้นที่สีขาวได้ไหม ฉันกำลังลดขนาด html เป็นเวลานานและยังไม่พบปัญหา
Salvador Dali

* { white-space: pre; }เป็นสิ่งที่เห็นได้ชัด แต่ถ้าคุณลบช่องว่างทั้งหมดและไม่เพียงแค่ยุบ (แทนที่ด้วยระยะขอบแทน) ข้อความอาจคัดลอกไม่ถูกต้องและสร้างความหายนะให้กับเบราว์เซอร์ข้อความและโปรแกรมอ่านหน้าจอ
Ry-

23

ฉันเขียนเครื่องมือเว็บเพื่อย่อขนาด HTML http://prettydiff.com/?m=minify&html

เครื่องมือนี้ทำงานโดยใช้กฎเหล่านี้:

  • ความคิดเห็น HTML ทั้งหมดจะถูกลบออก
  • อักขระเว้นวรรคจะถูกแปลงเป็นอักขระช่องว่างเดียว
  • อักขระช่องว่างที่ไม่จำเป็นภายในแท็กจะถูกลบออก
  • อักขระเว้นวรรคระหว่างแท็กสองแท็กโดยที่แท็กหนึ่งในสองแท็กนี้ไม่ใช่ซิงเกิลตันจะถูกลบออก
  • เนื้อหาทั้งหมดในstyleแท็กสันนิษฐานว่าเป็น CSS และถูกย่อให้เล็กที่สุด
  • เนื้อหาทั้งหมดในscriptแท็กถูกสันนิษฐานว่าเป็น JavaScript เว้นแต่จะระบุประเภทสื่อที่แตกต่างกันและจากนั้นจึงย่อขนาดดังกล่าว
    • การลดขนาด CSS และ JavaScript ใช้รูปแบบ JSMin ที่แยกออกจากกันอย่างหนัก ส้อมนี้ได้รับการขยายเพื่อรองรับ CSS แบบเนทีฟและยังรองรับไวยากรณ์ SCSS รองรับการแทรกอัฒภาคอัตโนมัติสำหรับการลดขนาดของ JavaScript แต่ยังไม่รองรับการแทรกวงเล็บปีกกาอัตโนมัติ

    7
    สวัสดีมันลบบรรทัดนี้! <!--[if IE 8.0]><link rel="stylesheet" href="css/ie8.css" type="text/css" /><![endif]-->
    UnLoCo

    1
    ใช่นี่จะเป็นหายนะถ้าคุณใช้ ko!
    Ray Suelzer

    8

    สิ่งนี้ใช้ได้ผลสำหรับฉัน:

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

    ไม่ใช่เครื่องมือออนไลน์ที่มีอยู่แล้ว แต่การเป็น PHP แบบธรรมดานั้นง่ายพอที่คุณจะเรียกใช้งานได้ด้วยตัวเอง

    ฉันจะไม่บันทึกไฟล์บีบอัด แต่ทำแบบไดนามิกถ้าคุณจำเป็นต้องทำจริงๆและควรเปิดใช้งานการบีบอัดเซิร์ฟเวอร์ Gzip เสมอ ฉันไม่รู้ว่าเกี่ยวข้องกับ IIS / .Net อย่างไร แต่ใน PHP มันเป็นเรื่องเล็กน้อยพอ ๆ กับการเพิ่มหนึ่งบรรทัดในไฟล์ global include


    6

    CodeProject มีโครงการตัวอย่างที่เผยแพร่ ( http://www.codeproject.com/KB/aspnet/AspNetOptimizer.aspx?fid=1528916&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2794900 ) เพื่อจัดการสถานการณ์ต่อไปนี้ .. .

    • การรวมการเรียก ScriptResource.axd ไว้ในการโทรครั้งเดียว
    • บีบอัดสคริปต์ฝั่งไคลเอ็นต์ทั้งหมดตามความสามารถของเบราว์เซอร์รวมถึง gzip / deflate
    • ScriptMinifier เพื่อลบความคิดเห็นการเยื้องและตัวแบ่งบรรทัด
    • คอมเพรสเซอร์ HTML เพื่อบีบอัดมาร์กอัป html ทั้งหมดตามความสามารถของเบราว์เซอร์รวมถึง gzip / deflate
    • และที่สำคัญที่สุดคือ HTML Minifier เพื่อเขียน html ที่สมบูรณ์เป็นบรรทัดเดียวและย่อขนาดในระดับที่เป็นไปได้ (อยู่ระหว่างการปรับปรุง)

    3

    สำหรับแพลตฟอร์ม Microsoft .NET มีไลบรารีที่เรียกว่าWebMarkupMinซึ่งสร้างการย่อขนาดโค้ด HTML

    นอกจากนี้ยังมีเป็นโมดูลสำหรับการรวมห้องสมุดนี้ใน ASP.NET MVC - WebMarkupMin.Mvc


    1

    ลองhttp://code.mini-tips.com/html-minifier.htmlนี่คือ. NET Libary สำหรับ Html Minifier

    HtmlCompressor เป็นไลบรารี. NET ขนาดเล็กที่รวดเร็วและใช้งานง่ายมากซึ่งจะลดขนาดแหล่งที่มาของ HTML หรือ XML โดยการลบช่องว่างเพิ่มเติมความคิดเห็นและอักขระอื่น ๆ ที่ไม่จำเป็นโดยไม่ทำลายโครงสร้างเนื้อหา ด้วยเหตุนี้หน้าจึงมีขนาดเล็กลงและโหลดได้เร็วขึ้น นอกจากนี้ยังมีเวอร์ชันบรรทัดคำสั่งของคอมเพรสเซอร์

    โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
    Licensed under cc by-sa 3.0 with attribution required.