2012-06-16 57 views
4

我的應用程序的一部分大量使用圖像處理。裁剪,過濾器等使用ajax帖子和圖像處理服務器端使用各種方法。用戶執行的每個操作操作都會創建一張物理圖像,而不會刪除原始圖像,以便允許「撤消」系統使用戶能夠將其圖像恢復到任何以前的時間點。在這種情況下,Base64還是靜態圖像最好?

當用戶完成會話或關閉瀏覽器時,所有這些「臨時」圖像都會通過帖子刪除到服務器。

對於現代瀏覽器,我們將使用html5擴展圖像處理功能。使用畫布可以讓我們執行所有這些圖像操作客戶端,而無需通過編碼和動態嵌入base64數據創建額外的靜態圖像。

我擔心的是'撤銷'系統。使用靜態回退方法,我們存儲一個包含靜態圖像鏈接的對象數組。這提供了完整的撤消功能。但是,如果我們這樣做所有客戶端,那麼這個數組必須實際包含每個'撤消'點的base64數據的副本對於用戶正在操作的每個圖像(典型用例可能是20個原始圖像,每個圖像都有4-5個撤消點)。

在我花了幾天原型設計之前,我希望有人對這種方法有一些評論。這是個好主意嗎?餿主意?從瀏覽器性能和內存使用的角度來看,存儲base64映像的龐大數據對象是一個糟糕的主意嗎?

任何想法,歡迎提前致謝。

+0

從瀏覽器性能和內存使用的角度來看,存儲base64映像的龐大數據對象是一個糟糕的主意嗎?您預期它們有多大?一邊是1400px,一邊是5px,沒有。另外,你怎麼知道他們何時關閉瀏覽器? – jcolebrand

+0

它們可以是任何高達1200px的東西。我們使用JavaScript onbeforeunload事件,當用戶關閉瀏覽器並向服務器發送包含圖像文件名的帖子時觸發。它奇妙地工作。圖像不被刪除的唯一時間是瀏覽器崩潰。但是我們有清理方法設置爲在給定時間後自動發生。 – gordyr

+0

我認爲這個想法很好。從下面複製我的數學:如果每張圖像的大小約爲1200像素(如1.2千像素或0.0012百萬像素),那麼我們可以假設每幅圖像爲〜24kb,因此如果我們在其上添加30%,那麼每張圖像約爲30k。 20張圖像次數5個備份點數爲100分,次數爲30k圖像,爲3MB。當然,我的電腦上有更大的audiofiles。我認爲將這樣的東西存儲在本地計算機上的本地存儲中是非常重要的。 – jcolebrand

回答

0

這是一個壞主意。 Base64將實際數據編碼的存儲量增加30%。如果您的服務器上圖像可通過實際URL訪問,請考慮保留對從DOM中分離的<img>元素的引用。

+0

這並不意味着這是一個可怕的想法。如果每幅圖像的像素大約爲1200像素(如1.2千像素或0.0012像素),那麼我們可以假設每幅圖像爲〜24kb,因此如果我們在其上增加30%,則每幅圖像的大小約爲30k。 20張圖像次數5個備份點數爲100分,次數爲30k圖像,爲3MB。當然,我的電腦上有更大的audiofiles。 – jcolebrand

+0

另一種方法是執行所有操作客戶端,並將base64數據發回服務器以生成實際圖像?這是否是最佳折中方案? – gordyr

+0

的確,這並不是一個可怕的想法,但如果你實際上並不需要B64格式的話,保留B64數據是沒有意義的。取決於實際需要這些圖像的代碼。 – lanzz