美文网首页
如何精简代码-以svg为例

如何精简代码-以svg为例

作者: TROPICALlll | 来源:发表于2018-07-11 18:17 被阅读0次

    这段时间在学习HTML、CSS和Markdown语法中,最头疼的莫过于看到一大堆接连不断的代码。带着“要是能够再少一点就好了”的想法,通过课本学习和网页浏览收获了精简代码的一些简单做法。

    以SVG为例

    • 以在Inkscape中绘制导出的一个普通矩形为例。
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!-- Created with Inkscape (http://www.inkscape.org/) -->
    
    <svg
       xmlns:dc="http://purl.org/dc/elements/1.1/"
       xmlns:cc="http://creativecommons.org/ns#"
       xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
       xmlns:svg="http://www.w3.org/2000/svg"
       xmlns="http://www.w3.org/2000/svg"
       xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
       xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
       width="120mm"
       height="90mm"
       viewBox="0 0 120 90"
       version="1.1"
       id="svg8"
       inkscape:version="0.92.3 (2405546, 2018-03-11)"
       sodipodi:docname="fourrect.svg">
      <defs
         id="defs2" />
      <sodipodi:namedview
         id="base"
         pagecolor="#ffffff"
         bordercolor="#666666"
         borderopacity="1.0"
         inkscape:pageopacity="0.0"
         inkscape:pageshadow="2"
         inkscape:zoom="1.4"
         inkscape:cx="226.09147"
         inkscape:cy="171.96145"
         inkscape:document-units="mm"
         inkscape:current-layer="layer1"
         showgrid="false"
         inkscape:window-width="1920"
         inkscape:window-height="991"
         inkscape:window-x="-11"
         inkscape:window-y="-11"
         inkscape:window-maximized="1" />
      <metadata
         id="metadata5">
        <rdf:RDF>
          <cc:Work
             rdf:about="">
            <dc:format>image/svg+xml</dc:format>
            <dc:type
               rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
            <dc:title></dc:title>
          </cc:Work>
        </rdf:RDF>
      </metadata>
      <g
         inkscape:label="Layer 1"
         inkscape:groupmode="layer"
         id="layer1"
         transform="translate(0,-207)">
        <g
           transform="matrix(0.71523179,0,0,0.74285713,-26.506178,24.079562)"
           id="layer1-4"
           inkscape:label="Layer 1">
          <g
             inkscape:label="Layer 1"
             id="layer1-7"
             transform="translate(29.291804,15.615445)">
            <rect
               style="opacity:1;fill:#3000b4;fill-opacity:1;stroke-width:0.26458332"
               id="rect1935"
               width="28.159225"
               height="26.458332"
               x="22.300594"
               y="242.38243" />
          </g>
        </g>
    </svg>
    
    1. SVG使用版本以及文件是否“独立”
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!-- Created with Inkscape (http://www.inkscape.org/) -->
    

    第一行代码
    version="1.0"指使用的SVG版本
    standalone="no"规定这个 SVG 文件是否是“独立的”,还是有引用外部文件。standalone="no" 意味着 SVG 文件不是独立的,会引用外部文件。
    经过删除和检查发现,删除第一行代码并不影响网页显示。而第二行作为注释标记文字,只是方便后端人员写代码时查看,对前端网页的展示并没有任何显示和帮助。均删除。

    1. 命名空间
      xmlns="http://www.w3.org/2000/svg"大概长这样的以“xmlns”开头的代码。
    • 命名空间主要只是用于生成SVG的程序中,但到Web网页时他们并不需要被表现出来,因而为了节省代码空间可以进行删除。
    1. Inkscape画布代码(这一步限于Inkscape)
      sodipodi:namedview这个大标题下的代码,主要是Inkscape中图形下的画布代码,其颜色、视口大小、高宽和坐标系等。如果使用导出的SVG图形时并不需要改变画布大小,那么这一整层代码也可以爽快的删除!

    删除结果

    让我们来看看经过删除我们最终的代码剩下多少!

    <svg
       width="120mm"
       height="90mm"
       viewBox="0 0 120 90"
       version="1.1"
       id="svg8"
       inkscape:version="0.92.3 (2405546, 2018-03-11)"
       sodipodi:docname="fourrect.svg">
      <defs
         id="defs2" />
      <metadata
         id="metadata5">
        <rdf:RDF>
          <cc:Work
             rdf:about="">
            <dc:format>image/svg+xml</dc:format>
            <dc:type
               rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
            <dc:title></dc:title>
          </cc:Work>
        </rdf:RDF>
      </metadata>
      <g
         inkscape:label="Layer 1"
         inkscape:groupmode="layer"
         id="layer1"
         transform="translate(0,-207)">
        <g
           transform="matrix(0.71523179,0,0,0.74285713,-26.506178,24.079562)"
           id="layer1-4"
           inkscape:label="Layer 1">
          <g
             inkscape:label="Layer 1"
             id="layer1-7"
             transform="translate(29.291804,15.615445)">
            <rect
               style="opacity:1;fill:#3000b4;fill-opacity:1;stroke-width:0.26458332"
               id="rect1935"
               width="28.159225"
               height="26.458332"
               x="22.300594"
               y="242.38243" />
          </g>
        </g>
    </svg>
    

    好吧,虽然还是挺长,但确实肉眼可见的减少了蛮多的对吧!
    其实除了上述提到的可删除代码,还有未被展示但也可删除的。比如title和desc标签,均是用于后端代码文档的可读性,方便写代码时查看和分类,因此到最后快要完成时这些都可以被删除。

    几个精简做法

    1. 多使用外联文件
      在HTML文件中需要的地方链接外联文件,突出重点又精简明朗。
    2. 多使用CSS来规定所需样式。
      假如直接在HTML中编辑样式,那会导致开头一堆样式代码,页面在加载处正文内容前需要先走一遍样式代码。实在拖沓!
    3. 少使用注释。
      在完全完成代码编辑后把他们删掉。
    4. 少使用加粗斜体等字体样式
      一篇文章中多次出现字体加粗或斜体的样式只会造成页面加载负担。只在确实需要的重点字眼处添加。这样做也会更突出文章核心主题。
    • 最后附上我的SVG学习笔记整理。
      SVG学习笔记
      只有理解了每行代码代表什么意义,精简代码才会更加得心应手。删除起来也会更加胸有成竹!

    相关文章

      网友评论

          本文标题:如何精简代码-以svg为例

          本文链接:https://www.haomeiwen.com/subject/aczhpftx.html