我试图在两者Vue.js
和Angular
SPA中使用谷歌的DFP,但它似乎导致内存泄漏.
在Angular中,您可以看到概念验证https://github.com/jbojcic1/angular-dfp-memory-leak-proof-of-concept.对于广告,我使用的是ngx-dfp npm
包(https://github.com/atwwei/ngx-dfp).要重现拉动并运行概念证明项目,请转到主页,该主页最初将在Feed中包含3个广告,并执行堆快照.之后,通过使用标题中的链接转到没有广告的页面,再次执行堆快照,您将看到在销毁插槽之后保留插槽引用,这会导致内存泄漏.
在Vue中,我有一个创建和销毁广告位的组件,我会在内容Feed中动态添加它们.当我离开页面时,组件被销毁,并且在beforeDestroy钩子中,我调用destroySlots,但似乎有些引用仍在那里.
这是我的dfp-ad组件:
<template>
<div :id="id" class="ad" ref="adContainer"></div>
</template>
<script>
export default {
name: 'dfp-ad',
props: {
id: { type: String, default: null },
adName: { type: String, default: null },
forceSafeFrame: { type: Boolean, default: false },
safeFrameConfig: { type: String, default: null },
recreateOnRouteChange: { type: Boolean, default: true },
collapseIfEmpty: { type: Boolean, default: true },
sizes: { type: …
Run Code Online (Sandbox Code Playgroud) 这是我目前的代码.
// Head
<script async='async' src='https://www.googletagservices.com/tag/js/gpt.js'></script>
<script>
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
</script>
<script>
googletag.cmd.push(function() {
googletag.defineSlot('/xxxxxx/Mobile_ad', [[375, 60], [728, 60]], 'div-gpt-ad-154504231384304-0').addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.enableServices();
});
</script>
// Body
<div style="width:100%;text-align:center;margin-bottom:10px">
<div id='div-gpt-ad-1545041384304-0'>
<script>
googletag.cmd.push(function() { googletag.display('div-gpt-ad-1545045413584304-0'); });
</script>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
但它在侧边iframe中显示具有固定宽度和高度的横幅.
我怎样才能使这个响应?以前我使用自定义html和同步渲染,但现在已弃用.
实现这一目标的最佳方法是什么?
但为此,我必须提到屏幕的每个高度和宽度.
我正在http://development-client-server.com/ds/上使用Google pubads,这是很有效的,直到你进入实际的故事页面(见http://development-client-server.com/ds/)当右上边栏广告加载然后快速消失时,语音更常见的自闭症/).
我把它缩小到我用来粘贴左边的社交媒体栏和右侧的工作列表div(在Google广告所在的位置下)的stickySidebars功能.但是,粘性功能应该不会影响Google广告吗?
这是我正在使用的JS函数,我已经多次重写了(并且已经尝试与客户讨论已经使用过).
<script>
// Sticky Sidebars
function stickySidebars() {
var length = $('.post-content').height() - $('article .sharing-links').height() + $('.post-content').offset().top;
var lengthSidebar = $('.sticky-container').height() - $('aside .job-listings').height() + $('.sticky-container').offset().top -30;
$(window).scroll(function () {
// Sharing Links
var scroll = $(this).scrollTop() + 90;
var height = $('article .sharing-links').height() + 'px';
if (scroll < $('.post-content').offset().top) {
$('article .sharing-links').css({
'position': 'absolute',
'top': 'auto',
'bottom': 'auto'
});
} else if (scroll > length) {
$('article .sharing-links').css({
'position': 'absolute', …
Run Code Online (Sandbox Code Playgroud) 关于如何将事件注册到 gpt 服务似乎有几个问题:
Google Publisher Tag registering to Events
registering to events with google publisher tag
文档中明确定义了如何执行此操作:
googletag.pubads().addEventListener('eventName', callbackFn);
当组件 (React) 安装在Google 的本教程中window.googletag.cmd.push
所述的回调函数内时,我将我的事件添加到服务中。
现在的问题是,每次我更改页面时,都会向服务添加更多事件侦听器。通过使用此方法(来自文档),我可以确保只有一个事件侦听器在实际存在的插槽上执行:
googletag.pubads().addEventListener('impressionViewable', function(event) {
if (event.slot == targetSlot) { // will only run on target slot
// Slot specific logic.
}
});
Run Code Online (Sandbox Code Playgroud)
但是更多的事件侦听器将保持活动状态并继续执行(不执行 if 语句中的代码)。
现在,我假设谷歌会实现这样的东西(在 componentWillUnmount 上运行):
googletag.pubads().removeEventListener('eventName', callbackFn);
但它在文档中不存在,我似乎找不到任何方法从服务中删除活动事件侦听器?
我正在尝试根据浏览器大小加载横幅.因此,在我有一个728x90横幅的位置,300x250将显示它是否在移动设备上.
问题是,728x90在桌面上加载.但在移动设备上300x250没有显示.
我试着按照这里的例子
<script type='text/javascript'>
googletag.cmd.push(function() {
// This mapping will only display ads when user is on desktop sized viewport
var mapLeader = googletag.sizeMapping().
addSize([0, 0], []).
addSize([768, 200], [728, 90]).
build();
// This mapping will only display ads when user is on mobile or tablet sized viewport
var mapLeader2 = googletag.sizeMapping().
addSize([0, 0], []).
addSize([768, 200], []). // Desktop
addSize([300, 200], [300, 250]). // Tablet
build();
window.LeaderSlot= googletag.defineSlot('/XXXXXXX/leaderboard-1', [728, 90], 'div-gpt-ad-1455251022145-0').
defineSizeMapping(mapLeader).
setCollapseEmptyDiv(true).
addService(googletag.pubads());
window.LeaderSlot= googletag.defineSlot('/XXXXXXX/medium-rectangle-1', …
Run Code Online (Sandbox Code Playgroud) 我需要知道是否googletag.pubads().disableInitialLoad()
被调用,在这种情况下我将使用a display
和a refresh
调用加载广告,否则我将使用just加载它display
.我的假设是,如果我总是打电话display
加上refresh
我将收到2个广告请求,除非disableInitialLoad
被调用.
有可能知道吗?
我看到一些 github 评论说 model() 调用的损失的输出是困惑的形式:https : //github.com/huggingface/transformers/issues/473
但是当我查看相关代码时... https://huggingface.co/transformers/_modules/transformers/modeling_openai.html#OpenAIGPTLMHeadModel.forward
if labels is not None:
# Shift so that tokens < n predict n
shift_logits = lm_logits[..., :-1, :].contiguous()
shift_labels = labels[..., 1:].contiguous()
# Flatten the tokens
loss_fct = CrossEntropyLoss()
loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1))
outputs = (loss,) + outputs
return outputs # (loss), lm_logits, (all hidden states), (all attentions)
Run Code Online (Sandbox Code Playgroud)
我看到正在计算交叉熵,但没有转换为困惑。损失最终在哪里转化?或者是否已经存在我不理解的转变?
我正在研究一些确定 GPT 广告在页面上的可见性的功能,并且我正在使用每个广告的“slotRenderEnded”事件来确定广告当时是否确实“可见”。
这是对广告可见能力的准确/适当衡量吗?有时似乎会触发此事件,但后来我实际上还无法在网站上看到图像,有时直到大约 300 毫秒之后。此外, slotVisibilityChanged 事件似乎并不总是触发,例如,如果您根本不滚动页面。
再说一次,我的主要问题是:slotRenderEnded 事件是否足以让我假设页面上的广告可以查看?
我查看了Google发布商代码参考,并决定将一些事件添加到我的广告位.如果我只定义了一个插槽,它的效果很好.如果我添加更多插槽,事件会在我的控制台上不断重复我有插槽的次数.
所以,如果我做这样的事情:
<script type='text/javascript'>
googletag.cmd.push(function() {
var slot1 = googletag.defineSlot('/123456/leadeboard', [[728, 90]], 'div-gpt-ad-123456789-0').addService(googletag.pubads());
var slot2 = googletag.defineSlot('/123456/leadeboard', [[728, 90]], 'div-gpt-ad-123456789-0').addService(googletag.pubads());
var slot3 = googletag.defineSlot('/123456/leadeboard', [[728, 90]], 'div-gpt-ad-123456789-0').addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.pubads().addEventListener('slotRenderEnded', function(event) {
console.log('Slot has been rendered:');
});
googletag.enableServices();
});
</script>
Run Code Online (Sandbox Code Playgroud)
我的console.log将是3x"已经渲染的插槽:".如果我从defineSlot部分中删除了两个.addService,它只会将console.logs一次,但不会呈现广告.
有没有办法如何删除额外的日志记录而不打破其他一切?一段时间后它会变得非常混乱.
谢谢!
gpt ×9
google-dfp ×4
javascript ×4
adsense ×2
ads ×1
angular ×1
css ×1
html5 ×1
jquery ×1
perplexity ×1
sticky ×1
vue.js ×1
vuejs2 ×1