Я использую phantomjs для рендеринга нескольких специализированных html-страниц в PDF; так как это сервис, который нужно масштабировать, я стараюсь уменьшить как можно больше накладных расходов. Все страницы имеют одинаковую структуру, используют один и тот же CSS и в большинстве случаев похожи, поэтому я решил повторно использовать одну и ту же страницу html и просто вызвать javascript для замены содержимого. Таким образом, он не должен перезагружать CSS и веб-шрифты и т. Д.Как определить, когда phantomjs выполняется рендеринг?
Чтобы сделать вещи несколько более сложными, я контролирую рендер из node.js, используя интерфейс отдыха, который я создал с помощью веб-сервера phantom.js. Веб-сервер отлично работает - если я не повторно использую страницу, все работает отлично.
Проблема, с которой я сталкиваюсь, заключается в том, что у меня нет возможности узнать, когда я могу сообщить об этом узлу (через http-соединение), что файл готов к использованию.
if (filename.substr(-4) == ".pdf") {
p.paperSize = {format: 'Letter', orientation: 'portrait', margin: '1cm'};
}
// loadPage evaluates javascript in the page to have it load the contents
// of the url into its body; the callback is triggered by a console.log
// inside the page that tells us when the ajax request has finished and
// the content is ready to be rendered.
loadPage(p, url, function() {
console.log("Loaded", url);
p.render(filename);
console.log("Rendered?", url);
// sendJSON returns the response to the node client
sendJSON(response, {filename: filename, status: "success"});
});
У меня есть проблема в том, что sendJSON вызывается до того p.render отделки - это не блокирует. Честно говоря, я бы не ожидал, что это будет блокирование, учитывая, что это javascript, но он также, похоже, не принимает функцию обратного вызова, чтобы сообщить мне, когда она закончится.
Кто-нибудь нашел решение проблемы этого типа?