Вы можете использовать Partial View для объекта Contributor
. Частичный вид:
@model Contributor
using (Html.BeginForm("ContributorUpdate", "YourController"))
{
@Html.HiddenFor(model => Model.Id)
<div class="formrow">
@Html.ValidationSummary(true)
</div>
<h2>@Html.TextRaw("AuthorInfo", "Author")</h2>
<div class="formrow">
@Html.EditorFor(model => Model.FirstName)
<div class="formvalidation">
@Html.ValidationMessageFor(model => Model.FirstName)
</div>
</div>
<div class="formrow right">
<input type="hidden" name="formsubmitted" value="true" />
<input type="submit" class="button" value="@Html.Text("ButtonText", "Save")" />
</div>
}
Вид будет:
@foreach (var contributor in Model.Contributor)
{
@{Html.RenderPartial("Conributor", contributor);}
}
И код контроллера:
[HttpPost]
public ActionResult Mine(Conributor conributor, string newuser)
{
//
}
Вы производили отладку? Регистрация микровремени
в различных точках вашего кода.
Вы обнаружите, что загрузка RSS-канала, а не его анализ, требует времени, но вы можете обнаружить, что это связано со временем, которое требуется для создания каждого RSS-канала.
Сохраните эти десять каналов как статические файлы xml, наведите на них свой сценарий и посмотрите, как быстро он загрузится.
Вы можете кэшировать их, но у вас все равно будет проблема, связанная с возрастом загрузки страницы, если срок кеширования истек.
У вас может быть скрипт PHP, который запускается в фоновом режиме (например, через задание cron) и периодически загружает каналы, на которые вы подписаны, в базу данных, тогда вы можете намного быстрее получать / фильтровать данные, когда захотите показать это.
Вы можете загружать RSS-каналы параллельно с curl_multi . Это может ускорить ваш скрипт, особенно если вы сейчас используете блокирующие вызовы.
Небольшой пример (из http://www.rustyrazorblade.com/2008/02/curl_multi_exec/ ):
$nodes = array('http://www.google.com', 'http://www.microsoft.com', 'http://www.rustyrazorblade.com');
$node_count = count($nodes);
$curl_arr = array();
$master = curl_multi_init();
for($i = 0; $i < $node_count; $i++)
{
$url =$nodes[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($master, $curl_arr[$i]);
}
do {
curl_multi_exec($master,$running);
} while($running > 0);
echo "results: ";
for($i = 0; $i < $node_count; $i++)
{
$results = curl_multi_getcontent ( $curl_arr[$i] );
echo( $i . "\n" . $results . "\n");
}
echo 'done';
Дополнительную информацию можно найти на Асинхронные / параллельные HTTP-запросы с использованием PHP multi_curl и Как использовать curl_multi () без блокировки (среди прочего).
Кстати, чтобы обрабатывать каналы после их загрузки с помощью curl_multi, вам, конечно же, придется использовать simplexml_load_string вместо simplexml_load_file.
да, конечно, кэширование - единственное разумное решение.
лучше настроить задание cron для получения этих лент и хранить данные локально.