以太坊钱包下载|ftl

作者: 以太坊钱包下载
2024-03-07 18:49:05

ftl和html的区别? - 知乎

ftl和html的区别? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册FTLftl和html的区别?ftl格式文件的具体用法和写法生成是怎么样的显示全部 ​关注者5被浏览19,346关注问题​写回答​邀请回答​好问题​添加评论​分享​1 个回答默认排序俊采星驰工程师​ 关注什么是页面静态化将动态页面转化成静态的html,降低与数据库的交互次数,提高页面的访问速度。就是服务器在请求来之前把已经固定好的东西先编译好了,等请求来了再动态的填数据,不要等请求来了什么都没做忙得半死。为什么要使用网页静态化技术网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力。而网页静态化比较适合大规模且相对变化不太频繁的数据。另外网页静态化还有利于SEO(搜索引擎优化)。将网页以纯静态化的形式展现,就可以使用Nginx这样的高性能的web服务器来部署。Nginx可以承载5万的并发,而Tomcat只有几百。利用第三方提供的模板引擎,生成对应的html,常见的模板引擎有:thymeleaf、freemarker、velocity。什么是FreeMarkerfreemarker是apache的一个开源的模板引擎,它基于模板来生成文本输出。freemaker模板引擎可以通过模板和数据生成静态化页面。 FreeMarker的优点1. 提前根据模板和数据生成静态化页面通过io流将页面写入到硬盘上, 访问的时候直接访问。就不用访问数据库了, 可以大大提高数据库的高并发读取性能,使数据库访问量降低.。2. 由于页面是提前生成好的, 所以访问速度快, 客户体验好。3. 由于html不需要tomcat解析浏览器可以直接访问, 所以给tomcat降低高并发访问压力。FreeMarker使用场景1.新闻网站新闻页面通过freemarker提前生成好2.电商网站商品详情页面通过freemarker提前生成好其原则是:页面有固定的样式, 并且一次生成多次读取,尽量少的改动数据FreeMarker运行过程原理图;模板:1.模板在freemarker中是以.ftl为后缀名的文件, 在模板中可以使用html标签, css, js,图片等静态资源。2.模板中可以使用el表达式获取数据, 但是无法使用jstl标签来判断和循环, 所以模板引擎会有自己的一套标签库供我们使用.数据:数据一般存储在关系型数据库或者redis或者mongodb中获取.发布于 2021-04-27 17:44​赞同 3​​1 条评论​分享​收藏​喜欢收起​​

FTL 入门-CSDN博客

>

FTL 入门-CSDN博客

FTL 入门

最新推荐文章于 2023-11-30 13:30:32 发布

涓涓细刘

最新推荐文章于 2023-11-30 13:30:32 发布

阅读量6.1w

收藏

105

点赞数

41

分类专栏:

FreeMarker

FreeMarker

专栏收录该内容

3 篇文章

2 订阅

订阅专栏

最近的项目中用的是ftl文件而不是传统的jsp,于是上网查了一下,感觉这是个好东西,于是准备记录下来。

以下摘自百度百科。

1.概念

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。

它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

FreeMarker是免费的,基于Apache许可证2.0版本发布。

其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。

在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。

与JSP相比,FreeMarker的一个优点在于不能轻易突破模板语言开始编写Java代码,因此降低了领域逻辑漏进视图层的危险几率。

但缺点是需要一点附加配置来将其平稳地集成到应用程序中,一些IDE(集成开发环境)可能并不完全支持它,当然还有开发者或设计者也许需要学习一门陌生的模板语言。

相关的JAR文件将要添加到WEB-INF/lib(在需要的时候,它们包含在Spring中)。

2.原理说明

2.1 举例

假设在一个应用系统中需要一个HTML页面如下:

    

        Welcome!

    

    

        

Welcome Big Joe!

        

Our latest product:

        green mouse!

    

页面中的用户名(即上面的“Big Joe”)是登录这个网页的访问者的名字, 并且最新产品的数据应该来自于数据库才能随时更新。

所以,不能直接在HTML页面中输入“Big Joe”、“greenmouse”及链接, 不能使用静态HTML代码。

可以使用要求输出的模板来解决,模板和静态页面是相同的,只是它会包含一些FreeMarker将它们变成动态内容的指令:

    

        Welcome!

    

    

        

Welcome ${user}!

        

Our latest product:

        ${latestProduct.name}!

    

2.2 原理

模板文件存放在Web服务器上,当有人来访问这个页面,FreeMarker就会介入执行,然后动态转换模板,用最新的数据内容替换模板中${...}的部分,之后将结果发送到访问者的Web浏览器中。

访问者的Web浏览器就会接收到例如第一个HTML示例那样的内容(也就是没有FreeMarker指令的HTML代码),访问者也不会察觉到服务器端使用的FreeMarker。

PS:存储在Web服务器端的模板文件是不会被修改的;替换也仅仅出现在Web服务器的响应中。

(root)

  |

  +- user = "Big Joe"

  |

  +- latestProduct

      |

      +- url = "products/greenmouse.html"

      |

      +- name = "green mouse"

3.基本语法

3.1语法概述

3.1.1   ${...}:FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式被称为interpolation(插值)。

3.1.2   注释:注释和HTML的注释也很相似,但是它们使用<#-- and -->来标识。不像HTML注释那样,FTL注释不会出现在输出中(不出现在访问者的页面中),因为FreeMarker会跳过它们。

3.1.3   FTL标签(FreeMarker模板的语言标签):FTL标签和HTML标签有一些相似之处,但是它们是FreeMarker的指令,是不会在输出中打印的。这些标签的名字以#开头。(用户自定义的FTL标签则需要使用@来代替#)

3.2指令详解

3.2.1   if else

<#if condition>

    ...

<#elseif condition2>

    ...

<#elseif condition3>

    ...

<#else>

    ...

if、elseif和else指令可以用来条件判断是否越过模板的一个部分。

condition必须计算成布尔值,否则错误将会中止模板处理。

elseif和else必须出现在if内部(也就是在if的开始标签和结束标签之间)。

if中可以包含任意数量的elseif(包括0个),而结束时else也是可选的。

3.2.2   list

假设 users 包含['Joe', 'Kate', 'Fred'] 序列:

<#list users as user>

    

${user}

 

输出:

    

Joe

    

Kate

    

Fred

list指令执行在list开始标签和list结束标签(list中间的部分)之间的代码,对于在序列(或集合)中每个值指定为它的第一个参数。

对于每次迭代,循环变量将会存储当前项的值。循环变量仅仅存在于list标签体内。

而且从循环中调用的宏/函数不会看到它(就像它只是局部变量一样)。

<#list>与<#else>、<#sep>组合是可选的,而且仅从FreeMarker 2.3.23版本开始支持。

3.2.3   include

将版权信息单独存放在页面文件 copyright_footer.html 中:


    Copyright (c) 2000 Baidu Inc,

    

    All Rights Reserved.

 

当需要用到这个文件时,可以使用 include 指令来插入:

    

        Test page

    

    

        

Test page

        

Blah blah...

        <#include "/copyright_footer.html">

    

include可以在模板中插入另外一个FreeMarker模板文件(由路径参数指定)。

被包含模板的输出格式是在include标签出现的位置插入的。被包含的文件和包含它的模板共享变量,就像是被复制粘贴进去的一样。

include指令不能由被包含文件的内容所替代,它只是当FreeMarker每次在模板处理期间到达include指令时处理被包含的文件。

所以对于如果include在list循环之中的例子,可以为每个循环周期内指定不同的文件名。

3.3 内建函数

 

内建函数很像子变量(也像Java中的方法),它们并不是数据模型中的东西,是FreeMarker在数值上添加的。

为了清晰子变量是哪部分,使用?(问号)代替,.(点)来访问它们。

常用内建函数的示例:

user?html给出user的HTML转义版本,比如&会由&来代替。user?upper_case给出user值的大写版本(比如“JOHN DOE”来替代“John Doe”)animal.name?cap_first给出animal.name的首字母大写版本(比如“Mouse”来替代“mouse”)user?length给出user值中字符的数量(对于“John Doe”来说就是8)animals?size给出animals序列中项目的个数如果在<#list animals as animal>和对应的标签中:

animal?index给出了在animals中基于0开始的animal的索引值animal?counter也像index,但是给出的是基于1的索引值animal?item_parity基于当前计数的奇偶性,给出字符串“odd”或“even”。在给不同行着色时非常有用,比如在中。

一些内建函数需要参数来指定行为,比如:

animal.protected?string("Y", "N")基于animal.protected的布尔值来返回字符串“Y”或“N”。animal?item_cycle('lightRow','darkRow')是item_parity更为常用的变体形式。fruits?join(", ")通过连接所有项,将列表转换为字符串,在每个项之间插入参数分隔符(比如“orange,banana”)user?starts_with("J")根据user的首字母是否是“J”返回布尔值true或false。

内建函数应用可以链式操作,比如user?upper_case?html会先转换用户名到大写形式,之后再进行HTML转义,和链式使用.(点)一样。

3.4  空变量

数据模型中经常会有可选的变量(有时并不存在)。

除了一些人为原因导致失误外,FreeMarker不能引用不存在的变量,除非明确地告诉它当变量不存在时如何处理。

如下两种典型的处理方法:

这部分对程序员而言:一个不存在的变量和一个是null值的变量,对于FreeMarker来说是一样的,所以这里所指的“丢失”包含这两种情况。

不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况,通过在变量名后面跟着一个 !(感叹号)和默认值。

像下面的这个例子,当user不存在于数据模型时,模板将会将user的值表示为字符串 “visitor”。(当 user 存在时,模板就会表现出 ${user} 的值):

Welcome ${user!"visitor"}!

也可以在变量名后面通过放置??来询问一个变量是否存在。将它和if指令合并,那么如果user变量不存在的话将会忽略整个问候的代码段:

<#if user??>

    

Welcome ${user}!

