首页 > 滚动 > > 内容页

环球要闻:CefSharp自定义缓存实现

2023-04-27 04:55:18 博客园

大家好,我是沙漠尽头的狼。

上文介绍了《C#使用CefSharp内嵌网页-并给出C#与JS的交互示例》,本文介绍CefSharp的缓存实现,先来说说添加缓存的好处:

提高页面加载加速:CefSharp缓存可以缓存已经加载过的页面和资源,当用户再次访问相同的页面时,可以直接从缓存中加载,而不需要重新下载和解析页面和资源,从而加快页面加载速度。减少网络流量:使用缓存可以减少网络流量,因为已经下载过的资源可以直接从缓存中读取,而不需要重新下载。提高用户体验:由于缓存可以提高页面加载速度,因此可以提高用户的体验,用户可以更快地访问页面和资源,从而更加愉快地使用应用程序。减少服务器负载:使用缓存可以减少服务器的负载,因为已经下载过的资源可以直接从缓存中读取,而不需要重新生成和发送。离线访问:可以使应用程序支持离线访问,因为它可以缓存已经下载过的页面和资源,当用户没有网络连接时,可以直接从缓存中加载页面和资源。

总之,使用缓存可以提高应用程序的性能和用户体验,减少网络流量和服务器负载,并支持离线访问,是一个非常有用的特性。


(资料图片)

本文示例:Github

断网情况下,演示加载已经缓存的百度、百度翻译、Dotnet9首页、Dotnet9关于4个页面:

接下来讲解缓存的实现方式。

1. 默认缓存实现

CefSharp的默认缓存实现方式是基于Chromium的缓存机制。Chromium使用了两种类型的缓存:内存缓存和磁盘缓存。

1.1. 内存缓存

内存缓存是一个基于LRU(最近最少使用)算法的缓存,它缓存了最近访问的页面和资源。内存缓存的大小是有限的,当缓存达到最大大小时,最近最少使用的页面和资源将被删除。

内存缓存无法通过CefSharp.WPF的API进行设置。具体来说,Chromium会在内存中维护一个LRU(Least Recently Used)缓存,用于存储最近访问的网页数据。当缓存空间不足时,Chromium会根据LRU算法自动清除最近最少使用的缓存数据,以腾出空间存储新的数据。

在CefSharp.WPF中,我们可以通过调用Cef.GetGlobalRequestContext().ClearCacheAsync()方法来清除内存缓存中的数据。该方法会清除所有缓存数据,包括内存缓存和磁盘缓存。如果只需要清除内存缓存,可以调用Cef.GetGlobalRequestContext().ClearCache(CefCacheType.MemoryCache)方法。

需要注意的是,由于内存缓存是由Chromium自身维护的,因此我们无法直接控制其大小。如果需要控制缓存大小,可以通过设置磁盘缓存的大小来间接控制内存缓存的大小。

1.2. 磁盘缓存

磁盘缓存是一个基于文件系统的缓存,它缓存了已经下载的页面和资源。磁盘缓存的大小也是有限的,当缓存达到最大大小时,最早的页面和资源将被删除。

CefSharp.WPF的磁盘缓存是通过设置CefSettings中的CachePath属性来实现的。具体来说,我们可以通过以下代码设置磁盘缓存的路径:

