recherche
Maisoninterface Webtutoriel HTMLdata uri_html/css_WEB-ITnose

Data URI 科普

笔者对本文的定位是实践操作型,所以一些理论基础只点到为止。首先 Data URI 是什么? 引用 Wikipedia 上对其的解释:

Data URI 是一种提供让外置资源的直接内嵌在页面中的方案。这种技术允许我们只需单次 HTTP 请求即可获取所有需要引用的图片与样式资源,并因无需多次请求资源而变的高效。

在 RFC2397(http://tools.ietf.org/html/rfc2397)中定义了它格式规范:

data:[<mime type>][;charset=<charset>][;base64],<encoded data>

Data URI 初探

看格式规范貌似不是很友好,我们以内嵌图片为例:

<img src="/static/imghwm/default1.png"  data-src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="  class="lazy" alt="Red dot">

data:image/png;base64, 是固定的格式, image/png 是图片的MIME类型,base64是数据编码方式。这里还有必要指出下Base64 编码后的数据会比原始数据大 4/3 左右,这与Base64 编码算法有关。 如需使用在电子邮件中,根据 RFC 822 规定,每 76 个字符,还需要加上一个回车换行,此时编码后数据长度大约为原长的135.1%。

为验证理论的我们做如下的测试,分别对不同尺寸的图片进行Base64编码,与我们的预期一致,比原始数据增长了 1/3 :

图片尺寸 | 原始大小 | Base64大小 | 增长率 |:-----------|:------------|:-------------|:-------------|16*16 | 618 | 824 | 34.2%24*24 | 1,063 | 1,420 | 33.6%32*32 | 1,615 | 2,156 | 33.5%42*42 | 2,510 | 3,348 | 33.4%48*48 | 2,892 | 3,856 | 33.3%96*96 | 8,217 | 10,956 | 33.3%350*350 | 49,899 | 66,532 | 33.3%

图片是使用 Data URI 最常用的情景,但 Data URI 是与资源类型无关的规范,您也可以使用 Data URI 内嵌其他资源:

var cvs = 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv);var html = 'data:text/html;charset=utf-8,' + encodeURIComponent(html);

Data URI 兼容性

