Сначала мы решили встроить v8 в MVC.net и WebApi и реализовать шаблоны с подчеркиванием или усами, чтобы сохранить точно такие же шаблоны.
Даже если у вас одинаковые шаблоны, логика рендеринга может отличаться, и вам необходимо постоянно реорганизовывать шаблоны, представления внешнего интерфейса и представления внутреннего интерфейса. Особенно, если вы делаете отдых API.
Наконец, мы выбрали другое решение, обеспечивающее альтернативу javascript для требований доступности и seo, с использованием браузера без заголовка (PhantomJs) для отображения страниц.
Это довольно просто реализовать, вам нужно установить PhantomJs на ваш сервер, добавить javascript, чтобы полностью отобразить страницу со всеми взаимодействиями javascript и обслуживать вывод html.
Вы можете найти пример использования здесь: http://backbonetutorials.com/seo-for-single-page-apps/
Пример приведен для node.js, но его легко реализовать с помощью ASP
Фантомный скрипт, который мы используем, похож на
//phantom-server.js
var page = require('webpage').create();
var system = require('system');
var lastReceived = new Date().getTime();
var requestCount = 0;
var responseCount = 0;
var requestIds = [];
var startTime = new Date().getTime();
page.onResourceReceived = function (response) {
if(requestIds.indexOf(response.id) !== -1) {
lastReceived = new Date().getTime();
responseCount++;
requestIds[requestIds.indexOf(response.id)] = null;
}
};
page.onResourceRequested = function (request) {
if(requestIds.indexOf(request.id) === -1) {
requestIds.push(request.id);
requestCount++;
}
};
// Open the page
page.open(system.args[1], function () {});
var checkComplete = function () {
// We don't allow it to take longer than 5 seconds but
// don't return until all requests are finished
if((new Date().getTime() - lastReceived > 300 && requestCount === responseCount) || new Date().getTime() - startTime > 5000) {
clearInterval(checkCompleteInterval);
console.log(page.content);
phantom.exit();
}
}
// Let us check to see if the page is finished rendering
var checkCompleteInterval = setInterval(checkComplete, 1);
Есть также услуги, которые дают вам тот же результат: http://prerender.io/