揭开RAG的神秘面纱:重新定义信息检索的革命性技术
随着人工智能技术的快速发展,检索增强生成(RAG)作为一种结合检索与生成的创新技术,正在重新定义信息检索的方式。本文深入探讨了RAG的核心原理及其在实际应用中的挑战与解决方案。文章首先分析了通用大模型在知识局限性、幻觉问题和数据安全性等方面的不足,随后详细介绍了RAG通过“检索+生成”模式如何有效解决这些问题。具体而言,RAG利用向量数据库高效存储与检索目标知识,并结合大模型生成合理答案。此外,文章还对RAG的关键技术进行了全面解析,包括文本清洗、文本切块、向量嵌入、召回优化及提示词工程等环节。最后,针对RAG系统的召回效果与模型回答质量,本文提出了多种评估方法,为实际开发提供了重要参考。通过本文,读者可以全面了解RAG技术的原理、实现路径及其在信息检索领域的革命性意义。
-
知识的局限性:模型的知识完全来源于其训练数据,而现有主流大模型(如 ChatGPT、文心一言、通义千问)的训练集主要基于公开网络数据,对于实时性、非公开或离线数据则无法获取,因此无从掌握。
-
幻觉问题:所有 AI 模型的底层原理基于数学概率,其输出本质上是一系列数值运算,大模型亦是如此。这使得它在缺乏某些知识或不擅长的场景下,可能会给出不准确的回答。而这种幻觉问题的辨别较为困难,因为使用者需要具备相关领域的知识。
-
数据安全性:对企业而言,数据安全至关重要。没有企业愿意承担数据泄露的风险,因此不愿将私有数据上传至第三方平台进行训练。这使得完全依赖通用大模型的应用方案在数据安全与效果之间不得不进行权衡。
而RAG是解决上述问题的一套有效方案。
RAG核心技术
▐ 整体流程
RAG 的架构如图所示。简单来说,RAG 通过检索获取相关知识,并将其融入 Prompt,使大模型能够参考这些知识,从而给出合理回答。因此,RAG 的核心可以理解为“检索 + 生成”。其中,检索主要利用向量数据库的高效存储和检索能力,召回目标知识;生成则依靠大模型和 Prompt 工程,合理运用召回的知识,生成目标答案。
-
数据预阶段:文本清洗->文本切块->向量嵌入(embedding)->向量存储 -
应用阶段:用户提问->数据召回->注入Prompt->LLM生成答案->效果评估
▐ 数据预处理
-
文本清洗
-
去除杂音:去掉文本中的无关信息或者噪声,比如多余的空格、HTML 标签和特殊符号等。 -
标准化格式:将文本转换为统一的格式,如将所有字符转为小写,或者统一日期、数字的表示。 -
处理标点符号和分词:处理或移除不必要的标点符号,并对文本进行适当的分词处理。 -
去除停用词:移除那些对语义没有特别贡献的常用词汇,例如“的”、“在”、“而”等。 -
拼写纠错:纠正文本中的拼写错误,以确保文本的准确性和一致性。 -
词干提取和词形还原:将词语简化为词干或者词根形式,以减少词汇的多样性并保持语义的一致性。
这些清洗步骤有助于提高文本质量,使其更适合检索系统和生成模型的处理,从而提升最终生成结果的准确性和相关性。在 RAG 框架中,经过清洗的文本将用于更高效的信息检索和生成任务。
-
文本切块
在构建向量数据库的过程中,首先需要将包含知识的长文本拆分为较小的片段,然后通过文本向量化模型进行处理并存储。虽然文本切分看似简单,但它对大模型最终回答的效果有显著影响。接下来,我们将讨论两种情况:文本切分过长和文本切分过短。
文本切块过长
在 Transformer 架构中,文本被表示为向量,其中每个词对应一个特定的向量。为了获取一段文本的整体向量表示,常见的方法是对句中的词向量求平均。然而,当句子长度过长时,平均化过程可能会导致细节和语义信息的丢失,进而降低召回的准确率。此外,在使用大型模型进行检索和生成(RAG)任务时,如果模型在总结文本内容方面的能力较弱,长文本的召回会限制可供大模型分析的文本块数量。长文本的向量化本身就容易丢失信息,如果同时减少召回文本的数量,无法涵盖有用知识点的风险就会增加,最终可能影响大模型生成答案的质量。
文本切块过短
对短文本进行向量化更有利于保留文本中细粒度的语义信息。然而,这种方式也存在一些问题,比如容易丢失段落和文档层面的主题信息,以及跨段落的上下文信息。对大模型输入这些碎片化的文本块,不利于大模型进行总结。
通过上述分析,我们可以得出一个结论:为向量数据库中的文本采用合适的切分策略,能够确保召回的内容更契合用户的查询意图,从而使大模型更准确地生成正确答案。接下来,我们将介绍几种常见的文本切块策略。需要特别指出的是,并不存在所谓的“最佳”切块策略,选择时需要根据具体应用场景进行分析和实验。
固定大小文本切块
固定大小的文本切块是一种简单的文本分割方法,只需确定每个块的大小即可。然而,在实际使用中,为了减少块与块之间的上下文信息丢失,最好让块之间有些重叠。此外,仅仅按照字数来截断文本而不考虑段落或句子内部的连贯性,可能会影响文本嵌入的效果。因此,为了尽量保持上下文的完整性,文本块的大小可以稍微偏离预设的大小。
特殊格式文本切块
有时候需要对诸如 HTML、Markdown、LaTeX等具有特殊内在结构的文本进行切块。在进行切块时,应充分考虑其结构信息,以减少因文本切块而导致的上下文信息损失。
基于深度学习模型的文本切块
为了让预训练语言模型学习两个句子之间的关系,我们可以在预训练过程中设置一个简单的任务:给模型输入两个句子,预测第二个句子是否是第一个句子的续接句。基于这个方法,可以设计一种简单的文本切分策略,即以句子为最小单位。在完整的文本中,通过滑动窗口依次将相邻的两个句子输入到预训练语言模型进行预测。如果预测结果显示这两个句子之间的关系较弱,那么就在这里进行文本切分。
目前基于预训练语言模型的优化也比较多,比如Cross-Segment模型,该方法充分利用了更长的上下文信息,预测效率也有提升。首先,利用 BERT 模型分别获取每个句子的向量表示。然后,将连续的多个句子的向量表示同时输入到另一个 BERT 或 LSTM 模型中,一次性预测每个句子是否文本分段的边界。又比如SeqModel 利用 BERT 对多个句子同时编码,建模了更长的上下文之间的依赖关系之后再计算句向量。还有达摩院提出的以BERT为底座的ROM模型。
▐ 向量嵌入
-
向量索引技术
向量嵌入只是从图像、文本和音频转换而来的数值表示。简单来说,针对每个项目创建一个单独的数学向量,捕捉该项目的语义或特征。这些向量嵌入更容易被计算系统理解,并与机器学习模型兼容,以理解不同项目之间的关系和相似性。
用于存储这些嵌入向量的数据库称为向量数据库。这些数据库利用嵌入的数学属性,将相似的项目存储在一起。使用不同的技术来将相似的向量存储在一起,将不相似的向量分开。这些就是向量索引技术。
什么是特征向量
向量是一种将实体和应用代数化的表示。向量将实体间的关系抽象成向量空间中的距离,距离的远近代表相似程度。例如:身高、年龄、性别、地域等。
除了图像、文本和音频,理论上所有包含文本在内的任意数据都可以向量化,引用一句网上的热门词就是「万物皆可Embedding」。
什么是向量索引
向量索引通过将数据表示为向量,并构建高效的索引结构,可以实现快速的相似性搜索和匹配,提高数据检索和匹配的效率。
什么是距离计算
在实际的应用工程应用场景中,绝大多数使用的浮点型计算,故下面核心介绍浮点型计算距离。
内积距离
内积距离计算的是两个向量在方向上的差异,夹角越小越相似,因此内积值越大越相似。
两条向量内积距离的计算公式为:
内积更适合计算向量的方向而不是大小,通常用于推荐场景。
内积在几何意义上是计算一条向量在另一条向量上的垂直投影长度。
欧式距离
欧氏距离计算的是两点之间最短的直线距离,距离值越小越相似。
欧氏距离的计算公式为:
欧氏距离是最常用的距离计算方式之一,应用广泛,适合数据完整,数据量纲统一的场景。
欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异。
余弦距离
余弦距离计算的是两个向量之间的夹角余弦值,夹角越小越相似,因此余弦相似度值越大越相似。
基础算法
上述介绍了向量检索的计算相似度方式,接下去就要研究如何加快检索速度。向量检索的本质是近似近邻搜索(ANNS),尽可能减小查询向量的搜索范围,从而提高查询速度,目前业界的近邻搜索算法主要分为基于树、图、量化和哈希四类。考虑到本文核心讲解RAG中的工程技术,故本文对此不做过多介绍,有兴趣的读取可以自行深入了解学习。
稠密&稀疏向量检索模型
稠密向量检索模型
-
向量表示:每个数据点被表示为一个长度较小、但密集的数值向量。 -
搜索方式:通过计算向量间的距离(如余弦相似度、欧氏距离)来进行匹配和检索。 -
优点:能够捕捉复杂的语义关系,表现出色的泛化能力,适合语义相似度计算。 -
缺点:模型训练需要大量数据和计算资源;搜索阶段需要进行高效的近似最近邻搜索。
稀疏向量检索模型
特点:
-
向量表示:通用的是利用词项的频率来表示向量,向量的维度非常高(通常和整个词汇表的大小一样),但其中大部分维度的值为零。 -
搜索方式:通过倒排索引等结构来快速检索和匹配文档。 -
优点:成熟稳定,解释性强,索引和检索效率高。 -
缺点:难以捕捉词语间的复杂语义关系,可能对词汇的同义关系不敏感。
-
区别总结
-
表示方式:稠密模型使用低维稠密向量,稀疏模型使用高维稀疏向量。
-
语义能力:稠密模型更擅长捕捉深层语义,稀疏模型在简单文本匹配上更有效。
-
计算资源:稠密模型通常需要更多计算资源用于训练和检索,稀疏模型则通常拥有更快速的索引和检索过程。
-
应用场景:稠密模型适合需要深层语义理解的任务,稀疏模型则适用于快速精确匹配场景。
▐ 向量存储
-
向量数据库选型
向量数据库
向量存储库非常适合存储文本、图像、音频等非结构化数据,并根据语义相似性搜索数据。向量模型用于为数据库中存储的数据生成向量嵌入。根据数据类型、任务和向量模型的不同,数据需要被切成更小的块。例如,如果要存储文本数据,则可以将数据切分成句子或段落。如果要存储代码,则可以将数据切分成函数或类。如果选择提供更多的上下文片段,则可以使用更小的块。将数据切分成块后,可以为每个块生成向量并将其存储在向量存储库中。在最简单的RAG系统中,当向量存储库接收到用户查询时,查询也会被转换为一个向量,向量存储库会返回与查询最相似的候选数据。
举个例子,在阿里云上,Hologres和ADB都是支持支持向量存储和索引的。
-
Hologres可参考Hologres官方文档。
-
ADB可参考ADB官方文档
搜索引擎
在RAG系统中,可以从通用搜索引擎(如Google、Bing等)或内部搜索引擎(如Elasticsearch、Solr等)中检索数据。在RAG架构的检索阶段,使用问题/任务详细信息查询搜索引擎,搜索引擎返回最相关的文档。搜索引擎对于从网络中检索数据和使用关键字搜索数据非常有用。
图数据库
图数据库以节点和边的形式存储数据。它适用于存储结构化数据,如表格、文档等,并使用数据之间的关系搜索数据。当对图数据库进行查询时,图数据库返回与查询节点相连的节点。这种使用知识图谱的检索对于完成像问题回答这样的任务非常有用,其中答案是人或实体。
▐ 召回优化
在向量召回的过程中会存在一些问题,比如文本切块会损失全局信息、用户查询内容描述不准确等,这些问题会影响召回文本的质量。下面将介绍一些提高向量召回效果的方法。
改写和扩充(前置)
短文本全局信息增强(前置)
-
长文本的前三句话。对于长文本来说,总分结构比较常见,文本开头往往包含段文本的主旨。
-
长文本的标题。适用于长文本是一个带有标题的文档。标题通常对文本内容高度概括,包含相当准确的全局信息。
-
长文本的关键词。使用 TopicRank 算法从长文本中提取出 10 个关键词。
在构建向量数据库时,利用多种向量来表示同一段文本是有益的。以文本A为例,我们不仅可以利用完整的A生成向量,还可以通过其子集或总结句等方式生成“补充向量”。在RAG(检索增强生成)过程中,召回任意“补充向量”所对应的文本后,我们并不是直接将其输入到大型语言模型(LLM)中,而是将文本A的内容作为输入。这种方法解耦了召回内容与输入LLM的内容之间的相等关系。可以利用以下三种方式生成“补充向量”:
-
文本切块:将原始文本进一步拆分为更小的块,并为每个块生成向量存入数据库中。这种方式可以在召回时提高对更细粒度语义的关注,实际上是上一节中介绍的“父文本检索”策略。
-
文档摘要:通过LLM的能力生成文档的摘要,作为补充向量。
-
假设性问题:利用大模型的能力,根据文本内容生成相关问题。“用问题召回问题”比“用问题召回答案”更为简单。
文本切块后可以继续生成“补充向量”。在生成小块文本时,需要将其对应的大块文本ID保存在元数据中,并保持大块文本ID与内容的映射关系。类似地,利用文档摘要和假设性问题生成“补充向量”也是可以轻松实现的。
召回文本重排序(后置)
文本向量化是将文本数据转换成数值向量的过程。常见的方法有词袋模型(Bag of Words)、词嵌入(Word Embeddings,如Word2Vec, GloVe)和TF-IDF等。文本向量化模型进行召回的最大优势是高效性,每个文本片段只需要进行一次向量化,并且在召回相似文本时只需要进行计算量较小的向量运算。此外,现代向量数据库还集成了倒排索引、乘积量化等高效的检索算法,进一步加快了检索速度。然而,这种方法的召回精度不高,因为包含知识的文本片段和用户查询文本在二者向量化时会产生少量的“交互”,并且在文本向量化过程中也会有一定的信息损失。如果能够同时将这两类文本输入到一个交叉编码器中进行文本相似性预测,不仅可以增加更多的文本上下文“交互”,还能减少信息损失。交叉编码器是一个深度学习模型。
交叉编码通常用于处理交互信息,尤其是在对话系统和问答系统中。它结合了文本的上下文信息,以编码多个输入文本之间的交互。但交叉编码器的最大缺陷是计算量大。在实际场景中,包含知识的候选文本片段数以万计,如果有 n 个候选文本片段,若想要使用交叉编码器进行相关文本召回,则需要将用户查询文本逐一与每个候选文本拼接,分别输入交叉编码器中进行相似度分值预测并排序,选出分值最高的若干候选文本,这个过程需要调用深度学习模型进行 n 次预测。
在大模型的检索增强生成(RAG)场景中,结合文本向量化模型和交叉编码器进行两阶段的文本召回是一种非常实际且有效的策略。这种方法通常包括以下几个步骤:
-
文本向量化(初步检索):首先,使用文本向量化模型(如双塔模型或BERT等编码器)将查询和文档进行编码,并计算它们之间的相似性。这一步可以高效地从大量候选文档中筛选出一小部分最相关的文档。这种方式计算量较小,可以快速处理大规模数据。
-
交叉编码(精确排序):在初步检索阶段获得的候选文档中,使用更精确但计算量较大的交叉编码器(如BERT-based交叉编码)进行精细排序。交叉编码器同时考虑查询和候选文档的交互,可以提供更精确的相似性比较。
通过这种两阶段的方法,RAG系统能够在保持高效率的同时,提高检索结果的准确性。初步检索阶段迅速筛选掉大量不相关文档,而精确排序阶段则更关注少量候选的精确性。这种方式有效结合了向量化模型的速度优势和交叉编码器的精度优势,是在处理大规模文档集合时一个非常合理的策略。这种多阶段排序的思想在互联网行业的搜索、推荐、广告等业务场景被广泛使用。
召回内容上下文扩充(后置)
在 RAG 场景下,通常将从向量数据库中召回的文本直接输入到大型语言模型 (LLM) 中。然而,由于向量化模型在编码长文本时可能导致信息的显著丢失,因此从向量数据库中召回的通常是短文本。但对于 LLM 来说,能够提供连贯性和更多上下文信息的长文本会有助于生成更优质的答案。直接召回长文本可能具有挑战性,不过可以通过设计一些人工策略来扩展召回的内容,以打破“召回内容和输入给 LLM 的内容相等”的限制,从而解决向量化模型需要短文本而 LLM 需要长文本的矛盾。
多检索器融合(后置)
结合元数据召回(后置)
▐ 提示词工程
提示词工程(Prompt Engineering)是一种在人工智能和自然语言处理领域中开发和设计提示词(Prompts)的技术,旨在引导大型语言模型产生特定输出。通过精心构建和优化提示词,用户可以更有效地获得所需答案、生成文本或执行其他自然语言处理任务。
提示词工程的关键在于找到合适的语言和结构,以清晰地表达问题或任务,使模型能够更准确地理解并给出相关回应。这可能涉及反复试验、调整提示词的细节,并利用对模型行为的理解来优化结果。
描述答案的标注
在与 LLM 交互时,最好在提示中清楚地描述所期望的答案标准。不要假设 LLM 具有人类相似的理解能力,也不要期望它一定会以人类的方式进行回答。使用 prompt 与 LLM 交互时,内容通常会显得有些“啰嗦”,这是正常的。但要注意,每个关于答案标准的描述应与所期望的目标密切相关,避免冗余信息,以降低 LLM 理解的难度。例如,在提问“北京有哪些景点”时,可以添加“请不要过多介绍景点”来简化 ChatGPT 的输出结果。
设置兜底的回答方式
在某些情况下,向量化模型可能无法准确召回与用户问题相关的文本,甚至可能与用户问题几乎没有关联。如果让 LLM 根据这些召回的文本生成答案,可能会得到不相关或不符合事实的结果。因此,我们需要明确告知 LLM,如果上下文中没有与用户问题相关的答案,就不要强行生成。这样可以避免产生不准确或不相关的回答。
输入中加入问答实例
有时,我们很难通过语言准确描述一项任务。如果任务描述不清晰,或者问题本身复杂,就会导致语言模型产生歧义,从而严重影响回答的效果。在这种情况下,可以尝试在输入中增加一些问答示例,让语言模型自行领悟接下来应该执行的任务。一般来说,为语言模型提供问答示例是有益的。然而,需要注意的是,示例的数量、顺序以及与真实问题的相关性等因素都会影响语言模型的回答效果,这需要通过大量实践来确定。在提供示例时,尽量涵盖简单、困难与长尾等各种类型的示例。
设定输出格式
ChatGPT 等模型经过对话数据微调。在需要准确输出内容的场景中,有时可能会出现输出无用信息或过于口语化的情况,这不利于进一步提取所需内容。一种有效的解决方法是让 LLM 以 JSON 格式输出内容。如果效果不佳,可以尝试在提示中增加输出 JSON 的示例。有时,LLM 输出的 JSON 格式可能不够标准(例如,字典的键值没有引号,或冒号采用中文格式),无法直接使用 Python 的 JSON 包处理。这时,您可以借助正则表达式进行处理。如果不熟悉正则表达式,您可以直接向 ChatGPT 询问。
标识不同类型的内容
在撰写 Prompt 时,最好将任务描述、示例、引用文本等不同类型的内容用特殊符号隔开,以避免 LLM 在内容理解上产生歧义,同时便于用户对 Prompt 进行修改和维护。如果用户下达的指令与 Prompt 其他内容存在冲突,使用该技巧尤为重要。
指定扮演身份
在prompt中,告诉LLM所扮演的身份是什么,这可以帮助LLM确定接下来输出的内容和说话风格。
使用思维链
对于LLM来说,当它进行推理相关的任务时,要求它输出推理过程同样可以减少错误的发生。以计算一个简单的数学题为例,直接输出的答案可能是错误的。只有要求它逐步给出每一步的计算过程,才能得到正确的答案。LLM不仅在训练时可以通过增加计算量(训练更多数据)来提高效果,而且在推理过程中也可以做到这一点(输出更多内容)。
▐ 效果评估
-
召回环节评估
对于构建大模型中的RAG系统,召回阶段的效果对生成模型最终回答的质量至关重要。召回文本是否准确包含了用户问题对应的答案,直接影响到最终回答的准确性。因此,文本切块策略、向量化模型和召回策略等因素在这个过程中变得尤为重要。
为了确保召回效果的精确性,建立一套针对召回的评估流程,并对其各个环节进行持续优化,是非常必要的步骤。在评估中所需的数据通常是“问题 - 包含答案的文本块”这样的对照二元组。常见的评估指标包括命中率和平均倒数排名(Mean Reciprocal Rank, MRR)。
命中率用于衡量在召回的文本集合中出现包含答案的文本块的概率,具体来说,在单次召回中,其结果为“命中”或者“未命中”,而不考虑其排序。平均倒数排名则是一种用于评价搜索算法的简单指标,其计算方法是多次召回后,记录每次召回中包含答案的文本块在召回列表中的排名倒数,然后对这些排名倒数取平均值。
-
模型回答评估
(1) 选择题评估法
(2) 竞技场评估法
(3) 传统NLP指标评估法
(4) 向量化模型评估法
(5) LLM评估法
-
《大模型RAG实战》: https://book.douban.com/subject/37104428/ -
《RAG七十二式:2024年度RAG清单》:https://zhuanlan.zhihu.com/p/11979316894 -
《Proxima向量计算》:向量计算(Proxima)_实时数仓 Hologres(Hologres)-阿里云帮助中心
-
《淘宝搜索中语义向量检索技术》:https://zhuanlan.zhihu.com/p/409390150
我们来自淘天集团的价格平台技术。我们支撑大促 (双11、618 等)和日销业务;同时我们也直面竞对,深入参与淘宝好价、百亿补贴、聚划算等日销业务的价格心智打造。秉承“简单、开放、自驱”的技术文化,在使命与责任中互相成就,共同成长,践行让业务先赢,技术氛围浓郁。
本文分享自微信公众号 - 大淘宝技术(AlibabaMTT)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
玩转OurBMC第十七期:CXL协议基础知识串讲(下)
【栏目介绍:“玩转OurBMC”是OurBMC社区开创的知识分享类栏目,主要聚焦于社区和BMC全栈技术相关基础知识的分享,全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过“玩转OurBMC”栏目,帮助开发者们深入了解到社区文化、理念及特色,增进开发者对BMC全栈技术的理解。 欢迎各位关注“玩转OurBMC”栏目,共同探索OurBMC社区的精彩世界。同时,我们诚挚地邀请各位开发者向“玩转OurBMC”栏目投稿,共同学习进步,将栏目打造成为汇聚智慧、激发创意的知识园地。】 随着异构计算(CPU、GPU、FPGA、AI加速器)的普及,传统互连协议(如PCIe)在缓存一致性、内存共享和低延迟通信方面的局限性逐渐暴露。CXL(Compute Express Link)应运而生,其目标是构建一个统一的缓存一致性协议,支持CPU与加速器、内存扩展设备之间的高效协作。本文旨在为读者普及CXL协议的基础知识,助力其深入理解并有效运行这一技术。 CXL设备类型 CXL 定义了三种设备类型(Type1、Type2、Type3),每种类型支持不同的协议子集,适用于不同的硬件场景: 注:上图引...
- 下一篇
Node.js技术原理分析系列6——基于 V8 封装一个自己的 JavaScript 运行时
Node.js 是一个开源的、跨平台的JavaScript运行时环境,它允许开发者在服务器端运行JavaScript代码。Node.js 是基于Chrome V8引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应用程序、网络应用、命令行工具等。 本系列将分为9篇文章为大家介绍 Node.js 技术原理:从调试能力分析到内置模块新增,从性能分析工具 perf_hooks 的用法到 Chrome DevTools 的性能问题剖析,再到 ABI 稳定的理解、基于 V8 封装 JavaScript 运行时、模块加载方式探究、内置模块外置以及 Node.js addon 的全面解读等主题,每一篇都干货满满。 在上一节中我们探讨了 Node.js 中的 ABI 稳定相关内容,在本节中则主要分享《基于 V8 封装一个自己的 JavaScript 运行时》相关内容,本文内容为本系列第6篇,以下为正文内容。 前言 Google 推出的 V8 引擎,自 2008 年随 Chrome 浏览器面世以来,大幅提升了 JavaScript 性能,重新定义了其应用范畴。作为 Chrome 和 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作