21

1つのプロジェクトでは、静的な.htmlページを生成する必要があります。これは、リモートサーバーで公開されます。

SQL Serverデータベースからデータを取得するac#コードからこれらのファイルの作成を自動化する必要があります。

データは頻繁に変更されることはなく(4〜5か月ごと)、このWebサイトは頻繁に使用されます。

asp.net MVC3のかみそりのシンタックスが非常に効果的であることがわかったので、asp.net MVC3/Razorを使用してそれらの.htmlページを生成できるかどうか疑問に思いました。

それで:

  1. これは良い考えですか?
  2. はいの場合、良い方法は何ですか?
  3. あなたがそれをする別の良い方法を考えるならば、どちらの方法ですか?

お手伝いありがとう

編集

答えに関しては、正確にする必要があります。多くの理由(ロード(毎月ロードされる数百万のページ)、統合(最適化されたapacheにページを統合する)のために、Webキャッシングを使用したくない/使用する必要はありません。 Webサイトの別の部分)、ページ数(キャッシュは、同じページを長時間使用している場合にのみ役立ちますが、2500ページになるため、非常に高いキャッシュタイムアウトを設定した場合を除き、マーフィーの法則に従います。 、私はそれらを頻繁に生成する必要があります)それで私は本当に何かを検索してHTMLページを生成します。

編集2 新しい制約があります:/これらのテンプレートはローカライズする必要があります。次のかみそりコードと同等のものが必要であることを意味します。@MyLocalizationFile.My.MyValue

編集3 現在、私は動的なWebサイトを作成し、そのWebサイトでhttpクエリを呼び出して、生成されたHTMLを保存することを考えています。しかし、httpを回避する方法はありますか?つまり、http呼び出しをシミュレートし、出力ストリームと呼び出されたURLを指定します(GET呼び出しのみ)。

以前の読み込み数は実際には過小評価されていました。実際には、毎日100万を少し超える訪問者があり、1日あたりの読み込み数は約1400万ページです。

4

7 に答える 7

7
  1. はい、そうです。結果をキャッシュできる場合でも、HTMLページは常に高速になり、サーバーリソースの使用量が少なくなります
  2. 良い方法は、かみそりのビューをテキストに変換してから、テキストをhtmlファイルとして保存することです。
  3. 別の方法としてT4テンプレートを使用することもできますが、Razorをお勧めします。
于 2012-06-25T11:19:52.013 に答える
3

Razor Engine(NuGet-link、そのWebサイト)を使用できます。このようにして、asp.netMVCを使用せずにコンソールアプリケーションからテンプレートを作成できます。

私はそれを次のように使用します:

public string ParseFile<T>(string fileName, T model) {
    var file = File.OpenText(fileName);
    var sb = new StringBuilder();
    string line;
    while ((line = file.ReadLine()) != null)
    {
        // RazorEngine does not recognize the @model line, remove it
        if (!line.StartsWith("@model ", StringComparison.OrdinalIgnoreCase))
            sb.AppendLine(line);
        }
        file.Close();

        // Stuff to make sure we get unescaped-Html back:
        var config = new FluentTemplateServiceConfiguration(
                    c => c.WithEncoding(RazorEngine.Encoding.Raw));

        string result;
        using (var service = new TemplateService(config))
        {
            return service.Parse<T>(sb.ToString(), model);
        }
    }
}
于 2012-06-25T12:16:46.273 に答える
2

静的なHTMLページを生成するよりも、毎回動的にページを生成する方が良いと思いますが、パフォーマンスを向上させるためにキャッシュを使用します。

詳細については、ASP.NETMVC3を使用したキャッシュに関する次の記事を参照してください。

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

于 2012-06-25T11:13:56.800 に答える
1

最後に、通常のasp.net MVC Webサイトを作成し、WebClientを使用してページに移動してページを生成しました。

このように、Webサイトのプレビューを表示したり、Razor+MVCヘルパーのフルパワーを楽しんだりできます。

于 2012-09-17T07:16:19.150 に答える
0

Webサイトを事前にレンダリングする努力に値する、パフォーマンス上の理由はありますか?何ページについて話しているのですか?コントローラはどのようなパラメータを取りますか?バニラキャッシングが要件を満たさない場合、私にとって最善のアプローチはディスクベースのキャッシングプロバイダーです...

http://www.juliencorioland.net/Archives/en-aspnet-mvc-custom-output-cache-provider

于 2012-06-25T11:14:07.163 に答える
0

T4テンプレートまたは同様のテンプレートソリューションを見てください

于 2012-06-25T11:15:00.607 に答える
0

私は同様の解決策に取り組んでいます。私のWebサイトはステージング環境で正常に実行されており(ASP.NET + DB + CMS)、wgetを使用してクロールし、静的なhtmlページを生成します。アセットを含むこれらの静的HTMLページは、AmazonS3Bucketにアップロードされます。そうすれば、Webサイトは完全に静的になり、依存関係はなくなります。

ウェブサイトの特定のページをクロールして高速化する毎日のタスクを計画しています。たとえば、毎日クロール/ニュースのみを実行します。

私はあなたがすでに解決策を見つけたことを知っています、しかし多分この答えは他の人に役立つかもしれません。

于 2015-05-09T23:06:13.067 に答える