public partial class App : Application{    protected override void OnStartup(StartupEventArgs e)    {        base.OnStartup(e);        // CachePath需要为绝对路径        var settings = new CefSettings        {            CachePath = $"{AppDomain.CurrentDomain.BaseDirectory}DefaultCaches"        };        Cef.Initialize(settings);    }}

缓存目录结构如下:

其中,CachePath属性指定了磁盘缓存的路径(绝对路径)。如果不设置该属性,Chromium会将缓存数据存储在默认路径下(通常是用户目录下的AppData\Local\CefSharp目录)。

需要注意的是,磁盘缓存的大小是由Chromium自身控制的,我们可以通过设置CacheController的SetCacheLimit方法来控制缓存数据存储在磁盘上的最大空间。该方法接受一个long类型的参数,表示缓存数据的最大大小(单位为字节)。例如,以下代码将磁盘缓存的最大大小设置为100MB:

var cacheController = Cef.GetGlobalRequestContext().CacheController;cacheController.SetCacheLimit(100 * 1024 * 1024); // 100MB

需要注意的是,Chromium会根据LRU算法自动清除最近最少使用的缓存数据,以腾出空间存储新的数据。因此,即使设置了缓存大小,也不能保证所有数据都会被缓存。如果需要清除磁盘缓存中的数据,可以调用Cef.GetGlobalRequestContext().ClearCacheAsync()方法。

默认的缓存站长研究不多,上面的代码和描述通过ChatGPT搜索得来,我们来看自定义缓存的实现,默认缓存只是个引子。

2. 自定义缓存

这是本文介绍的重点,相对于默认缓存,自定义缓存有以下好处:

更加灵活:可以根据应用程序的需求来灵活地配置缓存策略和缓存大小,从而更好地满足应用程序的需求。更好的性能:可以根据应用程序的需求和特定的场景进行配置,以获得更好的性能。默认的缓存可能不适合某些特定的场景或者不适合您的应用程序的需求,而自定义缓存则可以根据您的需求进行调整,以获得更好的性能。更好的安全性:可以更好地保护用户的隐私和安全,因为可以控制缓存中存储的内容和缓存的生命周期。更加可控:可以更好地控制缓存的行为,例如可以控制缓存的清除时间和清除策略,从而更好地管理缓存。更好的兼容性:可以更好地适应不同的浏览器和设备,默认的缓存可能不能提供足够的兼容性,而自定义缓存则可以根据您的需求进行调整,以提供更好的兼容性。更加高效:可以更好地利用系统资源,例如可以使用更快的存储设备来存储缓存,从而提高缓存的读写速度。

总结:自定义缓存可以提供更好的性能、响应性、安全性和兼容性,从而提高应用程序的质量和用户体验,人话就是更好的操控

2.1. 代码实现

注释前面加的默认缓存代码。

2.1.1. 注册资源请求拦截处理程序

首先在使用ChromiumWebBrowser控件的后台代码里,注册请求拦截处理程序,CefBrowser是控件名,CefRequestHandlerc是处理程序:

public TestCefCacheView(){    InitializeComponent();    var handler = new CefRequestHandlerc();    CefBrowser.RequestHandler = handler;}
2.1.2. 请求拦截处理程序

CefSharp里的IRequestHandler是一个接口,用于处理浏览器发出的请求。它定义了一些方法,可以在请求被发送到服务器之前或之后对请求进行处理。

IRequestHandler的实现类可以用于以下几个方面:

拦截请求:可以通过实现OnBeforeBrowse方法来拦截请求,从而控制浏览器的行为。例如,可以在请求被发送到服务器之前检查请求的URL,如果不符合要求,则可以取消请求或者重定向到其他页面。

修改请求:可以通过实现OnBeforeResourceLoad方法来修改请求,例如可以添加一些自定义的HTTP头信息,或者修改请求的URL。

处理响应:可以通过实现OnResourceResponse方法来处理服务器返回的响应,例如可以检查响应的状态码和内容,从而决定是否继续加载页面。

缓存控制:可以通过实现OnQuotaRequest方法来控制缓存的大小和清除策略,从而优化缓存的使用。

总之,IRequestHandler的实现类可以用于控制浏览器的行为,优化网络请求和缓存的使用,从而提高应用程序的性能和用户体验。

我们不直接实现接口IRequestHandler,而是继承它的一个默认实现类RequestHandler,这可以简化我们的开发,毕竟实现接口要列出一系列接口方法。

我们重载方法GetResourceRequestHandler, 在这个方法里返回CefResourceRequestHandler实例,页面中资源请求时会调用此方法:

using CefSharp;using CefSharp.Handler;namespace WpfWithCefSharpCacheDemo.Caches;internal class CefRequestHandlerc : RequestHandler{    protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame,        IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)    {        // 一个请求用一个CefResourceRequestHandler        return new CefResourceRequestHandler();    }}
2.1.3. 资源请求拦截程序

在CefSharp中,IResourceRequestHandler接口是用于处理资源请求的,它可以拦截浏览器发出的资源请求,例如图片、CSS、JavaScript等,从而实现对资源请求的控制和优化。

具体来说,IResourceRequestHandler接口定义了一些方法,例如OnBeforeResourceLoadOnResourceResponse等方法,这些方法可以用于拦截请求、修改请求、处理响应等方面。例如:

OnBeforeResourceLoad:在浏览器请求资源之前被调用,可以用于修改请求,例如添加一些自定义的HTTP头信息,或者修改请求的URL。

OnResourceResponse:在浏览器接收到服务器返回的响应之后被调用,可以用于处理响应,例如检查响应的状态码和内容,从而决定是否继续加载页面。

OnResourceLoadComplete:在资源加载完成后被调用,可以用于处理资源加载完成后的操作,例如保存资源到本地缓存。

通过实现IResourceRequestHandler接口,可以对资源请求进行拦截和优化,从而提高应用程序的性能和用户体验。

这里我们也不直接实现IResourceRequestHandler接口,我们定义CefResourceRequestHandler类,继承该接口的默认实现类ResourceRequestHandler

在下面的CefResourceRequestHandler类中:

GetResourceHandler方法:处理资源是否需要缓存,返回null不缓存,返回CefResourceHandler表示需要缓存,在这个类中做跨域处理。GetResourceResponseFilter方法:注册资源缓存的操作类,即资源下载的实现。OnBeforeResourceLoad方法:在这个方法里,我们可以实现给页面传递header参数。
using System.Collections.Specialized;using CefSharp;using CefSharp.Handler;namespace WpfWithCefSharpCacheDemo.Caches;internal class CefResourceRequestHandler : ResourceRequestHandler{    private string _localCacheFilePath;    private bool IsLocalCacheFileExist => System.IO.File.Exists(_localCacheFilePath);    protected override IResourceHandler? GetResourceHandler(IWebBrowser chromiumWebBrowser, IBrowser browser,        IFrame frame, IRequest request)    {        try        {            _localCacheFilePath = CacheFileHelper.CalculateResourceFileName(request.Url, request.ResourceType);            if (string.IsNullOrWhiteSpace(_localCacheFilePath))            {                return null;            }        }        catch        {            return null;        }        if (!IsLocalCacheFileExist)        {            return null;        }        return new CefResourceHandler(_localCacheFilePath);    }    protected override IResponseFilter? GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser,        IFrame frame,        IRequest request, IResponse response)    {        return IsLocalCacheFileExist ? null : new CefResponseFilter { LocalCacheFilePath = _localCacheFilePath };    }    protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser,        IFrame frame, IRequest request,        IRequestCallback callback)    {        var headers = new NameValueCollection(request.Headers);        headers["Authorization"] = "Bearer xxxxxx.xxxxx.xxx";        request.Headers = headers;        return CefReturnValue.Continue;    }}
2.1.4. CefResourceHandler

在CefSharp中,IResourceHandler接口是用于处理资源的,它可以拦截浏览器发出的资源请求,并返回自定义的资源内容,从而实现对资源的控制和优化。

具体来说,IResourceHandler接口定义了一些方法,例如ProcessRequestGetResponseHeadersReadResponse等方法,这些方法可以用于处理资源请求、获取响应头信息、读取响应内容等方面。例如:

ProcessRequest:在浏览器请求资源时被调用,可以用于处理资源请求,例如从本地缓存中读取资源内容,或者从网络中下载资源内容。

GetResponseHeaders:在浏览器请求资源时被调用,可以用于获取响应头信息,例如设置响应的MIME类型、缓存策略等。

ReadResponse:在浏览器请求资源时被调用,可以用于读取响应内容,例如从本地缓存中读取资源内容,或者从网络中下载资源内容。

通过实现IResourceHandler接口,可以对资源进行自定义处理,例如从本地缓存中读取资源内容,从而提高应用程序的性能和用户体验。

这里我们也不直接实现IResourceHandler接口,我们定义CefResourceHandler类,继承该接口的默认实现类ResourceHandler

CefResourceHandler的构造函数里只处理跨域问题,其他需求可通过上面接口的方法查找资料处理即可:

using CefSharp;using System.IO;namespace WpfWithCefSharpCacheDemo.Caches;internal class CefResourceHandler : ResourceHandler{    public CefResourceHandler(string filePath, string mimeType = null, bool autoDisposeStream = false,        string charset = null) : base()    {        if (string.IsNullOrWhiteSpace(mimeType))        {            var fileExtension = Path.GetExtension(filePath);            mimeType = Cef.GetMimeType(fileExtension);            mimeType = mimeType ?? DefaultMimeType;        }        var stream = File.OpenRead(filePath);        StatusCode = 200;        StatusText = "OK";        MimeType = mimeType;        Stream = stream;        AutoDisposeStream = autoDisposeStream;        Charset = charset;        Headers.Add("Access-Control-Allow-Origin", "*");    }}
2.1.5. CefResponseFilter

在CefSharp中,IResponseFilter接口是用于过滤响应内容的,它可以拦截浏览器接收到的响应内容,并对其进行修改或者过滤,从而实现对响应内容的控制和优化。

具体来说,IResponseFilter接口定义了一些方法,例如InitFilterFilterGetSize等方法,这些方法可以用于初始化过滤器、过滤响应内容、获取过滤后的响应内容大小等方面。例如:

InitFilter:在浏览器接收到响应内容时被调用,可以用于初始化过滤器,例如设置过滤器的状态、获取响应头信息等。

Filter:在浏览器接收到响应内容时被调用,可以用于过滤响应内容,例如修改响应内容、删除响应内容等。

GetSize:在浏览器接收到响应内容时被调用,可以用于获取过滤后的响应内容大小,例如用于计算响应内容的压缩比例等。

站长使用的CefSharp.Wpf89.0.170.0版本中的IResponseFilter接口没有GetSize方法。在该版本中,IResponseFilter接口只定义了两个方法:InitFilterFilter

如果在该版本中您需要获取过滤后的响应内容大小,可以考虑在Filter方法中自行计算。例如,在Filter方法中,您可以将过滤后的响应内容写入一个缓冲区,并记录缓冲区的大小,最后返回过滤后的响应内容和缓冲区的大小。

public class MyResponseFilter : IResponseFilter{    private MemoryStream outputStream = new MemoryStream();    public void Dispose()    {        outputStream.Dispose();    }    public bool InitFilter()    {        return true;    }    public FilterStatus Filter(Stream dataIn, out long dataInRead, Stream dataOut, out long dataOutWritten)    {        dataInRead = 0;        dataOutWritten = 0;        byte[] buffer = new byte[4096];        int bytesRead = 0;        do        {            bytesRead = dataIn.Read(buffer, 0, buffer.Length);            if (bytesRead > 0)            {                outputStream.Write(buffer, 0, bytesRead);            }        } while (bytesRead > 0);        byte[] outputBytes = outputStream.ToArray();        dataOut.Write(outputBytes, 0, outputBytes.Length);        dataInRead = outputBytes.Length;        dataOutWritten = outputBytes.Length;        return FilterStatus.Done;    }    public int GetResponseFilterBufferSize()    {        return 0;    }    public int GetResponseFilterDelay()    {        return 0;    }}

在上述示例代码中,我们在Filter方法中将过滤后的响应内容写入了一个MemoryStream对象中,并记录了缓冲区的大小。最后,我们在Filter方法的返回值中返回了过滤后的响应内容和缓冲区的大小。

总结,通过实现IResponseFilter接口,可以对响应内容进行自定义处理,例如对响应内容进行压缩、加密等操作,从而提高应用程序的性能和安全性。

本文示例这里定义类CefResponseFilter直接实现接口处理文件缓存实际操作类,即资源下载实现:

using CefSharp;using System.IO;namespace WpfWithCefSharpCacheDemo.Caches;internal class CefResponseFilter : IResponseFilter{    public string LocalCacheFilePath { get; set; }    private const int BUFFER_LENGTH = 1024;    private bool isFailCacheFile;    public FilterStatus Filter(Stream? dataIn, out long dataInRead, Stream? dataOut, out long dataOutWritten)    {        dataInRead = 0;        dataOutWritten = 0;        if (dataIn == null)        {            return FilterStatus.NeedMoreData;        }        var length = dataIn.Length;        var data = new byte[BUFFER_LENGTH];        var count = dataIn.Read(data, 0, BUFFER_LENGTH);        dataInRead = count;        dataOutWritten = count;        dataOut?.Write(data, 0, count);        try        {            CacheFile(data, count);        }        catch        {            // ignored        }        return length == dataIn.Position ? FilterStatus.Done : FilterStatus.NeedMoreData;    }    public bool InitFilter()    {        try        {            var dirPath = Path.GetDirectoryName(LocalCacheFilePath);            if (!string.IsNullOrWhiteSpace(dirPath) && !Directory.Exists(dirPath))            {                Directory.CreateDirectory(dirPath);            }        }        catch        {            // ignored        }        return true;    }    public void Dispose()    {    }    private void CacheFile(byte[] data, int count)    {        if (isFailCacheFile)        {            return;        }        try        {            if (!File.Exists(LocalCacheFilePath))            {                using var fs = File.Create(LocalCacheFilePath);                fs.Write(data, 0, count);            }            else            {                using var fs = File.Open(LocalCacheFilePath, FileMode.Append);                fs.Write(data,0,count);            }        }        catch        {            isFailCacheFile = true;            File.Delete(LocalCacheFilePath);        }    }}
2.1.6. CacheFileHelper

缓存文件帮助类,用于管理页面的ajax接口缓存白名单、缓存文件路径规范等:

using CefSharp;using System;using System.Collections.Generic;using System.IO;namespace WpfWithCefSharpCacheDemo.Caches;internal static class CacheFileHelper{    private const string DEV_TOOLS_SCHEME = "devtools";    private const string DEFAULT_INDEX_FILE = "index.html";    private static HashSet needInterceptedAjaxInterfaces = new();    private static string CachePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "caches");    public static void AddInterceptedAjaxInterfaces(string url)    {        if (needInterceptedAjaxInterfaces.Contains(url))        {            return;        }        needInterceptedAjaxInterfaces.Add(url);    }    private static bool IsNeedInterceptedAjaxInterface(string url, ResourceType resourceType)    {        var uri = new Uri(url);        if (DEV_TOOLS_SCHEME == url)        {            return false;        }        if (ResourceType.Xhr == resourceType && !needInterceptedAjaxInterfaces.Contains(url))        {            return false;        }        return true;    }    public static string? CalculateResourceFileName(string url, ResourceType resourceType)    {        if (!IsNeedInterceptedAjaxInterface(url, resourceType))        {            return default;        }        var uri = new Uri(url);        var urlPath = uri.LocalPath;        if (urlPath.StartsWith("/"))        {            urlPath = urlPath.Substring(1);        }        var subFilePath = urlPath;        if (ResourceType.MainFrame == resourceType || string.IsNullOrWhiteSpace(urlPath))        {            subFilePath = Path.Combine(urlPath, DEFAULT_INDEX_FILE);        }        var hostCachePath = Path.Combine(CachePath, uri.Host);        var fullFilePath = Path.Combine(hostCachePath, subFilePath);        return fullFilePath;    }}

自定义缓存的子目录以资源的域名(Host)为目录名称创建:

打开缓存的dotnet9.com目录,通过查看目录结构和程序发布目录基本一致,这更适合人看了,是不?

2.2. 可能存在的问题

第一点,站长目前遇到的问题,后面4点由Token AI提供解释。

2.2.1. 对缓存的资源URL带QueryString的方式支持不好

建议用Route(路由的方式:https://dotnet9.com/albums/wpf)代替QueryString(查询参数的试工:https://dotnet9.com/albums?slug=wpf)的方式,站长有空再研究下QueryString的缓存方式。

如果确实资源带QueryString,那对于这种资源就放开缓存,直接通过网络请求吧。

2.2.2. 缓存一致性问题

如果自定义缓存不正确地处理了缓存一致性,可能会导致浏览器显示过期的内容或者不一致的内容。例如,如果缓存了一个网页,但是该网页在服务器上已经被更新了,如果自定义缓存没有正确地处理缓存一致性,可能会导致浏览器显示过期的网页内容。

2.2.3. 缓存空间问题

如果自定义缓存没有正确地管理缓存空间,可能会导致浏览器占用过多的内存或者磁盘空间。例如,如果自定义缓存缓存了大量的数据,但是没有及时清理过期的数据或者限制缓存的大小,可能会导致浏览器占用过多的内存或者磁盘空间。

2.2.4. 缓存性能问题

如果自定义缓存没有正确地处理缓存性能,可能会导致浏览器的性能下降。例如,如果自定义缓存没有正确地处理缓存的读取和写入,可能会导致浏览器的响应速度变慢。

2.2.5. 缓存安全问题

如果自定义缓存没有正确地处理缓存安全,可能会导致浏览器的安全性受到威胁。例如,如果自定义缓存缓存了敏感数据,但是没有正确地处理缓存的加密和解密,可能会导致敏感数据泄露。

因此,在自定义缓存时,需要注意处理缓存一致性、缓存空间、缓存性能和缓存安全等问题,以确保浏览器的正常运行和安全性。

参考:

CefSharp

关于CefSharp中C#与JS函数互相调用的应用

微信技术交流群:添加微信(dotnet9com)备注“入群”

QQ技术交流群:771992300。

x 广告
最近更新

环球要闻:CefSharp自定义缓存实现

2023-04-27

孙喜明-全球视讯

2023-04-27

迪威迅: 2022年度利润分配预案 重点聚焦

2023-04-26

世界动态:英国向乌移交贫铀弹 俄方:将给乌带来放射性危害

2023-04-26

翰宇药业:4月25日召开董事会会议 速看

2023-04-26

火到A股!券商分析师探店“淄博烧烤” 调研出哪些投资机会

2023-04-26

汉川:这里的“最美庭院”藏着你向往的“新”生活 世界时讯

2023-04-26

联合精密:业绩短期承压 白电消费复苏助力公司发展

2023-04-26

【全球独家】以镁电池为例,探讨高性能电池的突破方向

2023-04-26

专家称调休有利于经济发展:今年五一调休是动了脑筋的做法 世界最新

2023-04-26

中国光伏行业协会:3月全国组件产量同比增长76.4%

2023-04-26

广州2023年5月3日萤火虫漫展活动时间安排表

2023-04-26

银行板块跌0.8% 浙商银行涨3.01%居首

2023-04-26

湖南:学习推广双峰阅读教育经验 全球关注

2023-04-26

海淀公布义务教育入学政策,非住宅类不动产不得作为入学依据-焦点速读

2023-04-26

抖音重仓本地生活,机构们2023年如何赚钱?

2023-04-26

超级汇川与张家界文旅商会、八大景区达成合作 共同推动旅游行业高质量发展

2023-04-26

钓鱼烹饪美食_钓鱼烹饪

2023-04-26

【环球报资讯】视频号内测运费险 或将于 5 月正式面市

2023-04-26

新一轮雨水正在“候场”!河北未来三天天气预报→ 通讯

2023-04-26

欲望之都:爱上Madam

2023-04-26

pvc桌垫渗红油擦不掉怎么办|每日快播

2023-04-26

各地将全力保障“五一”假期交通物流平稳有序-天天亮点

2023-04-26

世界速递!山路转债等1只新债星期三上市

2023-04-26

最新快讯!惠济区首家科技类校外培训机构获批

2023-04-26

帝人公司碳纤维增强热塑性复合材料获得认证

2023-04-26

杜尔伯特县江湾乡开闸放水保春灌_环球速看

2023-04-26

服务实体经济 推动产融结合-全球视点

2023-04-26

当前滚动:自治区最新任命名单_自治

2023-04-26

环球关注:“五一”节日期间流通环节食品安全消费提示

2023-04-26

泉港特色农业“生金” 致富增收“有道”

2023-04-26

华语乐坛“新四大天王”,新生代歌手的出圈只能靠梗了?

2023-04-26

【天天快播报】地铁口自行车乱停乱放到底该怎么治?

2023-04-26

全球今热点:“委内瑞拉政治进程国际会议”在哥伦比亚召开

2023-04-26

97:2460!绿媒称大陆穷台战略正式打响,台当局:愿不设前提磋商

2023-04-26

暗之伴走者_对于暗之伴走者简单介绍_播报

2023-04-26

大侠后宫:第一个把老婆写到极致的人,哈哈我是反对先生当年退出文坛的

2023-04-26

当前快播:婚房装修设计技巧及装修攻略

2023-04-26

世界快讯:算八字婚姻合不合需要些什么材料_算八字婚姻合不合

2023-04-26

环球精选!美股异动|陶氏化学跌超3%Q1营收下降22%

2023-04-25

现代分子生物学_关于现代分子生物学介绍 环球报资讯

2023-04-25

蒜苔子炒肉怎么做 蒜苔子炒肉怎么做才好吃_每日速讯

2023-04-25

马自达加拿大发布2006年 B系列皮卡车的“禁止驾驶”咨询

2023-04-25

世界速看:张艺谋:好的作品才能成为市场主角儿,否则就是泡沫

2023-04-25

交通部门预计长三角“五一”出行需求将大量释放-全球关注

2023-04-25

北京中考时间确定,统招志愿增至12个!这些考生可加分

2023-04-25

全球今日讯!太原:五一假期两公布一提示,速看!

2023-04-25

当前速递!27球0球1助!28岁巨星世界杯夺冠就飘了,遭尤文退货,被姆总嫌弃

2023-04-25

精选!靖煤集团白银热电有限公司 2023年安保服务项目更正公告

2023-04-25

品阅书香 阅享悦美

2023-04-25

绿城房地产:拟发行15亿元中期票据_全球百事通

2023-04-25

中年男人:别再把上衣塞进裤子,太油腻!学47岁陈坤这样穿才高级|世界头条

2023-04-25

【天天快播报】诺基亚神机开始推送安卓13系统

2023-04-25

招商引资,上海发大招!AI、元宇宙,最高支持2000万元!集成电路最高1亿元

2023-04-25

城市代步小越野?宝骏悦也续航303KM+运动设计!6月份上市!

2023-04-25

全球热文:樱花唯美句子简短 樱花唯美句子简短英语

2023-04-25

自研Tome-ubind系列AI模型,「途咪」计划帮助To B客户训练出“企业模型”|Chat AI 环球观天下

2023-04-25

全球今热点:中国移动董事长杨杰:云业务是中国移动数智化转型的战略重点

2023-04-25

油价即将调整!_世界观天下

2023-04-25

仁和资本:上两周中资美元债新发仍处低位,二级市场高收益表现整体弱于投资级

2023-04-25

慌慌张张匆匆忙忙为何生活总是这样难道说_慌慌张张匆匆忙忙为何生活总是这样

2023-04-25

欧洲央行官员指加息仍未完结,5月或加50个基点

2023-04-25

打斗特别的燃!陈奕天二刷斗破苍穹|信息

2023-04-25

每日聚焦:第十四届万松浦文学奖颁出,邱华栋臧棣瓦当金仁顺等作家获奖

2023-04-25

三星AWE 2023新品阵容曝光?QD-OLED电视最大77英寸_聚焦

2023-04-25

万达商管回应珠海万达商管招股书再度失效:将尽快提交更新材料

2023-04-25

OpenAI 已向美国专利商标局申请 GPT 商标

2023-04-25

静安现代戏剧谷论坛:城市孕育文学和戏剧 世界短讯

2023-04-25

全球快讯:新的ResidentEvil4RemakeUpdate1.05解决了XSX上的纹理问题并使死区响应更快

2023-04-25

冠军欠条是什么梗-天天热讯

2023-04-25

ST桃花坞2022年净利16.35万 同比扭亏为盈 减少应收账款保理业务

2023-04-25

当前消息!医保卡怎么共享给家人?家庭成员共享如何绑定?

2023-04-25

多家上市银行净息差跌破“警戒线” 7家净息差低于1.8%

2023-04-25

帕夫柳琴科狙击手完整版_帕夫柳琴科 环球视讯

2023-04-25

每日头条!媒体融合加速 主流舆论壮大——2023中国网络媒体论坛综述

2023-04-25

当前速递!帕金森不止手抖 关注“看不见”的症状

2023-04-25

田东出席朔州师专2023届毕业生就业双向选择洽谈会 焦点日报

2023-04-25

湖北崇阳县第十二届提琴戏剧节开幕

2023-04-25

资阳重拳出击 缓解“停车难”治理“停车乱”

2023-04-25

滚动:非遗 | 杭州市非遗叠石技艺保护三进活动启动

2023-04-25

存活在奥特曼的世界

2023-04-25

通胀高企 美国部分民众减少或停止存储退休金 实时

2023-04-25

铜陵市郊区老洲镇:“三聚焦”推动乡镇党校建设工作

2023-04-25

中国燃气与海康威视达成战略合作

2023-04-25

报道:亚洲最大,圆满成功!

2023-04-25

大众探岳及探岳X推黑光选装包 售价888元 环球热门

2023-04-25

减资和注销两种股权转让税收差异分析

2023-04-25

加快托育领域立法确保幼有所育 专家建议细化标准助力家庭托育点合规“带娃” 天天关注

2023-04-25

就业形势逐步恢复、总体稳定-全球即时看

2023-04-25

4月24日基金净值:建信兴润一年持有混合最新净值0.7797,跌0.7%

2023-04-25

快消息!BLACKPINK巡演收入1000亿韩元 成为历代女团第一

2023-04-25

当前快讯:回暖之旅即将开启!5月前还有两股冷空气

2023-04-25

SMM钴锂晨会纪要:终端车企销量增势较为稳定 正极材料需求量仍不明朗

2023-04-25

通化县:开展“断卡”宣传,共建“无诈”校园

2023-04-25

3个月,超4700亿元资金外流!这一巨头,屡曝金融丑闻

2023-04-25

全球最快宽带在北京联通:1秒钟1部4K蓝光-环球播资讯

2023-04-25

当前焦点!有趣的事作文300字_有趣的事作文

2023-04-25

环球焦点!借助银可提高抗生素效力|创新连线·俄罗斯

2023-04-25

好想哭!中国龙芯之母生前心愿竟然是……

2023-04-25

周琦、曾凡博入选中国男篮短训营_环球快资讯

2023-04-25

本市公共建筑将设五级能效等级-今日播报

2023-04-25

英雄联盟之巅峰时代_关于英雄联盟之巅峰时代的简介-前沿资讯

2023-04-25

章昊“创造历史”,乐华开始得分 当前报道

2023-04-25

酬乐天扬州初逢席上见赠原文_醉乐天扬州初逢席上见赠

2023-04-25

天天微资讯!京杭大运河杭州段一船舶因破损进水沉没 无人员伤亡

2023-04-25

能源局部署加强新型电力系统稳定工作 专家:电网韧性有望加强_全球热资讯

2023-04-25

世界微速讯:2023年贵州遵义高级会计师准考证打印时间:4月28日-5月12日

2023-04-25

头部数藏平台ibox或涉诈骗被立案 背后股东多数为纸贵科技高管 世界报资讯

2023-04-25

移远通信:2022年净利同比增73.94% 拟10转4派10元_全球时快讯

2023-04-25

国家企业信用工商网_国家企业工信网

2023-04-25

两会热点内容2022心得体会_两会热点内容

2023-04-25

新疆自然资源厅回应61亿天价锂矿违约:到期了不交钱,只有取消资格 天天简讯

2023-04-25

大千生态股东户数增加85户,户均持股25.03万元

2023-04-25

又撒币啦!支付宝线下实体店红包每天可领一次! 焦点消息

2023-04-25

马竞官方:萨维奇趾骨骨折,复出时间待定

2023-04-25

焦点简讯:金融科技领域部级奖项出炉 支付宝获金融科技发展奖二等奖

2023-04-24

拉玛西亚天赋天花板?15岁进入巴萨替补席,亚马尔会是新梅西?|每日信息

2023-04-24

社会组织助力,增城推动孤独症家庭社会融合

2023-04-24

世界观点:感冒千万别忽视!2023“知感冒·防流感”公益行株洲站将启动

2023-04-24

【全球速看料】电脑联网怎么连接无线网不知道密码(电脑联网怎么连)

2023-04-24

每日热门:传闻:巴萨和雷恩天才攻击手杜埃联系在一起

2023-04-24

【环球财经】恢复向好的中国经济助力马来西亚应对全球经济不确定性|当前信息

2023-04-24

2035年实现价值链碳中和,宁德时代发起锂电行业大规模绿色行动

2023-04-24

美媒:美军陷征兵危机 民众信任度骤降

2023-04-24

主营业务逐步恢复 吉峰科技2022年扣非净利同比增加120.30% 焦点关注

2023-04-24

环球微头条丨佳力图:公司系华为供应商,主要为华为提供数据中心温控节能设备

2023-04-24

白字开头的成语有什么(白字开头的成语) 全球热推荐

2023-04-24

男方不肯离婚女方怎么办

2023-04-24

国泰君安:可转债相关信息请关注公司于上交所网站披露的相关公告

2023-04-24

让“五个一百”在时代洪流中奔涌

2023-04-24

南山智尚: 关于召开2022年年度股东大会的通知|世界今头条

2023-04-24

每日播报!罗马举行建城2776年庆祝游行

2023-04-24

兰州周大福黄金价格今天多少一克(2023年4月24日)

2023-04-24

“V谷云石”亮相中国V谷!马栏山新媒体中心项目全面封顶

2023-04-24

环球观点:刘京说车丨秦统天下 颠覆燃油!秦PLUS EV 2023冠军版石家庄上

2023-04-24

冷凝水管图纸图标_CAD图纸上冷凝水管和冷媒管怎么区分

2023-04-24

专家门诊阳性者多是此前未感染的 网友:群众都说自己二阳,专家说你是第一次

2023-04-24

如何用蜡纸制作压花卡_学生女朋友生日送什么礼物好

2023-04-24

世界速看:山姆会员店售卖不合格积木被罚

2023-04-24

郑州铁路“五一”假期单日发送旅客或将超80万人 将加大运力应对

2023-04-24

世界快看:2023年4月23日山东省亚磷酸价格最新行情预测

2023-04-24

函授的是什么_函授是什么学习形式_焦点要闻

2023-04-24

C光大同4月24日盘中跌幅达5%

2023-04-24

涨停雷达:水泥个股异动 冀东装备触及涨停|环球热门

2023-04-24

微速讯:当五五购物节遇上分时步行街,长宁警方全力守护夜巷烟火气

2023-04-24

南京医科大学是野鸡大学吗(南京医科大学是正规大学吗)

2023-04-24

临颍陈庄乡:“五个一”助推食品安全城市创建 环球焦点

2023-04-24

新西兰克马德克群岛发生7.2级地震 震源深度30千米

2023-04-24

与未来对话:江铃汽车新能源重磅亮相上海车展

2023-04-24

面包:别觉得以某种方式打球 然后冠军球队就不会让你付出代价 世界视点

2023-04-24

全球实时:雅诗阁一季度新签逾4000套单元 提前实现全球16万套管理目标

2023-04-24

即时焦点:如东县冶金等工业企业主要负责人和安全管理人员集中培训

2023-04-24

霍顿房屋,对中国地产股的启示 焦点要闻

2023-04-24

歹徒持假枪抢劫阿根廷一华人超市 不料被店主刺死-环球热推荐

2023-04-24

巨轮智能董秘回复:谢谢您的宝贵意见,公司会根据市场需求和自身发展战略做好业务产品的规划 环球今日讯

2023-04-24

全球快播:mike_jackson

2023-04-24

可乐姜汤的做法和功效_怎样做可乐姜汤和它的功效-环球热资讯

2023-04-24

《云襄传》《楚乔传》等网文创作者现身 分享“IP改编的创作困境与发展前景”|每日简讯

2023-04-24

看热讯:最是读书能致远

2023-04-24

“33号书院”已服务读者11万人次 焦点资讯

2023-04-24

环球最资讯丨孙颖莎为何0-4爆冷丢冠?陈梦实话实说,邓亚萍这番话一针见血

2023-04-24

高邮市规划局_关于高邮市规划局简述

2023-04-24

2023年“海高赛”报名通道今开启-天天即时看

2023-04-24

当前视点!专访:“零和博弈只会进一步孤立和削弱美国”——访巴西瓦加斯基金会金融专家夏华声

2023-04-24

全球头条:周末汇丰银行外汇牌价表2023年4月23日 人民币对美元汇率多少?

2023-04-24

ipa证书怎么弄(ipa证书)-世界观速讯

2023-04-24

暄席_对于暄席简单介绍

2023-04-24

水浒传英雄好汉的绰号总结 水浒传英雄好汉的绰号

2023-04-24

梦回大清最后结局_梦回大清 主要人物的结局是神马-全球观焦点

2023-04-24

鸣沙山简介

2023-04-24

天天视讯!苏能股份:拟约15亿元投建徐州泉山经济开发区全域新能源光伏项目

2023-04-24

怎么存款利息高?别只懂得存国有银行定存,4大方法有望拿高息

2023-04-23

下修业绩预期 天邦食品预计2022年净利4.5亿-5.5亿元_全球今日讯

2023-04-23

旬阳市棕溪中心卫生院:预防先行 守护校园健康

2023-04-23

徐州:推进以数字人民币发放行政事业单位工作人员部分工资

2023-04-23

全球即时:铺就乡村振兴新“稻”路 沅江大米品牌论坛暨创意营销大赛在长沙启幕

2023-04-23

梅西回巴萨4大实锤曝光:孩子从法国学校退学,参加7月美国季前赛

2023-04-23

海螺新材聘任丁小朋为证券事务代表|今日精选

2023-04-23

每日聚焦:西安城六区保障性住房申请进度查询

2023-04-23

头条:【园区企业】六方云获评“2022年软件和信息技术服务名牌企业”

2023-04-23

【世界报资讯】官方回应金庸图书馆“去留”:保护利用方案正在优化

2023-04-23

心经集成

2023-04-23

「中国一尘投资」严控法拍房购房资格!天津三部门发文联动审核,法拍规则与地方限购同步

2023-04-23

众生药业:公司眼科产品包括:复方血栓通系列产品、普拉洛芬滴眼液、盐酸氮斯汀滴眼液等 环球最资讯

2023-04-23

天天快递投诉电话官方网站_天天快递投诉电话官方-当前动态

2023-04-23

我为书狂|倒计时的尽头是什么?川大教授变身《三体》汪淼 每日焦点

2023-04-23

iso模式和u盘模式有什么区别 iso模式u盘启动有什么不同

2023-04-23

央行召开2023年会计财务工作电视会议 全球即时看

2023-04-23

上交所资本市场服务周广东行正式启动 环球最新

2023-04-23

点赞!东营区牛庄镇入选特色专业镇试点名单

2023-04-23

我的世界惊变100天_我的世界贴吧

2023-04-23

微头条丨河北大厂县检察院落实“河长+检察长”工作机制 对县域内潮白河、鲍邱河开展联合巡查

2023-04-23

全球信息:成都街舞展演!燃炸全场!

2023-04-23

开封示范区举办4·23世界读书日“绿书签行动”暨版权宣传活动 世界百事通

2023-04-23

德岛漩涡头球整体越过门线 主裁示意没有进球

2023-04-23

房产保全能行多久?-世界即时

2023-04-23

右玉在并开展文旅产业招商推介活动-报资讯

2023-04-23

每日看点!新股解读|内修品牌+渠道+产品开发 看好珍酒李渡(06979)长期发展势能

2023-04-23

WTT冠军赛澳门站|马龙王楚钦会师决赛,孙颖莎24连胜被终结

2023-04-23

绪方精次_关于绪方精次介绍 世界观热点

2023-04-23