首页 > 其他分享 >前端实现DNS解析和优化

前端实现DNS解析和优化

时间:2024-09-14 22:26:09浏览次数:3  
标签:fs const file 前端 html DNS 解析 match

        作为前端开发者如何针对DNS做优化?众所周知,这个DNS是做域名解析的,输入一个域名,经过DNS解析之后就可以得到一个IP地址,互联网中做请求都要把域名转成IP,这个转换过程是比较复杂的,就比较耗时,所以说有优化的空间,它转换之后是会做本地缓存。所以我们优化的目标主要是针对用户第一次访问站点的时候陷入长时间白屏的问题。由于工程化开发涉及到大量页面,页面中可能存在一些站外地址资源(例如js,css,图片等),当浏览器解析HTML时遇到这些域名,就会暂停HTML解析转而去DNS解析,这个过程就会造成阻塞浏览器渲染主线程!

如何优化?
框架中如何实现提前预解析DNS

这里分享一个通用的方法:项目下创建script目录,下在创建dns-prefetch.js

const fs = require('fs');
const { parse } = require('node-html-parser');
const { glob } = require('glob');
const urlRegex = require('url-regex');

//获取外部链接的正则表达式
const urlPattern = /(https?:\/\/[^/]*)/i;
const urls = new Set();
// 遍历dist目录中的所有HTML、js、css文件
async function searchDomain() {
  const files = await glob('dist/**/*.{html,css,js}');
  for (const file of files) {
    const source = fs.readFileSync(file, 'utf-8');
    const matches = source.match(urlRegex({ strict: true }));
    if (matches) {
      matches.forEach((url) => {
        const match = url.match(urlPattern);
        if (match && match[1]) {
          urls.add(match[1]);
        }
      });
    }
  }
}

async function insertLinks() {
  const files = await glob('dist/**/*.html');
  const links = [...urls].map((url) => `<link rel="dns-prefetch" href="${url}" />`).join('\n');
  for (const file of files) {
    const html = fs.readFileSync(file, 'utf-8');
    const root = parse(html);
    const head = root.querySelector('head');
    head.insertAdjacentHTML('afterbegin', links);
    fs.writeFileSync(file, root.toString());
  }
}

async function main() {
  await searchDomain();
  // 在<head>标签中添加预取链接
  await insertLinks();
}

main();
注意事项!

这几个引用最好npm install一下,不然可能出错

打包时顺便执行下这个函数

效果

        最后在dist打包结果中可以看到index.html文件中多了一些
 

标签:fs,const,file,前端,html,DNS,解析,match
From: https://blog.csdn.net/m0_56344834/article/details/142265205

相关文章

  • 纯前端实现语音文字互转
            在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环。WebSpeechAPI的引入使得开发者能够在浏览器中轻松实现语音识别和语音合成功能,为用户带来更加直观和便捷的操作体验。本文将介绍WebSpeechAPI的基本概念、功能特性以及如何利用它来构建......
  • 高级 Python Web 应用中的身份验证与授权机制解析
    高级PythonWeb应用中的身份验证与授权机制解析目录......
  • 前端网络请求库:Axios
    目录1.网络请求的基本概念1.1网络请求的基础HTTP协议1.2HTTP工作原理1.3TCP连接1.31建立TCP连接1.31关闭TCP连接1.4HTTP的请求方法1.5HTTP的响应状态码分类1.6.前端网络请求方式2.Axios在在vue项目中的使用 2.1安装与使用2.2Axios使用HTTP请求方法2.2......
  • 高级java每日一道面试题-2024年9月08日-前端篇-JS的执行顺序是什么样的?
    如果有遗漏,评论区告诉我进行补充面试官:JS的执行顺序是什么样的?我回答:JavaScript的执行顺序是由其特殊的执行环境所决定的。JS的执行环境包括全局执行环境、函数执行环境和eval执行环境。在这些环境中,变量和函数声明会被提升(hoisting),而变量赋值和函数调用则按照......
  • 前端必须掌握的五种排序算法,你会几种?
    文章目录前言1.冒泡排序(BubbleSort)2.选择排序(SelectionSort)3.插入排序(InsertionSort)4.快速排序(QuickSort)5.归并排序(MergeSort)前言在前端开发中,对数据进行排序是一项基本且常见的任务。掌握排序算法不仅可以帮助我们更有效地处理数据,还能提升代码的执行效......
  • 【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码
    【工具】前端JavaScript代码在线执行器方便通过网页手机测试js代码自动补全js代码格式化代码色彩打印日志清空日志待补充<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,ini......
  • 【前端UI框架】VUE ElementUI 离线文档 可不联网打开
    【前端UI框架】VUEElementUI离线文档可不联网打开Element-Theworld'smostpopularVueUIframeworkElement-Theworld'smostpopularVueUIframework离线文档下载地址文档制作第一步:克隆源代码Gitee地址:https://gitee.com/ElemeFE/element.gitGitHub地址:https:......
  • 【组件】WEB前端-富文本编辑器组件推荐 在线编辑器 Word
    【组件】WEB前端-富文本编辑器组件推荐在线编辑器Wordcanvas-editor基于canvas/svg的富文本编辑器canvas-editor|richtexteditorbycanvas/svgrichtexteditorbycanvas/svghttps://hufe.club/canvas-editor-docs/canvas-editor基于canvas/svg的富文本编辑器开始在GitHub......
  • 前端项目通过 Nginx 发布至 Linux,并通过 rewrite 配置访问后端接口
    〇、前言本文通过将arco框架的前端项目,部署至CentOS7,并访问同服务器的WebAPI接口,来简单演示一下,如何将前端项目发布至Linux系统。关于ASP.NETWebAPI发布至Linux的步骤,可以参考博主过往文章:https://www.cnblogs.com/hnzhengfy/p/18384107/webapi_centos。一、简......
  • DNSCAT2 是一个开源工具,用于通过 DNS 协议进行隐蔽的网络通信。它最初是由 Tim Wright
    DNSCAT2是一个开源工具,用于通过DNS协议进行隐蔽的网络通信。它最初是由TimWright开发的,目的是利用DNS协议的特点实现隐蔽的数据传输。DNSCAT2的主要用途是帮助安全研究人员测试和评估DNS相关的安全防护措施,尤其是在针对DNS隧道和数据泄露的防御方面。DNSCAT2的工作......