我被引导相信绑定你的控件的最佳点是PreRender.因为所有控件都准备好了,这是渲染之前的最后一个阶段等.这是正确的还是应该将控件绑定在不同的点?
非常感谢
路易
我希望使用预呈现来加速页面,使用Chrome预渲染:
https://developers.google.com/chrome/whitepapers/prerender
我想知道这是否适用于ajax请求?我有一组链接,通过jQuery $ .get加载到他们的页面中的模态.我还有一个脚本,为这些链接创建prerender标记.
但是,ajax负载似乎没有任何性能提升.Prerendering正在运行(通过上面的链接中的故障排除部分进行检查),它似乎加快了标准链接,但不是ajax请求.
它可能不会以这种方式工作,但我无法在其他地方找到任何关于它的信息.
我有一个传统的backbone.js应用程序,我目前正在进行改造,可以被搜索引擎正确抓取.我已经决定使用prerender.io的Node.js + Phantom.js系统来为搜索引擎提供我的javascript驱动网站的静态HTML呈现.但是,使用prerender.io的一个要求是将所有哈希URL转换为hashbang(因此site.com/#gallery应该是site.come /#!gallery).我的网站目前仅使用哈希进行网址路由.如何将其切换为hashbang?
我不确定如何设置prerender.io和node.js。在prerender.io上,它只是说要添加
app.use(require('prerender-node').set('prerenderToken', 'TOKEN'));
Run Code Online (Sandbox Code Playgroud)
在应用程序内。
我的代码如下所示:
var express = require('express');
var app = module.exports = express();
app.use(require('prerender-node').set('prerenderToken', 'TOKEN'));
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
当访问http://192.168.xx:3000 / http://myangularjswebsite.com/?_escaped_fragment_时,加载需要花费几秒钟的时间,然后呈现空白页面。
有什么建议么?
我遇到了一些会话功能以及Chrome预取/呈现方式的问题.我试图将一个论坛软件(esoTalk)与自定义laravel 4.3应用程序连接.我有认证事件监听器,导致laravel创建一个php会话(此外还有内置的laravel会话),允许论坛和应用程序共享身份验证详细信息.在访问论坛时,如果用户未登录 - 但此共享信息存在(即用户已登录laravel应用程序),论坛将使用会话中提供的信息登录该用户.
在大多数情况下,这可以正常工作,除了Chromes预取似乎是破坏事物.如果我使用调试器监控论坛,我可以看到,当我输入论坛网址时,但在我点击之前输入chrome将访问论坛.通过调试器,我可以看到它完成了它需要做的所有事情,并且成功登录.作为最后一步,论坛重新生成会话ID以停止劫持.这就是它破裂的地方.看起来chrome忽略了新的会话ID(通过http SetCookie标头发送),这样当我点击Enter时,我会使用原始会话ID进入论坛(并发出一个全新的请求).此ID不存在,因此我设置了一个新的ID,因此失去了我的登录状态.对于用户而言,这看起来就像他们从未登录过.
我已经google了高低,以获得关于如何解决这个问题的建议.我不愿意删除会话ID重新生成,因为它确实用于安全目的.我也无法禁用chrome预取/渲染.总而言之,我似乎有点腌渍.
我创建了一些复制它的代码.虽然它依赖于预渲染(因此你需要通过地址栏多次击中每个文件)
// test1.php
<?php
function regenerateToken()
{
session_regenerate_id(true);
$_SESSION["token"] = substr(md5(uniqid(rand())), 0, 13);
$_SESSION["userAgent"] = md5($_SERVER["HTTP_USER_AGENT"]);
}
// Start a session.
session_set_cookie_params(0, '/');
session_name("SessionBork_Test_session");
session_start();
$_SESSION["SentryUserId"] = '99';
regenerateToken();
header('Content-Type: text/plain');
foreach ($_SESSION as $k => $v) {
echo $k . " = " . $v . "\n";
}
Run Code Online (Sandbox Code Playgroud)
访问test1.php后跟test2.php,你应该看到一堆会话变量输出.一旦预渲染/取出,你就会开始收到破碎的信息.
// test2.php
<?php
function regenerateToken()
{
session_regenerate_id(true);
$_SESSION["token"] = substr(md5(uniqid(rand())), 0, 13);
$_SESSION["userAgent"] = md5($_SERVER["HTTP_USER_AGENT"]);
}
// Start a session.
session_set_cookie_params(0, '/');
session_name("SessionBork_Test_session"); …Run Code Online (Sandbox Code Playgroud) 我建立了一个大型的angularJS网站,并通过部分加载json文件使其成为多语言.我的网站上满是这些字符串:
{{ 'TITLE' | translate }}
Run Code Online (Sandbox Code Playgroud)
我不知道如何让他们对SEO友好.我在互联网上找到了很多解决方案,但也有很多人表示不再需要它,因为Google和Bing可以扫描角度项目.
所以我将我的项目设置为html5 = true,但它创建了一个<base>错过的错误.所以我实现了一个<base href="/">但是我的项目后来被部署到子文件夹/ staging /所以所有链接都被破坏了.(我的开发和生活环境有不同的基础)
我很高兴依赖像prerender.io这样的第三方
什么是让你的Angular项目SEO友好的最新方法.还有localhost解决方案吗?Grunt可以预渲染我的所有页面,以便我可以在构建脚本中实现它吗?
在让Google Crawler解析我们的AngularJS网站时遇到一些麻烦,我们正在使用Prerender来为我们的网页提供易于抓取的版本.
这一点运作良好 - 除了网站管理员工具表明由于Prerender的延迟,我们的网站速度已经大大恶化.我们担心这会影响排名.
所以有两个问题:
Google是否在测量网站速度时使用Prerender页面 - 或者我们网站的(真正的)支持Javascript的版本?我们怀疑它是前者.
一种可能的解决方案是缓存Prerendered页面.然而,由于页面被放入缓存并返回到爬虫之间的时间延迟,这些缓存页面可能与用户看到的不完全匹配 - 例如,我们可能会向页面添加其他产品,标题/元标记反映产品数量任何时候都可以使用.标题,元描述和页面内容的这些小差异是否足以冒着隐形惩罚的风险?如果是这样,缓存的替代方法是什么?
非常感谢任何帮助.
我正在尝试为我的ember应用程序创建预渲染服务器.
我安装了ember-prerender(https://github.com/zipfworks/ember-prerender),使用/ example中提供的初始化程序,将其部署在我的一台服务器上.
但是当我尝试启动它时:
[Renderer 0] Engine starting up (phantom)
[Renderer 0] Restarting rendering engine in 25000 seconds after it failed
with error: Phantom encountered an error: TypeError:
'undefined' is not a function (evaluating 'u.bind(e)')
Run Code Online (Sandbox Code Playgroud)
我不确定在哪里看.我试过了:
XContentReady似乎被触发)jsdom,而不是phantom(给出:[Renderer 0] Restarting renderer, timed out while initializing)我不知道现在在哪里看.最糟糕的是我几天前就开始工作了(参见:Ember预渲染:初始化时超时)
编辑:
我不认为这个问题与代码有任何关系,因为我对以前工作的版本进行了硬重置.
编辑2:我在一台新服务器上开始新鲜,现在我得到了Phantom崩溃的错误消息:
[Renderer 0] Restarting rendering engine in 25000 seconds
after it failed with …Run Code Online (Sandbox Code Playgroud) 我刚刚在我的项目中添加了ember-cli-fastboot(github),以便为爬虫机器人提供预渲染服务器.
执行以下安装步骤后,启动server(ember fastboot --serve-assets)时出现错误消息:
jQuery is not defined
ReferenceError: jQuery is not defined
at <anonymous>:66304:16 [...]
Run Code Online (Sandbox Code Playgroud)
缓存中有什么要清理吗?我错过了一些明显的东西吗
我正在使用Nginx Server浏览基于AngularJS的网站(HTML模式为True以避免URL中的#).除此之外,我已经配置了Varnish以减少服务器上的负载.因此Varnish在端口80上运行,Nginx在端口81上运行.我使用prerender.io来获取AngularJS网站的SEO.
问题是,当prerender尝试重新缓存角度URL时,Nginx返回404错误代码.
我的nginx.conf如下:
server {
listen 81 default_server;
listen [::]:81 default_server;
server_name abcxyzabc.com;
root /var/www/html/abcxyzabc/;
location / {
proxy_set_header X-Prerender-Token ****************;
set $prerender 0;
if ($http_user_agent ~* "baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator") {
set $prerender 1;
}
if ($args ~ "_escaped_fragment_") {
set $prerender 1;
}
if ($http_user_agent ~ "Prerender") {
set $prerender 0;
}
if ($uri ~* "\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|doc|avi|ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|torrent|ttf|woff|svg|eot)") {
set $prerender 0;
}
#resolve using Google's DNS server to force DNS resolution and prevent caching of IPs
resolver 8.8.8.8;
if …Run Code Online (Sandbox Code Playgroud)