如何用freemaker创建ftl

如何用freemaker创建ftl,第1张

首先需要一个ftl格式的模板文件,里面就是HTML标签+freemarker的标签 然后在程序中使用这个模板文件,用数据填充模板中freemarker用到的数据,就可以动态生成对应的HTML文件了。

1

freemarker是一个模版引擎;所谓模版引擎,他就是一个模版,数据你必须提前给它设置好,它才能显示;

2

<name>${name}</name>使用的是El表达式

3

综上所述,你必须通过后台,解析xml才能在ftl页面使用数据;如果你是标准的xml文件,freemarker提供了一个工具,直接调用就可以解析,不用你自己处理

var json='[{name : "广州", value : 38}]';//后台返回的json串格式 var data = eval('('+json+')');//这个就是想要的格式 alert(data[0]['name']);

原文:[ 绝不只是堆砌闪存!SSD 中的软件算法你知多少 ]

SSD 可不是把闪存焊在一起就能做出来的

FTL:没它 SSD 就无法识别 我们都知道 SSD 的硬件构成和 HDD 完全不同,因此 *** 作系统识别 HDD 的很多机制,并不适用于 SSD。例如,硬盘是由盘片来构成的,盘片是同心圆,把圆分成一个个小小的扇形,数据在这些扇形中储存,这些扇形就被称之为扇区。 *** 作系统把扇区组织起来,构成 FAT32、NTFS 等文件系统,用户才得以访问文件/文件夹而不是一个个的扇区物理地址。基本上, *** 作系统建立文件系统的基础就是扇区。

HDD 硬盘盘片上的扇区,SSD 没有这个结构

SSD 使用的是闪存,闪存结构和 HDD 不同,需要 FTL 层和文件系统对话,把 SSD 的架构虚拟成 HDD 的算法,叫做“FTL”(Flash Translation Lay)。FTL 算法是由 SSD 主控提供的,比 *** 作系统更加底层。FTL 作为一个软件中间层,可以把 SSD 基于 Page 的硬件架构映射成 HDD 基于扇区的硬件架构。 *** 作系统为 SSD 建立文件系统的时候,有了 FTL, *** 作系统看到的东西和 HDD 没啥两样,就可以用传统的方法对 SSD 进行分区、格式化等 *** 作,不需要使用专为 SSD 而生的文件系统。得益于 FTL 软件算法,SSD 才能无缝接班 HDD,没它 SSD 就无法识别。

GC 垃圾回收:没它 SSD 就巨慢无比 闪存的机制是比较独特的,当你向闪存写入数据的时候,必须先把闪存中的数据擦除掉,才能写入。同时,闪存的最小读写单位是 Page,但最小的擦除单位是 Block。一个 Block 中包含了多个 Page,SSD 工作一段时间后,就没有哪个 Block 中的 Page 都是空白的了。如果要擦除某个 Block,就必须先把这个 Block 中存在有效数据的 Page 复制备份到其他地方,接而进行擦除,这样一来才不会丢数据。

每个 Page 都可以写入数据,但覆盖写入需要先擦除原先的数据,一擦除整个 Block 都会被擦除 有效数据的 Page 要复制到什么地方进行备份呢?一些比较烂的产品,会把这些 Page 的数据复制到缓存,待到 Block 擦除后,再把数据写回去,这样一来 SSD 的写入速度就更加悲剧了——既要写原来的数据,又要写新数据。解决这个问题的,就是 SSD 中的 GC(Gabage Collection),也就是垃圾回收算法。 GC 垃圾回收算法看着有点类似碎片整理,它可以把某个 Block 中的存在有效数据的 Page,移动到其他 Block 中,从而让 *** 作系统得以擦除这整一个 Block。接着再往该 Block 写数据,就不需要把备份到其他地方的 Page 也写回去了。CG 发生在 FTL 层,不同的 SSD 的 GC 算法是不一样的,GC 算法的不同,深切影响着 SSD 的性能。

Trim:大大提高垃圾回收效率 Trim 是一种用来增加 GC 垃圾回收效率的算法。没有 Trim 的话,会出现这样一种情况:在 *** 作系统删除一个文件,实际上数据在物理层面上并没有被删除。于是,SSD 的某个 Block 所有 Page 都会被填满,待到真正写入数据的时候,才被迫进行 GC 垃圾回收,主控才开始把有效数据的 Page 移动到其他 Block 上,进而擦除该 Block。如此一来,速度就很慢,SSD 用久了每次写入数据都得先 GC,用户体验非常不好。

CMD 中查询“fsutil behavior QUERY DisableDeleteNotify”,如图显示就是开启了 Trim

Trim 就可以大大缓解这种情况。 *** 作系统删除数据后,Trim 会告诉 SSD 主控哪些 Page 的数据对应着删除的数据,这些 Page 会被标记成为无效 Page。接着,在闲暇时段,SSD 主控就会主动进行 CG,把有效数据的 Page 移走,然后擦除这些 Block 的数据,提前为 *** 作系统的数据写入准备好足够多的 Block。如此一来,就算是长期使用,只要 SSD 不是装得太满,性能都不会有太过明显的下滑,大大提升了用户体验。Trim 算法是由 *** 作系统提供的,Win7、Android 43 以后的 *** 作系统都支持 Trim。

磨损平衡:保证闪存寿命被均匀消耗 我们知道闪存是有擦写寿命的,例如 MLC 闪存只能够擦写数千次,TLC 闪存只能够擦写数百次等等。其实以现在的 SSD 容量,总擦写数据量是非常惊人的,例如 256G 的 SSD,寿命是 500 次擦写(P/E)的话,那么就需要写入 125TB 的数据,闪存才寿终正寝——就算你每天写入 10G 数据,也需要用三十多年才能把闪存给写挂,更何况很少人每天往 SSD 中写 10G 数据。

TLC 的擦写次数不尽如人意,但正常使用其实也很难挂掉

但是很多朋友仍不信任 SSD 的寿命,理由是 SSD 的这个寿命,是根据全盘容量来估算的。有的朋友认为,平时读写数据,会集中读写 SSD 的其中一部分闪存,这部分的闪存寿命就会损耗得特别快。一旦这部分闪存挂了,那么整块 SSD 也就挂了。然而事实真的是这样吗?

事实当然并非如此。实际上,SSD 拥有磨损平衡(Wear Leveling)算法,令所有闪存磨损度尽可能保持一致。SSD 的磨损平衡算法大致分为动态和静态两种。动态的算法就是当写入新数据的时候,会自动往比较新的 Block 中去写,老的闪存就放在一旁歇歇;而静态的算法就更加先进,就算没有数据写入,SSD 监测到某些闪存 Block 比较老,会自动进行数据分配,让比较老的闪存 Block 承担不需要写数据的储存任务,同时让较新的闪存 Block 腾出空间,平日的数据读写就在比较新的 Block 中进行——如此一来,各个 Block 的寿命损耗,就都差不多了。

总结 SSD 绝不是把闪存堆在一起就能做成的,要让 SSD 稳定、快速地运行,还有赖于种种软件算法。在选用 SSD 的时候,可以多关注一下该 SSD 所使用的主控方案,关注该主控的算法是否靠谱;在使用 SSD 时,要选择适合的 *** 作系统,并及时更新 SSD 的固件和驱动。如此一来,才会得到更好的体验。

以上就是关于如何用freemaker创建ftl全部的内容,包括:如何用freemaker创建ftl、请问各位,FreeMarker怎么用专门用来读取XML数据吗、如何使用ftl 生成echarts 图表数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9574975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存