在前端,浏览器兼容性几乎每个技术都逃不过的话题,检阅 Data URI 的兼容性:

  • Firefox 2+
  • Opera 7.2+
  • Chrome++
  • Safari++
  • Internet Explorer 8+
  • 大部分主流浏览器都早已支持 Data URI,IE8 虽支持但其最大长度不能超过32K的数据,在 IE9 下已解除此限制,IE 详细的文档可细读微软官方文档。 剩下的依旧是面对在国内还是 A 类浏览量的 IE 6/7, 我们可以采用与 Data URI 类似的 MHTML(笔者认为其设计上比 Data URI 是更优秀的,考虑到了内嵌数据的重用). MHTML 详细的介绍不在本文的讨论范围,但需要指出的是微软在 2011 年发布了 MHTML 中的漏洞可能允许信息泄露 的补丁, 将造成 MHTML 无法被引用的问题,所以在 IE 中使用 MHTML 的方案会有极大的风险,权且当扩展知识面不推荐采用。

  • http://technet.microsoft.com/zh-CN/security/advisory/2501696
  • http://www.microsoft.com/china/security/bulletins/ms03-014.mspx
  • Data URI 最佳实践

    在 Data URI 转换之前我们不进行图片合并,而是直接使用小图片,如此省去了合图定位的麻烦,

    background-image:url("data:image/png;base64,iVBORw0KGgoAAA...ElFTkSuQmCC");*background-image:url(http://cdn.example.com/foo.gif);

    比较数据:

    图片尺寸 | 原始大小 | Base64大小 | Gzip大小 |  Gzip压缩率 | 增长率 |:-----------|:------------|:-------------|:-------------|:-------------|:-------------|16*16 | 618 | 824 | 668 | 81.1% | 108.8%24*24 | 1,063 | 1,420 | 1,119 | 78.8% | 5.3%32*32 | 1,615 | 2,156 | 1,670 | 77.5% | 3.9%42*42 | 2,510 | 3,348 | 2,568 | 76.7% | 2.3%48*48 | 2,892 | 3,856 |  2940 | 76.2% | 1.7%96*96 | 8,217 | 10,956 | 8304 | 75.8% | 1.1%350*350 | 49,899 | 66,532 | 50,095 | 75.3% | 0.4%

    DIY 生成工具

    Node 是名副其实的前端开发得力助手,只用3行代码就能让一张图片转换成Base64编码:

    var body = fs.readFileSync('./foo.png', 'binary');  // 输入var image = new Buffer(body, 'binary').toString('base64'); // base64编码var base64 = 'data:image/png;base64,' + image;  // 输出

    Datauri 格式数据需要更多CPU计算来呈现图片,也许在性能稍弱的PC上,额外请求图片的方案可能更早的渲染出图片,尤其在移动端有限CPU的情景下,一定要慎用。

    这里折中方案是限定转换的条件,只有小于 2K 的小图才被转换成Base64编码, 2K 是比较推荐的阀值

    Déclaration
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Pourquoi les balises HTML sont-elles importantes pour le développement Web?Pourquoi les balises HTML sont-elles importantes pour le développement Web?May 02, 2025 am 12:03 AM

    HtmltagsaressentialforwebDevelopmentaSheystructureAnDenHanceWebpages.1) TheyDefiLlayout, Semantics et Interactivité.2) SemanctagSimproveaccessibilistibilitySeo.3) correct usUsoftagscanoptimizeperformanceAndensurecross-browercompatibilité.

    Expliquez l'importance d'utiliser un style de codage cohérent pour les balises et attributs HTML.Expliquez l'importance d'utiliser un style de codage cohérent pour les balises et attributs HTML.May 01, 2025 am 12:01 AM

    Un style de codage HTML cohérent est important car il améliore la lisibilité, la maintenabilité et l'efficacité du code. 1) Utilisez des étiquettes et des attributs en minuscules, 2) Gardez une indentation cohérente, 3) Sélectionnez et respectez les citations simples ou doubles, 4) Évitez de mélanger différents styles dans les projets, 5) Utilisez des outils d'automatisation tels que plus jolis ou Eslint pour assurer la cohérence en style.

    Comment implémenter un carrousel multi-projets dans Bootstrap 4?Comment implémenter un carrousel multi-projets dans Bootstrap 4?Apr 30, 2025 pm 03:24 PM

    La solution pour implémenter un carrousel multi-projets dans Bootstrap4 implémentation de carrousel multi-projets dans bootstrap4 n'est pas une tâche facile. Bien que bootstrap ...

    Comment le site officiel Deepseek réalise-t-il l'effet de l'événement de défilement de souris pénétrant?Comment le site officiel Deepseek réalise-t-il l'effet de l'événement de défilement de souris pénétrant?Apr 30, 2025 pm 03:21 PM

    Comment réaliser l'effet de la pénétration des événements de défilement de la souris? Lorsque nous naviguons sur le Web, nous rencontrons souvent des conceptions d'interaction spéciales. Par exemple, sur le site officiel Deepseek, � ...

    Comment modifier le style de contrôle de la lecture de la vidéo HTMLComment modifier le style de contrôle de la lecture de la vidéo HTMLApr 30, 2025 pm 03:18 PM

    Le style de contrôle de lecture par défaut de la vidéo HTML ne peut pas être modifié directement via CSS. 1. Créez des contrôles personnalisés à l'aide de JavaScript. 2. Embellir ces contrôles via CSS. 3. Considérons la compatibilité, l'expérience utilisateur et les performances, en utilisant des bibliothèques telles que Video.js ou Plyr peuvent simplifier le processus.

    Quels problèmes seront causés par l'utilisation de la sélection native sur votre téléphone?Quels problèmes seront causés par l'utilisation de la sélection native sur votre téléphone?Apr 30, 2025 pm 03:15 PM

    Problèmes potentiels avec l'utilisation de la sélection native sur les téléphones mobiles Lors du développement d'applications mobiles, nous rencontrons souvent la nécessité de sélectionner des boîtes. Normalement, les développeurs ...

    Quels sont les inconvénients de l'utilisation de Native Select sur votre téléphone?Quels sont les inconvénients de l'utilisation de Native Select sur votre téléphone?Apr 30, 2025 pm 03:12 PM

    Quels sont les inconvénients de l'utilisation de Native Select sur votre téléphone? Lors du développement d'applications sur des appareils mobiles, il est très important de choisir les bons composants d'interface utilisateur. De nombreux développeurs ...

    Comment optimiser la gestion des collisions de l'itinérance à la troisième personne dans une pièce en utilisant trois.js et Octree?Comment optimiser la gestion des collisions de l'itinérance à la troisième personne dans une pièce en utilisant trois.js et Octree?Apr 30, 2025 pm 03:09 PM

    Utilisez Three.js et Octree pour optimiser la gestion des collisions de l'itinérance à la troisième personne dans la salle. Utilisez Octree dans Three.js pour mettre en œuvre l'itinérance à la troisième personne dans la salle et ajouter des collisions ...

    See all articles

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    Video Face Swap

    Video Face Swap

    Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

    Outils chauds

    DVWA

    DVWA

    Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

    MantisBT

    MantisBT

    Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

    Listes Sec

    Listes Sec

    SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

    PhpStorm version Mac

    PhpStorm version Mac

    Le dernier (2018.2.1) outil de développement intégré PHP professionnel

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP