作者chweng ()
看板Ajax
标题Re: [问题] 一个 JS 的系统问题
时间Fri Jan 16 00:58:04 2009
※ 引述《danny0838 (道可道非常道)》之铭言:
: 资料档就像网页一样,集中放在某个相对路径下,
: 在 server 上就是取 server 上的资料档;
: 在本机就是取本机的资料档。
: 伺服器上的情况就是,程式和资料档全在伺服器上,
: 使用者可自由浏览,(当然,无法修改)。
: 基本上完全自由,直接输入网址就能存取。
: 本机的情况是,把程式和资料档打包给使用者下载,
: 可以离线使用,也可以自行新增、修改资料档,甚至程式,打造属於自己的「电子书」。
: 为减少维护负担,所以不想分别写二套程式。
: 为减少伺服器负担,所以不想写 serverlet(更主要原因是 serverlet 不能本机跑),
: server 只放资料档和程式档,剩下全丢给使用者的浏览器跑。
: 整体来说,资料档其实就像一个个网页,
: 程式的用途在於提供搜寻、分析、比对、切换样式等功能。
: 所以 AJAX 不能读 server 的档案架构,是吗?
当然是不行。
: 想确认您指的是 JAVA 还是 Javascript?
我讲的是 JAVA,跟 Javascript 是完全不一样的东西。
如果 server 想要动到 client 的东西,就必须靠 JAVA 或 ActiveX。
不过现在已经知道这不是你的需求,所以这边就不再提了。
: 不管是 AJAX 或 HTA 或 OOXX,只要放在本机和在放伺服器上都能跑,
: 而且大部分浏览器都能正常执行,(就是前面的三点需求),在下就可以接受。
: : 简单讲是这样没错...
: 所以如果要能放在伺服器上也能放在本机跑,基本上资料档路径表要另外自己做?
要在 server 上跑,资料档的路径列表要自己另外做;要在 client 上跑则不用。
硬要一以贯之的话,那就是统统自己做吧。
: 因为目前尚未成功让 AJAX 在本机跑...
: 而用 iframe 可以达成放在本机或放在伺服器的需求...
: 简言之,如果 AJAX 可以纯本机执行、跨浏览器执行,
: 在下就考虑改用,而且在下的确是比较希望能用 AJAX...。
使用 iframe 的方案,应该就只是传统的超连结吧?
这样的话,你应该就没办法针对资料档的内容做解析,
除非你要在每个资料档都嵌入同样的一份解析程式码。
: : 最简单当然是 txt,使用者程度够的话,建议以 html 来做就可以了,
: : xml 我是觉得不很必要,除非你打算顺便纪录诸如文章日期等等的额外资讯。
: 目前其实算是假 xml,除了宣告标签和一二层标签以外,
: 整个内容实际上还是自订语法的纯文字档。
: 实际是透过 xsl 插入 html 标签和分析用的程式档,然後让浏览器读取。
所以你每个档案都要插入 xsl stylesheet、以及分析用的 Javascript 程式码?
: 不用 txt 是因为 txt 直接开启是看到原始码,而不是分析过语法的结果;
: 而 html 需要在资料档里插入太多可能会变动的标签,将来万一要改会改到死;
我不是很懂你所谓变动的标签是什麽?
如果你要指定样式的话,用 CSS 不是更方便吗?
: 所以目前是用 xml,如此可以直接点二下开启,并自动载入分析程式。
那你似乎得在每个资料档都写入同样的程式内容。这样以後还是会改到死吧?
: 目前也考虑用 txt,但主要障碍是在下还无法本机跑 AJAX,
: 若用 iframe 开 txt,就无法知道何时完成载入(若是 xml 就可以插语法通知主程式)。
重点不在於 iframe 开什麽档,而是一旦你用了超连结 + iframe,根本无从得知
是否读取完毕,也无法针对内容做解析。
还有,从 xml 插语法也不会让浏览器自动执行,xml 只是纯粹的记载资讯的格式,
只有 well-formed or not 的分别。而 HTML 或是 XHTML 才能执行你所谓的语法。
: 这是一个电子书程式,并建有搜寻功能,
: 搜寻档案时自然必须先载入,
: 在关闭浏览器前,在下预期使用者在使用的前前後後,会频繁重复使用档案,
: 而因为开启档案时,必须交由程式分析语法,再呈现内容,
: 如果没有缓存机制,每次开启同样的档案都重新分析一次语法似乎颇浪费资源...
: 而如果使用缓存机制,似乎会增加记忆体的负担...
: 所以目前也不确定缓存是否比不缓存好。
如果考虑到资料档的数量会很大的话,全部一次载入绝对不是个好主意。
而且事实上如果你只单纯搜寻关键字,那根本也不需要解析就能够搜寻吧?
只有在使用者要求输出的时候再去做解析不就好了?
: : 要做到最大的变化性,我想 HTML 会比什麽 BBCode 或是维基语法还要优秀很多。
: 这问题就像为什麽网路论坛和维基百科不开放 HTML...
: 因为在下不预期使用者会懂 HTML 和 CSS,
: 采用自制语法就是为了让使用者能方便地自由编辑。
: 另外还有一个原因是让程式能分析「文意」,
: 例如「注解」、「标题」、「附注」等,能够采用特定的格式,
我并不清楚你设计的这套程式,所面对的使用者是什麽样的层级?
不过,若要说你不预期使用者会懂 HTML & CSS,那麽你又为何预期他们
会懂 BBCode 或维基语法?後者真的会比 HTML 易学吗?我不这麽认为。
在我的观点认为,所谓的 BBCode 和维基语法,只不过是 HTML 的折衷,
是为了不让使用者有意无意地插入一些具破坏性或恶意的内容。
你要说文意、注解、标题、附注等等的语意导向标签,
我只能说 HTML 比他们都要完整多了。
p 是段落;h1 ~ h6 是标题,还可以分不同的层级、重要性;
注解或附注可能接近 title 属性,或是用 abbr、acronym 标签;
强调可用 strong 或 em;列表有 ol 和 ul...太多太多了。
而且使用者基本上完全不需要关心 CSS,这可以由你自己替他们指定好,
甚至还可以设计成布景主题,换一套 CSS 就把整个风格换掉。
: 认定的方式就是范例写的那样,很明显意思是用 [note] 框整段。
不当嵌套的状况太多太复杂了,如果你的使用者只会犯范例内的错误,
那当然是好解决,如果不是呢?
: 另一个常见的情况就是,「换行」通常会被编译成<p></p>,
只换一行的认定为 <br />,换两行的才认定为 <p></p>,这样应该可以减少一些问题。
: 如果使用者把标签跨段使用,很容易造成不适当的嵌套。
: 说了这麽多,其实在下要的只是,如果有一段文字:
: [tag]我是一段文字[/tag]
: 要如何用 js 语法得知「一段文字」的所有母标签?
: 感谢您的回覆(_ _)
最後,稍微提一下我自己设想的流程。
1. 使用者启动程式,程式先取得档案列表逐一列出。而列出的项目名称怎麽决定呢?
a. 要用档案名称?放本机的档案当然没问题,不过如果是放 server 的话,
档名通常会建议不要用中文,那麽这个标题势必非常受限。
b. 在档案列表中顺便附加标题?这样之後要登载、修改资料档,复杂度都会提高。
c. 逐一把每个档案都读进来?别闹了...如果有五百个档案呢?要每一个都
从 server 读回 client 解析吗?同样的,在伺服器上搜寻也是不可行!
2. 使用者点选了某个档案,此时你要取得资料档内容并且解析、显示到网页上。
这边我想你得分成两边来写。
a. 本机的况状,我先假设无法使用 AJAX,那麽要取得档案内容,你得动用
到 File System Object。这个我写 HTA 时用过,你一定要用 HTML 的话,
当然也是可以达成。然後你另外也得要懂 DOM 操作。
b. 在伺服器的时候,你当然可以用 AJAX 去取资料,分析之後再显示给使用者。
这比较简单,只牵涉到 AJAX 和 DOM 操作技巧。
3. 如果使用者想搜寻...前面第一点已经讲过,要搜寻 server 上的东西不可能,
除非你用 php 一类的程式去做。那麽在本机方面呢?你可以从档案列表中逐一
开启每个资料档,但先不要解析(不过就算解析,也不会花掉太多时间的),
然後依照使用者设定的条件去比对,比对符合的项目另外建一个列表,
於全部比对完成之後一次显示给使用者。
我的感想是,我觉得你以为硬把两个程式结合在一起,可以省写程式的工,
但事实上我觉得并没有省下多少,而且又坚持要用纯 HTML + Javascript 搞定,
这样反而是多了很多後续维护的麻烦程度。光是那个档案列表,时间一久
应该就会发现那极难维护...
最後,我比较想建议你打破现有的思维,去看一下一个叫做 TiddlyWiki 的程式...
只不过,那个似乎并不是一般人能够达到的境界...
而如果你要稍微退而求其次,只要求在使用者自己的电脑跑就好。
那我正好写过一个类似的小程式,跟你的情况有一些些相同之处,不妨参考看看。
http://www.badongo.com/file/12914268
稍微解说一下,我这个范例里面,除了主程式之外,还付了两个测试用的资料档。
当然你可以任意自己用记事本或是其他纯文字编辑程式去增删这些资料档。
程式会自动侦测,每次执行时都会列出所有可用的资料档让使用者做选择。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.165.34.174
1F:推 tomin:TiddlyWiki太屌了 不知道它是怎麽io覆写自己的.. 01/16 01:18
程式一旦被浏览器读进记忆体执行,他的档案本身就已经没有锁定,所以当然可以 IO。
※ 编辑: chweng 来自: 218.165.34.174 (01/16 01:30)
2F:推 danny0838:这程式太屌了,很多我的构想都做到了@@ 01/17 00:43