首页 > 其他分享 >[Whole Web] Optimize DNS parsing

[Whole Web] Optimize DNS parsing

时间:2024-11-18 15:46:00浏览次数:1  
标签:files Web const parsing html DNS Whole Optimize match

When users try to visit our application, example.comfor the first time, DNS need to parsing and find out application IP address.

After first time visiting, the IP address and domain name mapping will be cached for subsequence visit. 

 

So optimizing DNS parsing is actually for the first time visit.

 

When parseing DNS for the application (the first red box), this is something we cannot avoid and optimize; 

The one we can optimize is the second & third red box, is when browser trying to load js, css, image from other domains

// load js from cdn.com
// load css from other.com
// load image from imgs.com

 When parsing those DNS, it not only take time, but also will block rendering.

 

The solution is let browser parsing the DNS beforehands

 

<head>
    <link rel="dns-prefetch" href="https://www.coffee.com" />
    <link rel="dns-prefetch" href="https://www.autoimg.com" />
    <link rel="dns-prefetch" href="https://www.abc.com" />
</head>
<style>
  body {
    background: url('https://www.coffee.com/bg.com')  
  }
</style>
<body>
    <img src="https://www.autoimg.com/img/234234.jpg" alt="" />
    <script src="https://www.abc.com.sss.js"></script>
</body>

So we use dns-prefetchwith the domianto ask browser to pre-fetch the resouces files.

 

While this works for simple static files, but in large application with morden framework, we might requires lots of reseouces files from different domains, it's kind of hard to manually tracking those domains.

// scripts/dns-prefetch.js
const fs = require('fs');
const path = require('path');
const { parse } = require('node-html-parser');
const { glob } = require('glob');
const urlRegex = require('url-regex');

// Test Regex
const urlPattern = /(https?:\/\/[^/]+)/i;
const urls = new Set();

// Search for all HTML, JS, CSS files in the 'dist' directory
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();
  // Add prefetch links in the <head> tag
  await insertLinks();
}

main();

 

We want to run this script after bundling finished. Therefore we can create a helper scripts in package.json:

build: vite build && node ./scripts/dns-prefetch.js

标签:files,Web,const,parsing,html,DNS,Whole,Optimize,match
From: https://www.cnblogs.com/Answer1215/p/18552837

相关文章

  • 【前端面试系列】Web 本地存储全面详解
    一、本地存储方案概述现代Web应用中常用的本地存储方案主要包括:CookieWebStorage(localStorage/sessionStorage)IndexedDBWebSQLDatabase(已废弃)CacheAPIFileSystemAPI二、详细介绍1.Cookie1.1基本概念Cookie是服务器发送到用户浏览器并保存在本地的......
  • web——upload-labs——第一关
    今天新开一个upload-labs的靶场,文件上传,加油!!!!先讲讲文件上传文件上传:在Web开发中,文件上传功能是一个允许用户将文件(例如图片、文档)上传到服务器的常见特性。为了确保安全和数据一致性,通常需要在这个过程中实施前端验证和后端验证。这两种验证机制的目的是确保上传的文件符合预......
  • Go语言跨平台桌面应用开发新纪元:LCL、CEF与Webview全解析
    开篇寄语在Go语言的广阔生态中,桌面应用开发一直是一个备受关注的领域。今天,我将为大家介绍三款基于Go语言的跨平台桌面应用开发框架——LCL、CEF与Webview,它们分别拥有独特的魅力和广泛的应用场景。通过这三款框架,你将能够轻松开发出功能强大、界面美观的跨平台桌面应用程序。......
  • 什么是WEB
    万维网(WorldWideWeb,WWW),简称Web,是一个通过互联网提供信息和服务的全球性网络。它是由万千网站、网页、媒体内容和其他在线资源组成的庞大信息系统,通过浏览器访问和交互。万维网利用超文本(Hypertext)和超链接技术,使得人们可以方便地浏览不同的网页和资源,快速地获取信息。1.......
  • Javaweb开发核心之应用上下文知识(笔记)
     什么是应用上下⽂ServletContext简介:讲解Javaweb作⽤用域对象介绍和ServletContext讲解1.理解应用上下文定义:应用上下文是一个ServletContext对象,表示整个Web应用的全局信息和状态。它在Web应用启动时创建,在应用停止时销毁。作用:全局信息共享:可存储应用范围内......
  • 进行web开发所必须要掌握的基本常识-01
    web开发基础web开发的两种模式服务器渲染的开发模式(前后端不分离)服务器端渲染的开发模式,就是由**服务器发送给客户端HTML页面,页面是由服务器端把页面结构和数据动态拼接**而成的。优点1.前端页面可以**快速渲染、首屏加载速度快**。因为页面是由后端动态生成的HTML,浏......
  • CTFWeb篇04-SQL注入
    SQL注入什么是SQL注入SQL注入就是指WEB应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数代入数据库查询,攻击者可以通过构造不同的SQL语句来是实现对数据库的任意操作。即通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串......
  • aiortc && WebSocket and django-channels
    aiortchttps://github.com/aiortc/aiortc/tree/mainWebRTCandORTCimplementationforPythonusingasyncioWhatisaiortc?aiortcisalibraryforWebReal-TimeCommunication(WebRTC)andObjectReal-TimeCommunication(ORTC)inPython.Itisbuilton......
  • 随便写点ctfwp(web方向)
    最近社团一直在发作业,哎。。随便写点看看得了23333//本文章提供给入门ctf且对web方向感兴趣的同学 (d'∀')希望对你们有帮助(^_っ^)WEB1看题目描述应该是与MD5绕过有关可以不去思考sql注入尝试输出1.2.3.。。。回显都是password=1,2,3查看源代码也没什么有用的信息......
  • 猿人学web端爬虫攻防大赛赛题第20题——2022新春快乐
    题目网址:https://match.yuanrenxue.cn/match/20解题步骤解题之前需要先了解wasm是什么:https://docs.pingcode.com/ask/294587.html看数据包。sign是一串加密的字符串,t一看就是时间戳。全局搜索api/match/20,只有一处。打断点,触发。看下sign的生成逻辑。"sign":window......