[新闻] D Web Template, Fastcgi4d , FlvGet

sleets 2011-02-20
sleets 写道
3个D写的小程序,都是Web相关的。

D Web Template
这个是使用dmdscript实现的模板, 语法还算灵活。 
使用pcre替代了dmdscript的regexp, 因为Walter写的regexp很多特性不支持,性能也不怎么样。
这个东西是这两天写的,很多地方没测过。
http://gool.googlecode.com/files/D_Web_Template.zip
D里已经有人实现了一些web模板, 但大都不支持运行时重新载入(编译时生成)。运行时模板对业务界面分离支持更好,安全性更高,也更容易实现多语言支持和风格热切换。
在渲染时使用自然缓冲代替了dmdscript的字符串操作,性能提升20倍左右。
在运行时,可以对模板编译结果缓冲,这样渲染时触发的GC行为大大减少。速度超快。
本来计划实现http://haml-lang.com/模版引擎,结果dmdscript太不标准,还需要做很多修改。


Fastcgi4d , 这个我只是在win32下编译成功了。 替代了tango的Format后性能有极大提升。
http://dsource.org/projects/fastcgi4d/ticket/7#comment:9


FlvGet
一个基于libev的web桌面应用,这个花了我很多时间,主要是libev 4.04之前的windows版一直有bug。
http://gool.googlecode.com/files/FlvGet.zip

sleets 2011-02-20
D测试代码

void main(string[] argv) {

	//GC.disable;
	Tpl_Factory tf;
	tf.Init;

	auto user_list	= tf.create("UserList", "test.tpl") ;
	
	StopWatch sw;
	sw.start;
	scope(exit){
		sw.stop;
		log(" use time=", sw.peek.msecs, "ms" );
		user_list.clear;
	}
	
	auto v1	= new V1;
	
	user_list.assign(v1, "var1");
	
	V1[3] v2;
	foreach(int i, ref _v;v2) _v = new V1;
	user_list.assign(v2, "v2");
	
	
	auto vv2 = new V2;
	user_list.assign(vv2, "vv2");
	
	user_list.assign(argv, "argv");
	
	user_list.assign(environment.toAA, "env");
	user_list.render;
	log("", user_list.buffer);
}


class V1 {
	long v1_i = 123 ;
	string v1_v1 = "Test 123" ;
	string v1_x1 = "321";
}


struct V2 {
	long v2i = 1234444 ;
	string v1 = "V2.v1.string" ;
	private string x1 = "V2 x1";
}



test.tpl
{=argv[0]}

{macro test(args)}
	{foreach v in args}
		`{=v_index}` => `{=v}` <br/>
	{/foreach}
{/macro}

{=var1.v1_i}

{=test(env)}




output
引用

test.d(50) tpl.exe



123



`` => `H:=H:\top\bin` <br/>

`OS` => `Windows_NT` <br/>

`TMP` => `H:\tmp` <br/>

`TEMP` => `H:\tmp` <br/>

`Path` => `C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;D:\usr\local\OpenVPN\bin` <br/>

`windir` => `C:\WINDOWS` <br/>

`PROMPT` => `$P$G` <br/>

`ComSpec` => `C:\WINDOWS\system32\cmd.exe` <br/>

`asl.log` => `Destination=file` <br/>

`PATHEXT` => `.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH` <br/>

`APPDATA` => `C:\Documents and Settings\Administrator\Application Data` <br/>

`COLINUX` => `F:\vm\co` <br/>

`HOMEPATH` => `\Documents and Settings\Administrator` <br/>

`USERNAME` => `Administrator` <br/>

`HOMEDRIVE` => `C:` <br/>

`USERDOMAIN` => `HP6520S` <br/>

`CLIENTNAME` => `Console` <br/>

`SystemRoot` => `C:\WINDOWS` <br/>

`USERPROFILE` => `C:\Documents and Settings\Administrator` <br/>

`SystemDrive` => `C:` <br/>

`SESSIONNAME` => `Console` <br/>

`LOGONSERVER` => `\\HP6520S` <br/>

`ProgramFiles` => `C:\Program Files` <br/>

`COMPUTERNAME` => `HP6520S` <br/>

`PROCESSOR_LEVEL` => `6` <br/>

`ALLUSERSPROFILE` => `C:\Documents and Settings\All Users` <br/>

`FP_NO_HOST_CHECK` => `NO` <br/>

`PROCESSOR_REVISION` => `0f0d` <br/>

`CommonProgramFiles` => `C:\Program Files\Common Files` <br/>

`NUMBER_OF_PROCESSORS` => `1` <br/>

`PROCESSOR_IDENTIFIER` => `x86 Family 6 Model 15 Stepping 13, GenuineIntel` <br/>

`PROCESSOR_ARCHITECTURE` => `x86` <br/>


test.d(30)  use time=1ms
sleets 2011-02-20
......
Global site tag (gtag.js) - Google Analytics