1

私はこれを持っています:

(defn page1 []
  (layout/render
   "index.html" 
   ({:articles (db/get-articles)})))

関数

db/get-articles

キー本体を持つオブジェクトのリストを返します。記事の本文を解析し、存在する場合は本文の部分文字列"aaa12aaa""bbb13bbb"、などに置き換える必要があります。RAMを大量に消費しないようにするにはどうすればよいですか?正規表現の使用は効果的ですか?"aaa22aaa""bbb23bbb"

アップデート:

置き換える必要があるパターンは、"[something="X" something else/]" です。ここで、X は数値であり、不明です。X を変更する必要があります。置換するパターンが多数ある場合もあれば、まったくない場合もあります。

4

3 に答える 3

3

Java のString.replaceorString.replaceAllまたはclojure.string関数を使用するだけです: replace/ replace-first

時期尚早の最適化に時間を無駄にすることはなく、単純なソリューションが機能するかどうかを最初に測定します。記事の内容がどれほど大きいかはわかりませんが、問題にはならないと思います。

本当に最適化する必要があることが判明した場合は、データ ストレージから記事のコンテンツをストリーミングするように切り替え、手動で置換を実装するか、streamflyerなどのライブラリを使用してその場で変更を実行してから、記事のコンテンツを HTTP に送信する必要があります。応答ストリーム。

于 2016-05-31T07:03:43.483 に答える
1

このようなものは十分に速いはずです:

(mapv
  (fn [{:keys [body] :as m}]
    (assoc m :body
             (reduce-kv
               (fn [body re repl]
                 (string/replace body re repl))
               body
               {"aaa12aaa" "bbb13bbb",
                "aaa22aaa" "bbb23bbb"})))
  [{:body "xy aaa12aaa fo aaa22aaa"}])

文字列が 1 回だけ出現することを保証できる場合はreplacereplace-first.

于 2016-05-31T08:23:43.877 に答える