用基64来创建数据资标符
给定一个CSS文件,我们想用数据资标符替换所有特定图像网径实例来减少请求数.我们写一个小的D程序来干本替代.
如何做...
我们执行如下步骤创建一个数据资标符:
用标.文件.读()加载图像文件.
用标.基64创建数据资标符如下面代码所示:
用标.文件.读文字加载CSS文件.
用标.数组.替换来用数据资标符替换网径.
用标.文件.写保存CSS文件.
在主函数聚拢他们,你得到如下代码:
它如何工作...
d标准库的标.文件模块,除了目录列表函数,也包含高级文件函数.函数读,读文字,和写能一步访问文件内容.读(文件名)函数一次读整个文件,返回空[],其必须转为另一个待用类型(例如,符[]或正字节[]).读文字(文件名)函数验证文件是UTF8的并返回一个串.写(文件名,内容)函数直接把内容写到文件,如已存在,覆盖它.
d标准库的标.数组模块包含许多可用成员风格语法调用的通用函数来操作数组.因为D中串仅是个字符数组,所有这些函数也对串管用.替换函数在干草堆搜索所有出现的针头并用替代实参替换他们,返回新数据而不必修改原先的.
我们造数据资标符函数使用标.基64来创建在CSS文件用的数据资标符.标.基64模块使用一个带值形参的模板来自定义从如下源来的行为:
D的模板可带值作为编译时形参,其在代码中可同样用作一般运行时形参.这儿,实现可交换出三个字符所以其他基64变体可轻易用代码.别名行给了一个方便名到不同参数.别名是不同类型,类似基64的子类,其用虚函数或在构造器里参数化它.然而,不像类,在此没有运行时开销.编译时值在生成代码中是精确等价于字符字面量.
因为基64.加密带正字节[]及我们造数据网径函数带有通用数组类型空[],我们必须转换数据来用它.我们在空[]中取类型的形参因为我们检查数据但不存储或修改它,它可以是任意类型.所有数组隐式转换到常(空)[],使它(或在空[])很适合只需要数据的函数.标.文件.写的数据实参也是常(空)[].
最终,你可能注意到造数据网径返回一个可变引用并赋给一个即不变字符数组的串.正常,不会编译,所以为什么在此管用?关键是因为造数据资标符被标记为纯.除了参数,纯函数不允许改变.即返回值可假定是独特.相关函数是标.异常中的假定独特,其按d标准库理念用来转换可变数据到不变数据.它只应用在当你确定引用是真正独特且并不存在到数据的其他指针.在调用它后,你应该停止用原先的引用.纯函数隐式使用这个同样的准则:只要引用不是通过其实参列表(在D中函数是强纯.)传递,就不可能有其他引用.所以,可以假定它是独特的.即如你停止用旧引用,它保证不变!我们将稍后在本书学习更多纯函数.
领取专属 10元无门槛券
私享最新 技术干货