Re: [問題] 一個 JS 的系統問題

看板Ajax作者時間15年前 (2009/01/16 00:58), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串7/7 (看更多)
※ 引述《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

01/16 01:18, , 1F
TiddlyWiki太屌了 不知道它是怎麼io覆寫自己的..
01/16 01:18, 1F
程式一旦被瀏覽器讀進記憶體執行,他的檔案本身就已經沒有鎖定,所以當然可以 IO。 ※ 編輯: chweng 來自: 218.165.34.174 (01/16 01:30)

01/17 00:43, , 2F
這程式太屌了,很多我的構想都做到了@@
01/17 00:43, 2F
文章代碼(AID): #19RsiVPq (Ajax)
討論串 (同標題文章)
文章代碼(AID): #19RsiVPq (Ajax)