关于多级访问的变量,比如 animals.python.price,书写代码:animals.python.price!0当且仅当animals.python永远存在,而仅仅最后一个子变量price可能不存在时是正确的(这种情况下假设价格是0)。如果 animals或python不存在,那么模板处理过程将会以“未定义的变量”错误而停止。为了防止这种情况的发生, 可以如下这样来编写代码 (animals.python.price)!0。这种情况就是说animals或python不存在时,表达式的结果是 0。对于??也是同样用来的处理这种逻辑的;将animals.python.price??对比(animals.python.price)??来看。

优惠劵

涓涓细刘

关注

关注

41

点赞

105

收藏

觉得还不错?

一键收藏

知道了

1

评论

FTL 入门

最近的项目中用的是ftl文件而不是传统的jsp,于是上网查了一下,感觉这是个好东西,于是准备记录下来。以下摘自百度百科。1.概念FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可

复制链接

扫一扫

专栏目录

FTL介绍 -- FTL映射

qq_29044159的博客

06-08

1519

FTL介绍 -- FTL映射

存储技术FTL基础知识学习1

u011919377的博客

02-18

5181

有参考大神的博客和网页,,如果涉及侵权,请联系我,我删帖!!!

一.基本理论

1.FTL(Flash translation layer)由来:

闪存的读写单位为页,而页的大小一般为4KB或8KB,但我们的操作系统读写数据是按HDD(硬盘)的扇区尺寸进行的(512Byte(字节)),更麻烦的是闪存擦除以块作单位,而且未擦除就无法写入,这导致操作系统现在使用的文件系统根本无法管理SSD(...

1 条评论

您还未登录,请先

登录

后发表或查看评论

FTL快速入门

09-09

FreeMarker基于设计者和程序员是具有不同专业技能的不同个体的观念。

他们是分工劳动的:

设计者专注于表示——创建HTML文件、图片、Web页面的其它可视化方面;

程序员创建系统,生成设计页面要显示的数据。

在这里,你可以在HTML(或其它要输出的文本)中加入一些特定指令,FreeMarker会在输出页面给最终用户时,用适当的数据替代这些代码。

SSD-FTL算法学习总结1

m0_51273315的博客

11-30

515

FTL是Flash Translation Layer(闪存转换层),完成主机(HOST)逻辑地址空间到闪存Flash物理地址空间的翻译,或者说映射(Mapping)。FTL算法分成两类,一种基于主机端实现,另一种基于设备端实现:可以从那些方面评价FTL算法?SSD使用的储存介质有哪些?我们需要了解SSD具有哪些特性,从而学习不同的特性条件下,FTL算法需要去做什么来帮助提高SSD的性能。

FTL入门文档学习

11-16

FTL入门文档学习,ftl语法,以及按例

第4章 SSD核心技术:FTL 4.1-4.2

fengbaobaola的博客

07-10

837

LBA(Logical Block Address),逻辑区块地址。PBA(Physics Block Address),物理区块地址。SSD中的操作系统--FTL(闪存转换层)_ftl层_Ashore2022的博客-CSDN博客一般,FTL中有三个表: (1)FTL映射表:记录每个LBA对应的物理页位置;(2)Valid Page Bit Map(VPBM):记录每个物理块上哪个页有有效数据;(3)Valid Page Count(VPC):记录每个物理块上的有效页个数。 FTL(Fla

FTL详细资料

热门推荐

jasonLee的博客

09-04

1万+

FTL产生过程

如果仅仅是SSD的使用者,一定不会在意在SSD内部居然还存在一个复杂的软件层Flash Translation Layer(FTL)。其实就是这个FTL才是SSD固态硬盘的软件核心技术。正因为有了FTL,NAND Flash才能被当成硬盘来使用;文件系统才可以直接把SSD当成普通块设备来使用。由于FTL是SSD设计厂商最为重要的核心技术,因此,没有一家厂商愿意透露这方面的技术信息...

FTL入门

q1ngqingsky的博客

03-10

3868

目录

1.概念

2.原理说明

3.基本语法

1.概念

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。

它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

FreeMarker是免费的,基于Apache许可证2.0版本发布。

其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程

FTL(闪存转换层)简单介绍

weijun的博客

03-04

8622

FTL(闪存转换层)基础

FTL(Flash Translation Layer)译为闪存转换层,是Flash Memory(存储介质)与Device Controller(设备主控器)之间的连接关系。

在整个储存体系中,FTL起着翻译官的作用,它将Host(电脑、手机等)发送至Device(eMMC、SSD)的逻辑地址转换为写入Flash的物理地址(地址映射管理)。在进行地址转换的同时,FTL还...

FTL——简介

weixin_37981492的博客

10-13

1173

说明:本文章内容来自《深入浅出SSD 固态存储核心技术 原理与实战.pdf》

什么是FTL?

FTL的全称是Flash Translation Layer,即闪存转换;

FTL的分类

FTL分为Host Based(基于主机)和Device Based(基于设备);

Host Based:FTL是在Host(主机)端实现,用的是计算机的CPU和内存资源,如下:

Device Based:FTL在Device(设备)端实现,用的是SSD上的控制器和RAM资源,如下:

FTL的作用

1.地址映射:记录每一

freemarker入门demo

03-22

freemarker依赖ftl模板文件生成静态网页的小Demo。简单的入门demo。可以直接运行

ftl:Mixer的FTL流协议的客户端和服务器实现

02-13

提供了一个示例Docker Compose文件以帮助您入门。 请注意,这仅是示例,并非用于逐字记录。 :movie_camera: 摄取服务器使用的摄取服务器是的。 有关所有文档,请参阅其回购。 为了方便起见,我们仅提供自动Docker...

frameshift:提取和查看堆栈,用于部署Mixer的FTL流协议

04-04

提供了一个示例以帮助您入门。 请注意,这仅是一个示例,并不应原样使用。 您应该将接收服务器和Web客户端反向代理到相同的主机名。 提供了一个示例 ,以显示需要代理的内容以及在何处进行代理。

Java毕设-基于springboot+Vue的流浪动物管理系统2(附源码,数据库,教程).zip

03-06

Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。

包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。

该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

项目都经过严格调试,确保可以运行!

1. 技术组成

前端:html、javascript、Vue

后台框架:SpringBoot

开发环境:idea

数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑)

数据库工具:navicat

部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven

2. 部署

如果部署有疑问的话,可以找我咨询

后台路径地址:localhost:8080/项目名称/admin/dist/index.html

前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

Swift 基础库. A collection of Swift extensions and utilities.zip

最新发布

03-06

Swift 基础库. A collection of Swift extensions and utilities.zip

剪映使用教程s240306.pptx

03-06

剪映使用教程s240306.pptx

OFO共享单车(Swift版).zip

03-06

OFO共享单车(Swift版).zip

快速、简洁、解决大文件内存溢出的java处理Excel工具.zip

03-06

Java语音项目的资源包括原生的JSAPI、开源库如CMU Sphinx和FreeTTS,商业化的服务如Google Cloud Speech-to-Text API,以及其他框架和工具。通过利用这些资源,您可以开发出功能强大的语音应用程序。Java语音项目的资源包括原生的JSAPI、开源库如CMU Sphinx和FreeTTS,商业化的服务如Google Cloud Speech-to-Text API,以及其他框架和工具。通过利用这些资源,您可以开发出功能强大的语音应用程序。

ScrollView嵌套ScrolloView解决方案支持OC _ Swift

03-06

ScrollView嵌套ScrolloView(UITableView 、UICollectionView)解决方案, 支持OC _ Swift(持续更新中...)实现原理:.zip

apusic ftl

08-25

apusic ftl 是指Apusic研发的一款快速传输层(Fast Transmission Layer)协议。该协议的设计理念是提供高效稳定的数据传输服务,以满足大规模分布式系统中的实时数据传输需求。

apusic ftl 采用了一系列优化策略来提高传输效率。首先,它通过利用多线程和异步IO技术,实现了同时处理多个数据传输任务,有效降低了传输延迟。其次,apusic ftl 还使用了数据分片和压缩技术,可以在传输过程中减少数据包的大小,提高网络带宽利用率。此外,该协议还支持基于TCP协议的可靠传输机制,确保传输的数据完整性和正确性。

除了高效的传输性能,apusic ftl 还具备高可靠性和稳定性。它使用了自适应的拥塞控制算法,可以根据网络环境的变化来动态调整传输速率,避免网络拥塞和传输丢包。同时,该协议还提供了数据传输的重传和恢复机制,确保即使在传输出现异常的情况下,数据也能够得到可靠的传输和重组。

总的来说,apusic ftl 是一种高效、稳定和可靠的数据传输协议,特别适合用于大规模分布式系统中的实时数据传输场景。它的设计理念和优化策略可以有效提高数据传输效率,同时保证传输过程中的数据完整性和正确性。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

涓涓细刘

CSDN认证博客专家

CSDN认证企业博客

码龄8年

暂无认证

15

原创

201万+

周排名

202万+

总排名

43万+

访问

等级

1482

积分

75

粉丝

150

获赞

48

评论

455

收藏

私信

关注

热门文章

小程序登录&授权&获取用户信息

167676

FTL 入门

61282

http请求与响应,TCP三次握手&四次分手

45971

idea的神坑之端口被占用

37035

openId和unionId的区别

34310

分类专栏

idea

4篇

mysql

http

1篇

FreeMarker

3篇

java基础

2篇

插件

1篇

nginx

1篇

spring

6篇

小程序

3篇

秒杀

1篇

最新评论

小程序登录&授权&获取用户信息

weixin_48769860:

协议有没有好用的代理,巨量感觉不好用

idea的神坑之1099端口

Neoest:

你也打错孑

idea的神坑之1099端口

大锤997:

妮爷答锉了

http请求与响应,TCP三次握手&四次分手

兰亭园洋仔:

感谢OvO

小程序登录&授权&获取用户信息

「已注销」:

如果用协议做的话,基本上用户交互这一关,你可能会遇到问题。

最新文章

如何解决秒杀的性能问题和超卖的讨论

Spring Boot 学习之路——4.1 AOP注解方式实现打印日志 详解

Spring Boot 学习之路——4 AOP注解方式实现打印日志

2018年15篇

2017年9篇

目录

目录

分类专栏

idea

4篇

mysql

http

1篇

FreeMarker

3篇

java基础

2篇

插件

1篇

nginx

1篇

spring

6篇

小程序

3篇

秒杀

1篇

目录

评论 1

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

FTL和HTML的区别|极客教程

FTL和HTML的区别|极客教程

极客教程

基础编程

C语言C++语言C++ 多线程ShellPerlLeetCodeC#

前端开发

HTMLBootstrapJavaScript 参考手册WebSocketMarkdownreact

后端开发

数据库管理系统SQLMySQLMongoDBRedis命令

Python开发

PythonNumpyMatplotlibScrapyPandasPyTorchtkinterpygamePyGTKTurtle

Java开发

JavaSpringSpring BootJSPServletGuava

大数据

大数据HDFSMapReduceYarnHiveSparkHBaseStormSpark StreamingFlinkZooKeeper

人工智能

机器学习深度学习数学基础线性代数TensorflowKerasscikit-learn

移动开发

AndroidFlutterKotlin

图形图像

OpenCV

开发工具

VSCodeGitGithub

当前位置:极客教程 > HTML > HTML 问答 > FTL和HTML的区别

FTL和HTML的区别

FTL和HTML的区别

一、介绍

在现代互联网时代,前端开发已经成为了一个非常重要的领域。在前端开发中,模板引擎是一个常用的技术,用于将动态数据渲染到静态页面中。在模板引擎中,FTL和HTML是两种常见的选择。本文将详细介绍FTL和HTML的区别,包括语法、功能以及使用场景等方面。

二、语法差异

1. FTL语法

FTL(FreeMarker Template Language)是一种基于Java的模板语言,由Apache开发。FTL语法使用尖括号 <> 括起标签,使用 ${} 用于输出变量。以下是一些常见的FTL语法示例:

1.1 输出变量

<#assign name = "John">

The name is ${name}.

1.2 条件判断

<#if age > 18>

You are an adult.

<#else>

You are a child.

1.3 循环遍历

<#list items as item>

${item}

2. HTML语法

HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言。HTML语法使用尖括号 <> 括起标签,并使用各种属性来组织内容。以下是一些常见的HTML语法示例:

2.1 标题

Heading 1

2.2 段落

This is a paragraph.

2.3 超链接

Click here

三、功能差异

1. FTL功能

FTL作为模板引擎,提供了丰富的功能,可以通过控制流和变量来动态生成HTML页面。以下是一些FTL的功能:

变量赋值和输出

条件判断

循环遍历

宏定义和调用

模板嵌套

文件包含

自定义函数和指令

FTL的功能非常强大,可以方便地处理复杂的数据结构和逻辑操作。

2. HTML功能

HTML作为标记语言,主要用于描述页面的结构和内容。HTML本身并不提供复杂的逻辑功能,其主要功能如下:

定义页面的结构

设置文本样式

插入图像和多媒体

创建表单并接收用户输入

设置超链接和锚点

HTML的功能相对简单,主要用于静态页面的展示。

四、使用场景差异

1. FTL使用场景

由于FTL具有强大的功能,常用于开发复杂的动态网页和web应用程序。FTL适用于以下场景:

动态生成页面内容

大量数据的展示和遍历

复杂的数据逻辑处理

高度个性化的页面展示

2. HTML使用场景

HTML适用于创建静态网页和简单的内容展示。HTML常用于以下场景:

静态内容的展示

简单的页面布局

静态文档的呈现

五、使用示例

下面是一个使用FTL和HTML的示例,以展示它们之间的区别:

<#list items as item>

${item}

渲染后的结果:

Item 1

Item 2

Item 3

通过FTL模板引擎,可以将数据${items} 动态地渲染到HTML页面中。

六、总结

本文介绍了FTL和HTML的区别,包括语法、功能和使用场景等方面。FTL作为一个模板引擎,提供了丰富的功能用于动态生成HTML页面;而HTML本身主要用于静态页面的展示。根据具体的需求和项目的复杂度,可以灵活选择使用FTL或HTML来开发前端界面。

上一篇 HTML打印分页符详解

下一篇 innerHTML 元素代码不生效

Python教程

Python 教程

Tkinter 教程

Pandas 教程

NumPy 教程

Flask 教程

Django 教程

PySpark 教程

wxPython 教程

SymPy 教程

Seaborn 教程

SciPy 教程

RxPY 教程

Pycharm 教程

Pygame 教程

PyGTK 教程

PyQt 教程

PyQt5 教程

PyTorch 教程

Matplotlib 教程

Web2py 教程

BeautifulSoup 教程

Java教程

Java 教程

Web教程

HTML 教程

CSS 教程

CSS3 教程

jQuery 教程

Ajax 教程

AngularJS 教程

TypeScript 教程

WordPress 教程

Laravel 教程

Next.js 教程

PhantomJS 教程

Three.js 教程

Underscore.JS 教程

WebGL 教程

WebRTC 教程

VueJS 教程

数据库教程

SQL 教程

MySQL 教程

MongoDB 教程

PostgreSQL 教程

SQLite 教程

Redis 教程

MariaDB 教程

图形图像教程

Vulkan 教程

OpenCV 教程

大数据教程

R语言 教程

开发工具教程

Git 教程

VSCode 教程

Docker 教程

Gerrit 教程

Excel 教程

计算机教程

Go语言 教程

C++ 教程

HTML 精品教程HTML 教程HTML 概述HTML 基本标签HTML 元素

文章目录FTL和HTML的区别一、介绍二、语法差异1. FTL语法2. HTML语法三、功能差异1. FTL功能2. HTML功能四、使用场景差异1. FTL使用场景2. HTML使用场景五、使用示例六、总结

© 2024 极客教程   备案号:蜀ICP备11026280号-10

友情链接:极客笔记 |Matplotlib Tutorials | CSS Tutorials| Numpy Where

回顶回顶部

FTL潜规则:调优,才是算法精华 - 知乎

FTL潜规则:调优,才是算法精华 - 知乎首发于限时存储切换模式写文章登录/注册FTL潜规则:调优,才是算法精华起风了前有先人后有树,点个关注不迷路前言在存储领域中有一个FTL的概念,这是一种Flash的内存管理算法,属于各个厂商的核心机密,每个厂商的处理方式不同,有的处理简单,有的处理复杂。FTL,即Flash Translations layer,也就是闪存转 换层,可以完成从逻辑地址到物理地址的转换,简称为映射。为什么需要FTL因为Flash的质量参差不齐,里面坏掉的区域是完成不能使用的。Host发送命令下来,要求把一段数据存放在A地址中,此时A就是逻辑地址,而好死不死,Flash中的A地址刚好是坏块,那怎么办?此时B地址是好的,FTL就将数据存放在B地址中,此时B丢置就是物理地址了,同时将A逻辑地址——B物理地址记录下来,这一段记录就是映射关系了。下一次,当主机需要读取A逻辑地址的数据时,FTL就会将B物理地址的数据读取出来返回给主机。FTL的位置先了解几个名词UCLUSB Control layer,USB控制层,主要用于解析从Host发送下来的USB命令FTLFlash Translation layer,Flash转换层,主要用于将逻辑地址转换成物理地址FCLFlash Control layer,Flash控制层,主要用于将经过映射处理后的地址解析成flash指令发送给Flash以下就是UCL、FTL、FCL所处的位置:FTL遵循的规则FTL这种内存管理算法,自然是遵循着着Flash特性,一切都是在Flash特性下才能运行起来的。写数据以page为最小单位 写入的数据必须打乱存储才会稳定 写满整个Block数据才会稳定 擦除以Block为最小单位,一般不轻易做整块擦除 当然也有其他特性,但是Flash由于批次不同,制造工艺和厂商不同,出厂的flash也各有一些差异性的特性,这些,就实际问题实际分析。FTL中各种调优不同的厂商,FTl的方案各不相同,除了逻辑地址和物理地址的映射作用外,一个好的FTL还具备以下的调优:映射颗粒度逻辑地址和物理地址之间的映射方式有两种:块映射和页映射。使用块映射,逻辑块映射到物理块,看起来挺好的,但是如果遇到操作page的情况,比如说要修改刚写满的某个Block中的某一个page,往往需要做整块擦除,大大降低了效率。使用页映射,虽然弥补了上面的问题,但是每一页都做映射的话,页的数量一多,映射页多,要知道存储映射关系也是要消耗内存的。页映射需要消耗很大的空间。所以市面上的做法大多数采用:块映射+页映射,简称混合映射,既可以满足存储需求,还能做到以page颗粒进行维护。映射表存储映射表是可以随时变化的,也是随时都要用到的,一般用的时候在RAM中使用,不用的时候就需要存储起来,一般都是用一些空闲块存储起来,这些空闲块不存数据,只放映射表。merge处理存储领域,少不了数据搬运这一块,一般来说,merge和GC是一起工作的。GC回收现在无论什么都会涉及一些垃圾回收,内存永远是一个好的算法需要考量的点。垃圾回收需要选好时机,谁都不希望一个存储设备,会在没有能用的内存后才开始做GC回收,这就像开启了一段完全看不到进度的卡顿一样。好的固件往往未雨绸缪,在不知不觉下做好了GC回收的工作。寿命均衡逻辑地址和物理地址的映射本身会对寿命均衡产生正面影响。就刚才讲到的,映射表可以被随时修改,那么逻辑地址对应的物理地址也就被修改了,一些物理Block经常被擦写,往往会加速损坏。我们可以通过修改逻辑块,让每次物理块不同而避免经常擦写相同的物理块,这本身就保证不会有物理块被经常擦写。但是有一种情况它没有办法处理,即闲置的数据块,它们被写入后没有更改,就一直占据某些物理块,而这些物理块寿命还很长,而别的块却在飞速损耗中。面对这种情况,我们只有在合适的时机帮它们换个位置了,如何选择这个时机很重要,而且这个merge搬运动作本身也会损耗寿命本身。以上这些策略也是各个FTL算法的精华了。我收集了一些linux的资料、算法小抄和计算机基础的资料,仅供个人学习使用,欢迎大家一起学习探讨。linux保姆级教程完整版文档资料发布于 2023-06-07 14:28・IP 属地广东Flash 开发FTL算法​赞同​​添加评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录限

发售10年,再看《超越光速》前世今生 - 知乎

发售10年,再看《超越光速》前世今生 - 知乎首发于触乐切换模式写文章登录/注册发售10年,再看《超越光速》前世今生触乐​单机游戏等 2 个话题下的优秀答主“它几乎没有竞品,这是我们的优势。”作者丨等等如今,《FTL:超越光速》(FTL: Faster than Light)被广泛视为有史以来最具影响力的独立游戏之一。10年之前,它与《以撒的燔祭》以及《洞穴探险》(Spelunky)一道,推动了Roguelite品类变得更加流行。这款游戏起源于2K上海工作室(迁游软件)两名开发者马修·戴维斯以及贾斯廷·马一个不起眼的想法。他们回忆说,虽然当时的工作环境还不错,但他们对在那里开发的游戏并不感兴趣,后来就离开了2K,开始筹备一个业余项目,让自己在寻找下家的同时保持忙碌。“至少在我看来,起初只是打算将《FTL:超越光速》作为一个兴趣项目或者原型来对待。”戴维斯说,“这是我们在职场空窗期里做的一件事,目的是让简历变得更漂亮,并借助它找到新工作,投入到更感兴趣的项目中。不过,随着时间推移,游戏量级远远超出了最初的设想。”戴维斯和马在2013年GDC上获得了独立游戏节“卓越设计”奖丨 灵感来源按照他们的说法,为了制作这款新的独立游戏,他们从平时玩过的线下策略桌游中汲取了灵感。“我们很喜欢那种《太空堡垒卡拉狄加》《红色十一月》之类的桌游,包含有大量船员管理以及合作玩法的游戏。”戴维斯说。在动手开发之前,他们写下一个桌游列表,并加入一些原型机制。“我们想让玩家扮演船长,而不是飞行员。”戴维斯解释说,“当时大部分游戏都是让玩家驾驶飞船,在太空中进行激烈战斗。但我们更希望让玩家感觉自己就像皮卡德(美剧《星际迷航:下一代》主角),需要做一些动力分配、保护防护盾、修复伤害之类的事儿。”“我们想让玩家管理飞船的各种系统,并体验到因为自己的错误决策而失去船员的痛苦。”马补充说。他还透露,为了激发玩家的这些感受,他受到了Roguelike游戏随机场景和永久死亡设定的影响。10年前,这类设计元素正在从传统的回合制冒险渗透到其他品类的游戏之中。除了《红色十一月》这类桌游,《FTL:超越光速》也受到《萤火虫》《星际迷航》等影视作品的启发和影响“在之前的几年里,我确实玩过很多传统的Roguelike游戏,但直到《洞穴探险》问世,我才真正开始思考,如何将Roguelike的原则运用于其他品类。”尽管如此,两名开发者之所以决定在《FTL:超越光速》中融入大量与Roguelike游戏类似的机制,是出于务实的目的。“比如,我们希望让玩家被迫面对自己的决定所带来的后果,所以采用永久死亡设定就挺合适。”马说,“我们希望玩家能获得探索未知世界的感觉,而设计带有各种不同结果的随机文本事件,似乎就是实现这一目标的最简单方法。我们还有点受虐倾向,享受失败的感觉,所以就做了一款相当有挑战性的游戏。”丨 削减规模鲜为人知的是,在最初的设想中,《FTL:超越光速》远比正式发售的版本复杂。为了使游戏变得更易于上手和有趣,他们不得不舍弃大量内容。“你可能根本认不出来早期的《FTL:超越光速》开发版本。”戴维斯笑着说,“步子迈得太大了……我们希望当玩家在飞船上操控某件物品时,可以将镜头拉近或拉远、调整方向,并看到船员正在做什么。后来发现,过于繁杂的内容让游戏显得既混乱又无趣。”大约两三个月后,两人重新审视项目,决定让游戏体验变得更精炼,一步步使《FTL:超越光速》变成了玩家如今熟悉的样子。“我们完全砍掉了移动系统,转而让玩家在游玩时专注于对船员的培养和资源管理。事实证明,这些调整的效果相当不错。”二人在GDC2013上展示的早期游戏原型设计在开发早期,《FTL:超越光速》对两名开发者来说是一个兴趣项目。不过到2011年,当《FTL:超越光速》在中国独立游戏节上首次公开亮相后,他们开始更认真地对待这款游戏。“那次游戏节有两件事让我特别难忘。”戴维斯说,“有个人来我们展台试玩《FTL:超越光速》,在那里待了差不多整整一个小时。当他离开时问我们哪里能买到《FTL:超越光速》,因为他还想接着玩……那是我们头一回遇到一个陌生人对我们的游戏产生浓厚兴趣,真的很有意思。”“另一件事是,我们见到了发行商Finji的联合创始人亚当·索茨曼,他很喜欢《FTL:超越光速》,尽管当时它看上去仍然更像一个愚蠢的业余项目,而非开发者真正会关心的游戏。正是在那段时间里,我们转变了想法,觉得我们正在做的事情大有所为。”丨 筹集资金离开2K上海几个月后,两位开发者的存款快要见底了。为了筹措《FTL:超越光速》的研发资金,他们在Kickstarter上启动众筹,向玩家们寻求帮助。如今,众筹已经成为独立开发团队筹集资金的常用方式之一,但在2012年,那还是个相对新鲜的概念。从某种意义上讲,他们创办的Subset Games工作室搭上了众筹平台的早班车。2012年2月,Double Fine刚刚通过Kickstarter为新作,也就是两年后发售的《破碎时光》(Broken Age)筹资到了320万美元。“突然之间,全世界的游戏媒体都开始谈论众筹,《FTL:超越光速》碰巧是当时在Kickstarter上出现的几款游戏之一。”马回忆说,“短短几小时内,我们就达成了1万美元的目标,最终筹集的资金超过了初始目标的20倍。”其中一位捐赠者支持了2000美元,并参与设计了一个游戏中的秘密种族“水晶人”“说实话,当时我们既兴奋又害怕。起初,我们的想法是让几十人试玩Beta版本,现在却不得不思考如何管理超过9000名玩家的心理期望值,如何为他们提供封测版本。《FTL:超越光速》的众筹以及游戏正式发售前的封测,都给我们带来了巨大压力。”有了研发资金后,Subset终于可以扩大为《FTL:超越光速》所设定的目标。工作室为作曲家本·普伦蒂支付报酬,委托他为《FTL:超越光速》创作音乐和音效——此前他都一直无偿工作。另外,Subset还雇佣了编剧汤姆·朱伯特,让他帮忙改进游戏文本。有趣的是,由于众筹总额远远超出预期,Subset花了很多时间考虑应当怎样分配资金。“你必须想方设法改进游戏,同时还得按时完工,确保游戏符合最初的愿景,这是个挑战。”戴维斯解释说,“我们并不打算雇佣一支美术团队,抛弃先前的所有内容,从头开始创作更华丽的3D画面……我们需要把握平衡,做到在坚持创作愿景的同时合理管理资源,以一种对游戏有帮助的方式花钱,从而让玩家们看到,我们正在认真地对待他们投出的信任票。”2012年游戏开发中的概念美术设计丨 一飞冲天在《FTL:超越光速》正式发售的那一天,来自玩家的热烈反应远远超出了Subset的预期。“时至今日,我们仍然对当时人们的反应感到震惊。”马说,“《FTL:超越光速》获得了玩家和评论人士的高度好评,发布一两个月后就卖出了10万份,并且还引发了大量讨论。许多玩家认为,这是一款令人既紧张又兴奋的游戏,他们的评价令我们非常激动。”虽然Subset从未透露《FTL:超越光速》的详细销售数据,但它显然大受玩家欢迎。在独立游戏领域,《FTL:超越光速》有着巨大影响力,并且吸引了一群数量可观的忠实粉丝。作为游戏模组《超越光速:船长版本》的开发者,斯蒂凡·韦达尼就是其中之一。“我的目标是一直为《FTL:超越光速》创作更多内容。”韦达尼说,“游戏本身已经拥有很多内容,但我觉得在背景设计下,还可以做更多事情……起初,船长版本只是个装备模组,所以我们添加了新飞船、新武器和图纸等内容。随着时间推移,我又添加了两块新的太空区域和一些事件。后来,这个模组又开始向外发展,我希望在符合开发者意图的基础上拓展游戏。”《FTL:超越光速》问世至今已经10年,但根据SteamCharts的追踪数据显示,在大部分时间里,这款游戏的同时在线玩家数都至少有1000人。韦达尼指出,《FTL:超越光速》之所以经久不衰,与其发售时机不无关系。到今天,《FTL:超越光速》的数据仍然很不错“我不是行业分析师,但我认为《FTL:超越光速》在正确的时间里做了很多正确的事。10年前,《FTL:超越光速》的概念非常新颖,以前没有任何游戏探索过船长模拟系统。游戏的太空科幻元素富有吸引力,很多人都能立即理解。另外,故事设定和文本写作极具开放性,你可以将自己喜欢的任何科幻小说投射到游戏中。”丨 成功关键在某种程度上,《FTL:超越光速》的成功还应当归功于媒体生态系统的转变,它和其他Roguelike游戏一样非常适合当时快速崛起的一种新兴媒体。“《FTL:超越光速》非常适合直播以及Let's Play视频。”韦达尼说,“主播可以随时暂停游戏分享想法,或者决定接下来该做什么,这意味着他们可以在直播和视频平台上展示《FTL:超越光速》。这样一来,任何观看视频的人都会很容易理解玩法。”但韦达尼认为,《FTL:超越光速》之所以能够长期吸引玩家,其简单而扎实的设计才是根本原因。“游戏里的所有系统都很有深度,几乎所有角色和道具都有多种用途,系统功能之间也相互交织、盘根错节……玩家在游玩时会经历各种起起落落,战斗可能非常激烈,在结束之后你又会经历下一个事件。”后续的《FTL:超越光速升级版》中加入了Lanius物种,还设计了全新的飞船系统在马看来,设计和叙事共同促成了《FTL:超越光速》的持续成功。“我觉得最主要的原因是,它就像个故事生成器,让玩家有机会体验浪漫的太空幻想。一艘飞船的旅程往往包含许多起伏,能够为玩家带来难忘的经历。另外,虽然游戏难度很大,但我觉得与许多其他高难度作品相比,在这款游戏中,玩家失败时会觉得更有趣,失败的故事可能与成功一样伟大。”戴维斯则提到,《FTL:超越光速》中独特的玩法元素组合很难被复制。“与制作一款受到《超级马力欧兄弟》启发的平台游戏相比,制作一款类似《FTL:超越光速》的游戏要困难得多。这些年来,很少有人尝试这么做。如果你想要玩一款与之类似的游戏,就只能继续玩《FTL:超越光速》,因为它几乎没有竞品,这是我们的优势。”本文编译自:http://arstechnica.com原文标题:《10 years of FTL: The making of an enduring spaceship simulator》原作者:ALEX CALVIN原文链接:关注触乐专栏,阅读更多优质游戏文章与深度报道。发布于 2022-11-23 10:00・IP 属地北京超光速超越​赞同 18​​添加评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录触乐高品质、有价值、有趣的游

如何评价游戏《FTL》(Faster Than Light;超越光速)? - 知乎

如何评价游戏《FTL》(Faster Than Light;超越光速)? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册游戏单机游戏游戏测评大战略游戏如何看待/评价TA如何评价游戏《FTL》(Faster Than Light;超越光速)?FTL简直我心目中殿堂级的太空冒险+策略神作,更何况还是独立游戏。 人类的终极征途就是那片星辰大海。 We are the grounded visi…显示全部 ​关注者203被浏览184,903关注问题​写回答​邀请回答​好问题 6​添加评论​分享​14 个回答默认排序CanKing程序员 独立游戏爱好者​ 关注第一次写游戏测评,轻喷。看见FTL就滚进来了23333--------------------------------写在前面的话(俗称前言)-------------------------------------FTL对我来说是一款神作,它陪伴了我度过大半个高中......的夜晚。(好孩子不要学)最先是看一个姓逆的胖子的游戏视频才入的坑,现在已经沉迷其中,无法自拔。视频传送门:https://www.bilibili.com/video/av1856603/?from=search&seid=3237589091758770904熟悉的读条界面------------------------------------------游戏性-----------------------------------------------作为一个经典的Rogue-like游戏,FTL有以下几个特点:一、随机性。 除了开始时能自己选飞船和难度,还有最后的Boss一直是Rebel Flagship之外,其他所有的东西都是随机的,包括各种EVENT、商店里买的东西、遇到的敌人(对我来说可能是一样的,都是快递员23333)。也就是RNG(Random Number Generator)爸爸说了算。每次开始新旅行之前都会祈求RNG能给我一些好东西,当然通关的时候也会感谢RNG手下留情,没有一直给我刷一些什么奇怪的东西,比如要weapon的时候刷各种small bomb,还有前中期一直不刷crew,满员后商店里总有一排crew(QAQ)。 但是FTL的随机性可不止上面所说的,在运(zou)气(gou)极(shi)好(yun)的时候,飞船射出去的东西,比如说各种子弹、导弹(missile)、各种无人机(drone),可能会因为“撞在一起”而“同时爆炸”。当我第一次看见这种情况的时候,我脱口而出就是三个字“WTF?”但后来再回想这个情景,想到反导系统正是基于“撞在一起”而“同时爆炸”的原理造出来的,顿时感觉这个细节做得非常有代入感。(虽然FTL中没有什么所谓的反导系统)二、游戏进程单向性。 跟其他Rogue-like游戏一样,FTL只允许玩家在开始游戏时读取上次保存的存档或是在结束游戏前保存当前的游戏进度。而且每当玩家保存时,他的上一个存档会被覆盖。这就促使玩家在每次做出选择的时候都必须权衡利弊一番(什么“富贵险中求”不存在的)。 其实我想这样做的原因大概是为了防止玩家用“S/L大法”来“作弊”。(雾)“save+quit”让“S/L大法”无处施展三、不可挽回的死亡。 Rogue-like游戏的一大特点就是在死亡中积累经验。当你看着自己幸苦培养的船在敌舰的一轮齐射中爆炸时,肯定会心痛得说不出话来。但你会从自己的失败中总结自己的失误,调整自己的打法,争取在下一次游戏中击毁Rebel Flagship。 YouTube上有一位大神做了FTL的系列视频,其中sp1讲述了玩家怎么拿到所谓的“重要情报”以及为什么要冒着生命危险去当一回快递员。视频传送门(B站):https://www.bilibili.com/video/av13032379/?from=search&seid=16932045691377904236(带中文字幕,感谢翻译君)视频传送门(YouTube):https://www.youtube.com/watch?v=Ejxp1X2ToNg四、Pause。 我觉得Pause键绝对是FTL的一大亮点。 在紧张刺激的太空飞船对射中,玩家需要让各种口径的舰载炮各司其职,还要让crew去救火,修理system,修理被打穿的hull,迎战鲁莽到敢于登舰的敌人,并且时刻关注crew的血量,让残血的去Medbay补血,与此同时,玩家还需要关注敌舰的状态,当敌舰试图逃跑的时候及时让其Engines或Piloting瘫痪,或是在敌舰向自己射出missile时开启Cloaking。 同时处理这些事情足够让一个手残如我的人崩溃,但是FTL中有现实中不存在的Pause键!玩家可以随时暂停游戏,让自己有足够的时间来观察战局,调配crew和weapon,甚至还能及时释放自己的膀胱23333编辑于 2017-12-05 16:16​赞同 48​​3 条评论​分享​收藏​喜欢收起​不稳定蛋白质芸芸众生​ 关注难度不算太高第二天就通关了这里先说一下玩法自己感觉的玩法先开始碎片不要用因为一但有商店卖好东西 没有碎片就尴尬了隐蔽外壳 150碎片(神器 打boss必备 虽然有一次没有这个依然过了boss 但是这个真的很英霸)碎片收集臂 50碎片(每次战斗过后 获得更多碎片)武器预热? 130碎片(可能120碎片 忘了 战斗一开始 便可以立即使用武器)机器人控制 80碎片 (让你可以使用无人机)修复无人机 (必备 后期打boss打三次 每次打完用无人机修好再打)有了以上道具 基本上很好过boss 当然没有也可以过 boss并不难然后说小怪打法先破盾 再打武器 或者同时打 打伤也行 没有武器了 他还能干什么?其次是驾驶室 因为他跑了 你就没有碎片拿了 还能减少miss这种打法屡试不爽如果用的是第二种战舰 也就是离子发射器那个 只能干扰 没有伤害那种就打一下护盾 打一下武器 打一下护盾 打一下武器 伤害用无人机打虽然有点累 但是这样才能最优升级的话基本上都是先升级的武器 一套下去打残对方(比如武器打掉)就没有什么悬念了护盾最多2个 也就是4级升了武器加护盾就几乎没有能量了所以没有什么可变性船员最好满的 最好不要人类 太辣鸡 什么都不会绿色小人 提供能量那个 其实挺好的 就是血太少要一个 要么丢血池 要么丢无人机操作飞船的我一般都是丢的 猩猩 或者 岩石岩石跑得太慢 让他灭火的话 飞船都烧成灰了 才走拢 所以就让他定点干活剩下的就是螳螂了 螳螂最能打挂机的就是螳螂和猩猩 一个负责打 一个负责修这个影响都不是很大 主要是注意突发情况 及时拉人地图方面没有仔细研究 友善 和 不友善 有什么区别 优先走友善 感觉怪更少不代表没碎片拿 经常探测事件 就一堆东西拿 还不用打怪感觉是遇怪多和少的区别 反正不去星云每一个星系 必须要等到反叛军 逼到头 才进星标甚至 有时为了做任务 宁愿打一次反叛军也行 反正损失不大boss打法一阶段 一直保持破盾 然后优先打武器 注意打那个发射火箭的武器 因为那个武器无视护盾完事修复无人机补满血二阶段 隔一段时间刷一群无人机 打法一样 注意刷无人机的时候隐身 完事修复无人机补满血三阶段 和二阶段一样 隔一段时间发射一波弹幕 区别是没有无人机出现作为预警或者不用太麻烦 直接全程无缝放修复无人机回血硬打也可以 反正不难总的来说 这款游戏是优秀的但是界面的简陋和复杂使得他成为了小众游戏我之前都由于复杂的问题 放弃了一次后来硬着头皮玩 才玩进去从上手到第一次体验到爽 大概有个十分钟的过程这个过程 能逼走一大波玩家除去上手问题 游戏性如果能再自由点 就好了当然这个连带着 平衡性的问题比如《以撒的结合》有时就会出现非常无敌的情况 降低了游戏的乐趣但是有时 身上200 300碎片用不出去 很尴尬啊游戏的主要乐趣点 就是如何分配碎片如何分配能量点如何分配小人 如何打怪 如何走地图遇到突然情况的变招处处都充满了策略和思考让人无时无刻不在心流状态让人忽略了画面的粗糙发布于 2016-11-28 15:43​赞同 24​​9 条评论​分享​收藏​喜欢

杂谈闪存三:FTL - 知乎

杂谈闪存三:FTL - 知乎首发于UEFI和BIOS探秘切换模式写文章登录/注册杂谈闪存三:FTL老狼​2021 年度新知答主上文(杂谈闪存二:NOR和NAND Flash - 知乎专栏)提到NAND flash管理的核心FTL(Flash Translation Layer)。事实上几乎所有的应用NAND Flash的设备都必须配备FTL,包括我们经常碰到的SD, eMMC, UFS, SSD等等。通常FTL由这些设备的固件提供实现。我们来深入了解下什么是FTL吧。NAND flash的组成一个典型的Flash芯片由Package, die, plane, block和page组成,如下图:Package: 也就是chip即Flash芯片,就是我们经常在M.2的SSD上看到的NAND flash颗粒:Die: 一个NAND颗粒是由一颗或者多颗Die封装在一起而成,这种封装可是平排的,也可以是层叠的。die内部可以通过3D 堆叠技术扩展容量,譬如三星的V-NAND每层容量都有128Gb(16GB),通过3D堆叠技术可以实现最多24层堆叠,这意味着24层堆叠的总容量将达到384GB!就像盖楼房一样:Die也是可以单独执行命令和返回状态的最小单位。Plane: 一个die可以包含几个Plane.Block: 重要的概念,它是擦除操作的最小单位。Page:也很重要,它是写入动作的最小单位。FTL当我们有了块“干净”的Flash,我们第一个想干的事就是写些东西上去,无论我们是写一个byte还是很多东西,必须以page为单位,即写一个byte上去也要写一个page。当我们满意的写了东西上去后,如何修改呢?是不是可以再写一次呢?可惜的是,我们的program操作只能把bit 1改成0,而不能从0改成1. 即我们可以把11110000改成11000000,但不能改成11111111。即有点像逻辑and操作(我们可以通过NAND这个名字联想记忆一下)。那么如何把0改回1呢?这就要靠擦除操作了,但是擦除操作只能在block的上面操作,如果我们把整块block上的所有page都读回RAM,改动后再擦除再写回去(也叫read-modify-write),似乎问题就完美解决了。但是别忘了,我们前文中提到,NAND flash的寿命是由其擦写次数决定的(P/E数 (Program/Erase Count)来衡量的),频繁的擦除慢慢的会产生坏块。那么我们如何才能平衡整块flash的整体擦写次数呢?这就要我们的FTL登场了。1。FTL原理FTL简单来说就是系统维护了一个逻辑Block地址(LBA,logical block addresses )和物理Block地址(PBA, physical block addresses)的对应关系, 如图:有了这层映射关系,我们需要修改时就不需要改动原来的物理块,只需要标记原块为废块,同时找一个没用的新物理块对应到原来的逻辑块上就好了。问题解决了!实际情况比这个稍微复杂些,我们需要解决以下问题:A. LBA和PBA究竟是对应page还是block?B. 如何做到寿命均衡?C. 废块何时回收?D. 这个逻辑对应表存储到哪里?2。LBA/PBA的颗粒度问题如果我们把LBA和PBA都设置成page大小,这也叫做page-level mapping,这和我们写入颗粒一致,很灵活。但这么小的粒度会带来一个问题:逻辑对应表太大!想象一下,我们有个64GB的Die,每个page只有4KB,我们的对应表需要64*1024*1024 * 4 /4 = 64MB!这个绝对不能接受。那么按照block,也就是block-level mapping呢? 会不会好些呢?至少占用空间好了很多,但是因为写入时不清楚page情况,往往要整块擦除,效能会大大下降。有没有更好的办法呢?实际使用中常用的是log-block mapping,它从我们现代的log文件系统中学到经验,也充分利用了page和block的不同特性。它比较复杂,我们这里按下不表。3。如何做到寿命均衡(Wear Levelling)LBA/PBA的映射本身会对寿命均衡产生正面影响。就如我们SD卡上的FAT文件系统,文件分配表会被经常修改,但由于修改的是逻辑块,我们可以让每次物理块不同而避免经常擦写相同的物理块,这本身就保证不会有物理块被经常擦写。但是有一种情况它没有办法处理,即冷的数据块(cold block),它们被写入后没有更改,就一直占据某些物理块,而这些物理块寿命还很长,而别的热的块却在飞速损耗中。这种情况怎么办呢?我们只有在合适的时机帮它们换个位置了,如何选择这个时机很重要,而且这个搬家动作本身也会损耗寿命本身。这些策略也是各个FTL算法的精华了。4。垃圾回收废块需要找时机回收,这就需要垃圾回收(GC,Garbage Collection)机制。现在到处都会碰到GC,各种高级语言都在炫耀自己有GC,不像C++/C那样要手动回收内存。这里的GC是指回收废块,但是时机非常重要,谁都不希望看到一个存盘后,SSD硬盘固件发现没有干净的块可用,开始整盘GC,就像开始了一个没有进度条的磁盘整理,系统被完全卡死了。聪明的固件往往未雨绸缪,在我们不知不觉下在后台悄悄做垃圾回收,不少固件还同时进行Wear Levelling。5。LBA/PBA表存储在哪里这个表随时可以变化,我们把它存储在哪里呢?是不是也找个page存起来呢?事实上,在大部分的NAND Flash里,还有些空闲块,我们叫它OP(Over Provisioning)。如下图:这些空闲的块可以极大的帮助我们改善NAND flash的性能,它可以:A. 坏块处理。发现坏块,这些后备的可以立刻顶上,因为有映射机制,上层软件完全感受不到。B. 存储LBA/PBA表C. 给GC和Wear Levelling留下极大的腾挪空间。D . 减少写入放大(Write Amplification)事实上,现在几乎所有主流SSD等NAND die上都有OP。譬如我们拿到标称容量240GB的SSD,实际空间可能有256GB甚至更高(一般>7.37%),只不过这些多余的空间我们用不到,感受不到,它完全被SSD固件藏做私用而已。尾声现在能生产NAND芯片的厂家在Wikipedia上能查出11家,而能生产主控芯片和固件的就四家。他们各自的绝活都在FTL中的各种调优上,再加上Trim等等特性,这也就决定了SSD硬盘性能的好坏。下一篇我们会介绍现有各种NAND Flash存储媒体的历史和区别,以及接口的不同,如SATA,M.2,U.2,NVMe等等。敬请关注。其他闪存相关文章:硬盘相关文章:欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。同时欢迎大家给本专栏和公众号投稿!用微信扫描二维码加入UEFIBlog公众号编辑于 2018-03-24 13:38闪存(NAND)电脑 DIY个人电脑​赞同 595​​58 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录UEFI和BIOS探秘一起来探索UEFI/BIOS和固件

.ftl文件 是什么文件 - 极客分享

.ftl文件 是什么文件 - 极客分享

极客分享

 

登录 | 注册

极客分享

登录 | 注册

您的位置:首页 > Web前端 > HTML

.ftl文件 是什么文件

2017-12-18 22:49

134 查看

1、Freemarker模板的文件后缀名2、Freemarker其实是一种比较简单的网页展示技术,说白了就是网页模板和数据模型的结合体。这种结合模式的好处就是,分离了网页界面设计人员和编程人员的工作,让他们各司其职。据个人理解,Freemarker大致的工作方式是,网页模板里面嵌入了数据模型中的数据、Freemarker自定义流程控制语言、Freemarker自定义的操作函数等等,在装载网页的时候,Freemarker模板自动从数据模型中提取数据,并解释整个网页为我们熟知的HTML页面。在B/S程式设计中,常常有美工和程序员二个角色,他们具有不同专业技能:美工专注于表现——创建页面、风格、布局、效果等等可视元素;而程序员则忙于创建程式的商业流程,生成设计页面要显示的数据等等。很多时候,要显示的资料在设计的时候并不存在,它们一般是在运行时由程式产生的,比如执行“价格不高于800NT的USB Disk”查询的返回结果。这种技术需求产生了JSP等Scriptlet,JSP十分强大,但是也常常被滥用,并导致一些不良的后果,将逻辑和表现混合在一起。,破坏了美工和程序员职责的正常分解使JSP页面难以阅读和维护。模板引擎就是为了解决上面的问题而产生的。在设计HTML的时候,我们加入一些特定指令来指定要插入哪些数据,这些加了特殊指令的HTML或者其他文本,我们称为模板(Template)。而模板引擎会在输出页面时,用适当的数据替代这些代码模板和嵌入JSP的HTML是不同的,模板指令只有很有限的编程能力,可以避免混入商业逻辑。总结简单的说,FreeMarker就是一种用Java编写的模板引擎,它根据模板输出多种规格的文本。特别指出的是,FreeMarker与Web应用框架无关,它同样可以应用在非Web应用程序环境中,而且,FreeMarker并不是只能生成HTML页面,它也可以生成各种文本,如XML/RTF/Java源代码等。Freemarker是一个非常优秀的模版引擎,这个模版引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模版中,从而生成标准输出。FreeMarker特别适应与MVC模式的Web应用,通常有Java程序准备要显示的数据,由FreeMarker模版引擎来生成页面,而FreeMarker模版则提供页面布局支持,从而能更好地规范MVC架构,保证视图逻辑和业务逻辑分离。文章来源:http://blog.csdn.net/rangqiwei/article/details/8513482

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理

标签: 

freemarker

html

模板引擎

界面设计

布局

相关文章推荐

.ftl文件 是什么文件 Freemarker

.ftl文件 是什么文件

.ftl文件 是什么文件

ftl文件是什么文件

ftl文件 是什么文件 freemaker

.ftl文件 是什么文件 freemarker

linux下的 tar.gz文件和.rpm文件有什么最大的区别?

如何使用eclipse建立ftl文件

生成类库项目时同时生成的pdb文件是什么东东

有什么办法让Beyond Compare以网页形式显示文件

C++的头文件和实现文件分别写什么

windows/prefetch文件夹能删吗?里面都是些什么文件,有什么作用??

修改用户所在组,修改文件的所有者,明明是自己的文件什么不能解压?

.ascx是什么文件

freemarker插件-解决ftl文件显示问题

solaris下如何查看目录被什么大文件占用了

hiberfil.sys是什么文件及其关闭技巧

块存储、文件存储、对象存储这三者的本质差别是什么?

块存储、对象存储和文件系统: 它们对容器而言意味着什么?

【静态链接】第2章---------------------目标文件(它是什么)

新的分享

Html简单标签

HTML表单

仿京东商城html网页源码

HTML行内级元素之间的空格问题

HTML元素类型总结

HTML怎么设置下划线?html文字加下划线方法

HTML汉字编码标准介绍

html网页中使用希腊字母的方法

HTML基础详解(上)

HTML基础详解(下)

基于HTML十秒做出淘宝页面

【Python】300行代码搞定HTML模板渲染

章节导航

添加评论

分享网址

分享文章

返回顶部

https://www.geek-share.com/

GeekShare·极客分享·来自极客的分享 © 2016-2019 ·

粤ICP备17045047号

 

<

如何评价FTL团队新作《into the breach》? - 知乎

如何评价FTL团队新作《into the breach》? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册独立游戏SteamFTL策略战棋类游戏如何评价FTL团队新作《into the breach》?https://store.steampowered.com/app/590380/?utm_source=SteamDB&utm_medium=St…显示全部 ​关注者142被浏览136,460关注问题​写回答​邀请回答​好问题 3​添加评论​分享​27 个回答默认排序知乎用户​前端开发等 3 个话题下的优秀答主游戏创作者已经在 GDC(游戏开发者大会)上复盘过,这个游戏的设计过程和精髓都在里面了。这个游戏刻意设计为违反同类游戏的玩家直觉,玩家一开始会很不适应,但习惯后就会体会到这个游戏独特设计带来的乐趣。游戏一开始就给你三个机甲,让你面对多个怪物。玩家很容易凭直觉上手这款战棋游戏,开始操纵机甲杀敌,游戏迅速通过负反馈告诉玩家这条路走不通。操纵机甲杀敌,你会发现机甲的行动点数不够、血不够,杀不掉所有怪物,还很容易被怪物杀死。更重要的是,你尝试杀怪物时怪物在摧毁你要保护的建筑物,几盘下来你就因为建筑物被毁得太多而输掉战役。如果这时候就放下游戏,那是永远没办法体会到游戏的乐趣了。仔细思考一下自己是怎么输的,你很快会明白什么才是这个游戏里真正的血条:建筑物被毁数量!你的血基本上只减不加,没血了战役就结束,所以你的首要任务是避免建筑被毁。机甲并不是你需要保护的,有时候你宁愿让机甲挨一刀,也要避免建筑被刀,这跟传统的战棋游戏很不一样。如果无法杀死全部怪物,怎样能够避免建筑被毁呢?答案就是「拖字诀」。因为怪物进攻的回合是有限的,到了汇合限制它们就会撤退,所以你只要拖着它们无法破坏建筑就行。这也是一个跟传统战棋游戏很不一样的地方,传统战棋游戏都是要杀死所有敌人的。这个游戏还有一个神奇的地方,就是某些机甲的攻击方式能造成敌人位移,而且很多时候位移是这一回合的最优解。例如说,机甲打一下怪物往往只能造成一点伤害,但把不能飞行的陆地怪物推进水里就直接地形杀了。这也是违背传统战棋游戏的一个地方。你仅盯着你的机甲的伤害输出是没用的,因为伤害输出永远都不够。这个游戏上手后,你会更多地思考位移能造成的伤害,然后通过可控的机甲攻击顺序执行位移连招。游戏总共有 9 套设计不一样的三个机甲组合,每一套都有自己的特色,例如有一套是擅长用冰冻技术可以冻住敌人和冻住自己的,有一套擅长用火的,有一套擅长用酸液的。最后还有一套怪物仿生机甲,必须其他 8 套机甲都完美通关后才会出现。这么多机甲使得游戏可以重复玩很多遍,每次可以探索新的战术。发布于 2022-02-10 15:58​赞同 44​​1 条评论​分享​收藏​喜欢收起​无月白熊我是,神龙骑士王!!​ 关注前言:末日来临,地球母亲被强大的虫族所占据,人类在地面上近乎绝迹,只有零星的幸存者,建立起最后的人类基地,生活在高耸的云端之上。难道人类就要接受文明灭绝的必然结果吗?人类集结起最后的力量,研发出了与虫族作战的机甲,通过时空传送装置,将这些机甲投射到“重大灾难即将爆发之前”的过去。身为指挥官,我们能改写过去,拥抱全新的未来吗?没人知道结果,但为了渺茫的希望,我们每一位驾驶员心中都有冲锋陷阵的决心!而这首人类勇气伟大的赞歌,被后人称作“陷阵之志”。胜利目标与绝佳的氛围感单论作战的地图,陷阵之志这个8×8的舞台比不上大多数战棋游戏。Q版的像素画风,只能说是别具一格,也算不上精致。但沉重的故事背景,与独特的游戏模式,却让每一场作战莫名地多了一分悲壮的气氛。在《陷阵之志》中,我们的优点是拥有强大的机甲作战能力,可以预知敌人的行动意图以及环境的变化(风霜雨雪,飞机支援,火山爆发,地面塌陷)。但劣势则更为明显:我们只有三个机甲,面对的却是如潮水般汹涌的虫群。而我们想要获得胜利,则不单单只能考虑自己的存活,还要保证人类的建筑群,不会被炮弹余火波及,不会被虫族的尸体撞击,不会受到虫族的直接进攻。当建筑物遭到破坏,失去的不仅仅是为机甲提供电力的装置,还有那些将你当作“救世主”的平民百姓。每当一栋建筑倒塌,便将有数百名藏身于此的生命,瞬间灰飞烟灭。而当电力归零,我们的机甲将彻底失去动力,在这个时间线的救援行动就完全失败了。除此之外,游戏提供了丰厚奖励的次要目标,有的需要你守护列车,有的需要你摧毁水坝,有的则是希望你能够保护火箭发射,每一样任务都事关你从虫群威胁中解放整座岛屿后,能够获得多少公司声誉——而声誉即是你购买机甲装备与能量核心的重要财产。当你要拯救的东西太多,力量却有限,一种无力感便会油然而生。游玩这款游戏的心路历程也是如此,最初进入游戏时,总会为建筑物的损失而懊恼不已,会将人口损失归咎于自己的指挥失败。但当经历过多次失败之后,心态上也发生了微妙的变化,当战局进入死局时,我甚至开始会为了主要目标,或者为了使损失降到最低,放弃甚至主动攻击我本应守护的建筑物。这种奇妙的心态变化,让我偶尔会想,即使我拯救了这座岛屿的绝大多数人,在他们的口中,我是否会成为所谓的“冷血独裁指挥官呢?”或许,老练但天赋不足的战场指挥官,就是这样吧。当你重复了几次时间线,心中追求完美的执念也就释怀了。无论你如何强大,如何努力,仅仅有三个机甲的你,也无法使整个岛屿完全解放。每当守护的区域达到4块时,虫群就会对总部发动总攻,而你未来得及拯救的三块区域,则会彻底沦陷。于是,选择“最有价值”的地块进行保护,就变成了指挥官们共同的选择。驾驶员与机甲个性鲜明的驾驶员作为一款机甲与巨大虫族作战题材的游戏,强大的机甲与驾驶员自然必不可少。《陷阵之志》在机甲和驾驶员的设计上颇为用心,每个特殊驾驶员除了独特的能力外,还有自己专属的性格,有的人张扬喧哗,爱甩锅(喜欢华丽的表演,能够无视敌人,穿梭于敌群之中)。有的则对自己缺乏自信(悔棋次数+1又称时空跃迁),有的却又态度强硬,十足硬汉作风(可以为机甲覆盖坚甲,擅长与敌人硬碰硬),也有从贫民窟诞生的天才驾驶员,因此性格冲动,着急复仇(游戏开场前,移动数+3)。这些性格,与他们的专属能力是相对应的。制作的十分考究。需要格外注意的是,在一场战斗中,如果机甲被摧毁,虽然在下一关,机甲会得到完全修复,但其中的驾驶员却无法幸免于难。驾驶员通过个人技术为机甲赋予的加成,也将全部消失。虽然每个岛屿上都有数千人口,但哪怕是一名最普通的驾驶员也需要经过千挑万选,更不论那些陪伴了你进行了多个时空旅行的经验丰富的机师了。游戏最初始的驾驶员 拉尔夫·卡松颇有RPG游戏中“老骑士”的风格。先期机甲数量匮乏,玩家经验缺失时,急需依靠提升机师等级,赋予机甲额外能力,以此提升战斗力。而在特殊驾驶员越来越多,队伍战斗力越来越强之后。卡松便逐渐的淡出了人们的视线。风格独特的机甲《陷阵之志》中,总共有九套作战机甲,除了第一套“虫洞行者”外,其它8套都需要金币解锁。而除了最后一套彩蛋机甲外,前面的八套机甲则会陪伴玩家走过绝大多数的战斗。这些机甲分为:主要,野蛮,远程,科学 四大种类。主要类别的机甲,多数以近战人形,高攻为作战特点。野蛮型机甲,则擅长直线型的位移攻击。远程型机甲,多擅长隔山打牛,但无法处理近距离包围的敌人。科学类机甲,没有伤害技能,但却是整个队伍的核心辅助。每个作战队伍,都包含了以上四个类别的其中三种类型机甲。除此之外,机甲还有“附带护甲”以及“飞行”等特殊额外词条。附带护甲的机甲,会使自身受到的武器伤害减一,而飞行机甲,则会无视绝大多数坑洞,河流,湖泊等地形限制。令人拍案叫绝的是,游戏中的每套机甲,其作战能力都是相辅相成的。以“闪电战队”举例,主要机甲的连锁闪电,可以通过远程机甲丢出的石头进行导电。野蛮类型的机甲自身无伤害,拥有坚硬效果,即可通过拉近敌人,并依赖自身机甲的优秀承伤能力,为主要机甲连接起大片的敌人,以达到传递高额伤害的效果。再拿冰冻泰坦举例,威力强大的双面火神炮,是正反方向各开一枪,有时这种攻击方式,会误伤到我方的重要建筑。而冰冻泰坦的远程机甲,则是在冻结敌人时,同样会冻结自身,这样会影响到自己下一回合的行动,某些时候,较好的走位,就可以利用火神炮的多余输出,来击破负面的冰冻效果。有趣的搭配组合除了同组机甲的配合经过了周密的设计,不同组的机甲有时互相配合也能起到奇妙的化学反应。比如极点守卫的野蛮机甲,它的作战效果是对敌方造成2点伤害并造成位移,自身则需要受到1点伤害——行动方式非常疯狂(最适合它的驾驶员也是一名硬汉)。而当危险机甲的科学型搭配“杀虫回血”后,这个负面效果则顿时不复存在了。当然,强大的机甲,自然也离不开天赋异禀的驾驶员。当效果疯狂的机甲,配合上能力出众的驾驶员,忽然就有了热血动漫中那种独有的“中二”味道。“新人,等一等,那个机甲从来没人能够驾驭,擅自启动的话……哎?”“这发动机的轰鸣声,正合本大爷的胃口,下面,就将虫族的坐标交给我吧。”在不同时间线驾驶员额外能量槽的加持下,有时我们也可以将同种类型的机甲武器互换,以此产生更加奇妙的化学反应。譬如将危险机甲的主要机甲跳跃能力,与钢铁柔道家的过肩摔能力进行调换。利用钢铁柔道家的先天抗揍效果,忽略掉机甲跳跃时自身造成伤害的负面效果。轮回于时间线的绝望旅途拯救世界就像外出打工,本来都是奔着“改变世界”才踏上的旅途,最终发现的真相,却是我们所做的一直都是可有可无的重复劳动。正如一些特殊驾驶员所说,每个“时间舱”的降落,都预示着有一条时间线因为作战失败而毁灭了。游戏玩家在游戏中的确会获得一条乃至数条时间线的最终胜利,成为了人们口中的传说与英雄。但为了这些胜利,有多少时间线因为我们的细小失误而被最终毁掉了呢?因此,令人细思极恐的一幕发生了:我们的行动,究竟是为了拯救人类?还是仅仅为了慰藉我们那颗不服输的心?我们真的能够被称作“英雄”吗?或许最后答案,会因为“这不过是一款游戏,何必要想那么多呢?”的通用回答,使我们绝大多数人中止思考。而我想说的是,在没有那么多“时间线”让你试错的当下,我们应该自己努力,多思考,解决自己面对的困境,而不该寄希望于“时空行者”这样的强大力量来拯救我们一个个平凡的个体。在他们已经因为无数次失败而麻木的心中,我们或许不过也是坍塌楼宇下的一个小小数字而已。编辑于 2022-02-12 10:46​赞同 11​​添加评论​分享​收藏​喜欢

【深入浅出SSD】一文聊聊固态硬盘SSD核心技术之一的FTL - 知乎

【深入浅出SSD】一文聊聊固态硬盘SSD核心技术之一的FTL - 知乎首发于深入浅出闪存产品及应用知识切换模式写文章登录/注册【深入浅出SSD】一文聊聊固态硬盘SSD核心技术之一的FTL存储印象​​电子设备制造业 产品总监深入浅出SSD系列:长期介绍SSD、PSSD的科普知识与专业知识。敬请关注 @存储印象 。本文主要介绍固态硬盘SSD中的核心技术应用——FTL。一、FTL是什么?固态硬盘SSD中有一个FTL的概念,所谓的FTL是指Flash Translation Layer(FTL是该英文的缩写),中文意思是闪存转换层,在闪存转换层完成主机(HOST)逻辑地址空间到闪存Flash物理地址空间的翻译(或称为映射Mapping)。相当于库房有个记账的,固态硬盘SSD把每一笔用户逻辑数据写入闪存地址空间,库房记账的便把该逻辑地址到物理地址的映射关系记录下来,便于快速且正确读取数据——当主机要读取该数据时,固态硬盘SSD便会根据库房记账的记录下来的这个映射关系,快速地从闪存读取这笔数据然后返回给用户。FTL处理的最原始且基本的功能就是对逻辑地址空间到物理地址空间的映射处理,然而,FTL在固态硬盘SSD中要做的工作远不于此。对于固态硬盘SSD而言,常用的存储介质是NAND Flash,也还有用其他存储介质,如RAM、3D XPoint等新型存储介质。以下所提及的固态硬盘SSD均指使用NAND Flash(NAND闪存,简称闪存)的固态硬盘SSD。二、FTL还能做什么?FTL要做的其他工作与闪存的一些重要特性有关。1)闪存块(Block)的擦写特性闪存块(Block)不能覆盖写,而是先擦除后才能写入,一次擦除只能写入一次。当将一笔新数据写入的时候,不能直接在老地方更改而是必须写到一个新的位置,Firm Ware(FW,固件)需要维护一张逻辑地址到物理地址的映射表,而往一个新的位置写入数据会导致位于老位置上的数据变为无效,从而形成了垃圾数据,这些垃圾数据会占用闪存空间,因此需要FTL做些清道夫的工作——垃圾回收(Garbage Collection,缩写为GC),处理的方法是把若干个闪存块上的有效数据搬运出来,将其写到某个新的闪存块里,然后把之前的这些闪存块擦除使这些闪存块变成可用的闪存块。垃圾回收(GC)成为FTL要做的一件非常重要的事情。2)闪存块有擦写寿命限制每一个闪存块天生都有擦写寿命限制的,每对闪存块擦除一次,都会对该闪存块造成一定的磨损,为了描述闪存块的磨损程度,便提到了一个擦写次数(Program/EraseCount,缩写为P/E)的概念,用P/E来衡量闪存块的寿命状况。这就引出了一个问题,如果一直集中往某几个闪存块上擦除并写入数据,那么这几个闪存块估计很快就会因P/E耗尽而亡,显然一个固态硬盘是绝对不允许这样的极端情况发生的,而是要所有闪存块都可以均摊数据的写入而实现磨损均衡,这就需要FTL做Wear Leveling的工作,让数据能均衡地写入到每一个闪存块上,让每一个闪存块都可以磨损均衡,保证固态硬盘SSD的整体寿命,确保固态硬盘SSD可以具有最大的数据写入量。3)闪存的数据保持(Data Retention)特性闪存的数据保存与电荷息息相关。电荷会流失,虽然这个流失的时间在常温下可以长达十年,也可以短至几年或几个月,如果是在高温环境下,电荷流失的速度会加快,电荷流失会导致存储在闪存上的数据丢失。因此固态硬盘SSD要每隔一段时间(如两三个月)最好至少点亮通一次电使用一下,这样FTL就可以扫描内存,检测数据保持问题,如果检测到存在数据保存问题,则启动搬动数据,防患于未然。这是好FTL应该具有的处理数据保持问题的能力。但是要注意的是,如果固态硬盘SSD长期不上电,那么FTL也就没有运行的机会,也就处理不了电荷要流失而到此数据保存的异常问题。4)每个闪存块有读的次数影响如果对某个闪存块读的次数太多了,可能会令该存放在该闪存块的数据出现混乱,造成读干扰的问题,处理这个读干扰的问题也可以交给FTL去负责。当某个闪存块读的次数即将到预定的阈值时,FTL便将这些数据从该闪存块上搬走,挪到其他安全的闪存块上,从而避免数据出错。5)闪存的坏块现象闪存属于半导体介质,有坏块很正常,有些坏块是天生就存在的,只不过被屏蔽了起来,有些是随着固态硬盘SSD的不断使用,在使用过程中产生了新的坏块。坏块会导致擦写失败或读取失败,ECC不能纠正数据错误。FTL很忙的,坏块管理的任务也会落到FTL的身上。6)MLC或TLC等会存在Lower Page corruption的问题在MLC或TLC闪存颗粒中,对Upper Page/ExtraPage(和Lower Page共享存储单元的闪存页)写入时,倘若发生异常掉电,那么可能会把之前Lower Page上成功写入的数据破坏,因此可以在好的FTL上加入相应的处理机制来尽量避免发生这样的问题。7)改善固态硬盘SSD的性能和可靠性NAND闪存的类型分为SLC、MLC、TLC、QLC、PLC等,目前消费级的固态硬盘主流是TLC,TLC或MLC的读写速度比不上SLC,但是可以将部分TLC或MLC模拟成SLC模式来使用,来提升TLC或MLC固态硬盘的性能和可靠性。好的FTL可以利用该特性去改善固态硬盘SSD的综合性能和可靠性。综上所述,固态硬盘SSD中的FTL除了负责基本的地址映射之外,还可以处理垃圾回收(GC)、闪存块磨损均衡(Wear Leveling)、数据保存(Data Retention)、坏块管理、读干扰(Read Disturb)问题等,随着闪存长期使用,其质量变差,FTL还要针对具体的闪存特性,去负责一些特殊处理来使固态硬盘SSD获得好的性能和可靠性。三、FTL与主机端、设备端的关系FTL分为基于主机(Host Based)和基于设备(Device Based)两种状况,前者表示FTL是在主机(Host)端完成的,后者则是在设备(Device)端实现的。前者使用的是自己计算机的处理器CPU和内存资源,后者使用的是固态硬盘SSD上的控制器和RAM资源。码字不易,不接受未经授权的转载、搬运。如果文章内容对你有帮助,欢迎点赞支持,以及收藏哦~我是 @存储印象【可点击关注我】,目前专注于存储、数码电子、家电产品的知识科普和选购建议,希望我的文字可以帮助你学习到相关产品的应用知识和选购技巧。关注我,长期推出相关产品的【硬核攻略】系列及相应的实用应用知识。【硬核DIY】固态硬盘SSD选购指南与推荐(超1万字选购攻略)【硬核攻略】移动固态硬盘(PSSD)选购指南【硬核攻略】U盘产品知识科普与选购,有容乃大【硬核攻略】通俗易懂的microSD存储卡(TF卡)知识科普及选购秘诀,拒绝被坑!【硬核攻略】电脑内存条知识、选购指南及推荐,不仅仅是性价比还有品牌参考文献:1、深入浅出SSD:固态存储核心技术、原理与实战 / SSDFans 著.-北京:机械工业出版社,2018.6(2021.5重印) 编辑于 2022-11-17 22:11・IP 属地广东固态硬盘FTLSSD​赞同 14​​22 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录深入浅出闪存产品及应用知识介绍FLASH闪存产