KR20210089145A - 점진적인 api 응답들 - Google Patents

점진적인 api 응답들 Download PDF

Info

Publication number
KR20210089145A
KR20210089145A KR1020217011503A KR20217011503A KR20210089145A KR 20210089145 A KR20210089145 A KR 20210089145A KR 1020217011503 A KR1020217011503 A KR 1020217011503A KR 20217011503 A KR20217011503 A KR 20217011503A KR 20210089145 A KR20210089145 A KR 20210089145A
Authority
KR
South Korea
Prior art keywords
content item
content
response
content items
fragments
Prior art date
Application number
KR1020217011503A
Other languages
English (en)
Inventor
존 앤소니 디베이
압델라만 아살
아만딥 싱 그루알
레자 모하메드 에크발 로툰
놀란 오'브라이언
Original Assignee
트위터, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 트위터, 인크. filed Critical 트위터, 인크.
Publication of KR20210089145A publication Critical patent/KR20210089145A/ko

Links

Images

Classifications

    • H04L51/16
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/216Handling conversation history, e.g. grouping of messages in sessions or threads
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/248Presentation of query results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/38Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/40Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data
    • G06F16/44Browsing; Visualisation therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/40Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data
    • G06F16/48Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q50/00Systems or methods specially adapted for specific business sectors, e.g. utilities or tourism
    • G06Q50/01Social networking
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • G09G5/395Arrangements specially adapted for transferring the contents of the bit-mapped memory to the screen
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/07User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail characterised by the inclusion of specific contents
    • H04L51/18Commands or executable codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/234Monitoring or handling of messages for tracking messages
    • H04L51/32
    • H04L51/34
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/52User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail for supporting social networking services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/338Presentation of query results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/50Information retrieval; Database structures therefor; File system structures therefor of still image data
    • G06F16/53Querying
    • G06F16/538Presentation of query results

Abstract

콘텐츠 아이템들을 증분적으로 수신 및 렌더링하기 위한, 컴퓨터 저장 매체 상에 인코딩되는 컴퓨터 프로그램들, 시스템들, 및 방법들. 일 예시적인 시스템은, 서버, 사용자 디바이스, 및 사용자 디바이스 상에서 실행되는 클라이언트를 포함한다. 클라이언트는 서버에 콘텐츠 요청을 전송한다. 클라이언트는 콘텐츠 요청에 대한 응답을 다수의 프래그먼트들로 증분적으로 수신한다. 다수의 프래그먼트들은 전체 응답을 구성한다. 프래그먼트들은, 콘텐츠 아이템들 및 그 콘텐츠 아이템들을 설명하는 메타데이터를 포함하고, 각각의 콘텐츠 아이템은 렌더링가능하고 하나 이상의 데이터 객체에 의해 정의된다. 클라이언트는 프래그먼트들이 수신될 때 디스플레이 버퍼에서 프래그먼트들로 콘텐츠 아이템들을 증분적으로 렌더링한다. 콘텐츠 아이템들은 메타데이터에 의해 결정된 순서로 렌더링된다. 클라이언트는 사용자 디바이스의 디스플레이 상에 디스플레이 버퍼의 전체 또는 일부를 디스플레이한다.

Description

점진적인 API 응답들
본 명세서는 소셜 메시징 플랫폼들에 관한 것으로, 특히, 소셜 메시징 플랫폼으로부터 콘텐츠 요청에 대한 응답의 프래그먼트(fragment)들을 증분적으로(incrementally) 수신 및 렌더링하기 위한 기술들에 관한 것이다.
소셜 메시징 플랫폼들 및 네트워크-연결된 퍼스널 컴퓨팅 디바이스들은 사용자들이 실시간으로 다수의 디바이스들에 걸쳐 콘텐츠를 생성 및 공유하게 한다.
인기있는 소셜 메시징 플랫폼들은 일반적으로, 동기적과 비동기적 양측 모두로, 사용자들이 메시지들을 드래프트 및 포스팅하는 기능성을 다른 사용자들에게 제공한다. 인기있는 소셜 메시징 플랫폼들의 예들은 페이스북(Facebook), 핀터레스트(Pinterest), 및 트위터(Twitter)를 포함한다. ("페이스북"은 Facebook, Inc.의 상표이다. "핀터레스트"는 Pinterest, Inc.의 상표이다. "트위터"는 Twitter, Inc.의 상표이다.)
일반적으로, 컴퓨팅 디바이스 상의 클라이언트 소프트웨어가 소셜 메시징 플랫폼에 콘텐츠 요청을 전송할 때, 클라이언트 소프트웨어는 디바이스의 사용자에게 응답 중 임의의 것을 제시하기 전에 요청에 대한 전체 응답을 수신하기를 기다려야 한다.
본 명세서는 클라이언트 소프트웨어가 소셜 메시징 플랫폼으로부터의 콘텐츠 요청에 대한 응답의 프래그먼트들을 수신 및 렌더링하는 것을 가능하게 하는 기술들을 설명한다.
예시적인 시스템은, 소셜 메시징 플랫폼을 구현하도록 구성되는 서버, 사용자 디바이스, 및 사용자 디바이스 상에서 실행되는 소셜 메시징 플랫폼의 클라이언트 소프트웨어를 포함한다. 클라이언트 소프트웨어는 서버에 콘텐츠 요청을 전송하도록 구성된다. 클라이언트 소프트웨어는 사용자 디바이스 상의 네트워크 스택의 전송 계층으로부터 서버로부터의 콘텐츠 요청에 대한 응답을 다수의 프래그먼트들로 증분적으로 수신한다. 다수의 프래그먼트들은 전체 응답을 구성한다. 응답은, 콘텐츠 아이템들 및 그 콘텐츠 아이템들을 설명하는 메타데이터를 포함한다. 각각의 콘텐츠 아이템은 렌더링가능하고 하나 이상의 데이터 객체에 의해 정의된다. 클라이언트 소프트웨어는, 디스플레이 버퍼 내에서, 프래그먼트들이 수신될 때 프래그먼트들로 콘텐츠 아이템들을 증분적으로 렌더링한다. 이것은, 메타데이터에 의해 결정된 순서로 디스플레이 버퍼에 콘텐츠 아이템들을 배치시키는 것을 포함한다. 디스플레이 버퍼는 사용자 디바이스의 메모리에서의 데이터 구조체이다. 그 후에, 클라이언트 소프트웨어는 사용자 디바이스의 디스플레이 상에 디스플레이 버퍼의 전부 또는 일부를 디스플레이한다.
본 명세서는 시스템들, 장치, 및 컴퓨터 프로그램 컴포넌트들과 관련하여 "구성된(configured to)"이라는 용어를 사용한다. 하나 이상의 컴퓨터의 시스템이 특정 동작들 또는 액션들을 수행하도록 구성된다는 것은, 시스템이 그것 상에, 동작에 있어서 시스템으로 하여금 동작들 또는 액션들을 수행하게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 설치하였다는 것을 의미한다. 하나 이상의 컴퓨터 프로그램이 특정 동작들 또는 액션들을 수행하도록 구성된다는 것은, 하나 이상의 프로그램이, 데이터 프로세싱 장치에 의해 실행될 때, 그 장치로 하여금 동작들 또는 액션들을 수행하게 하는 명령어들을 포함한다는 것을 의미한다. 특수 목적 로직 회로부가 특정 동작들 또는 액션들을 수행하도록 구성된다는 것은, 그 회로부가 동작들 또는 액션들을 수행하는 전자 로직을 갖는다는 것을 의미한다.
본 출원에서 설명되는 청구 대상은 다음의 이점들 중 하나 이상을 실현하도록 특정 실시예들에서 구현될 수 있다. 저 대역폭 연결 상의 사용자 디바이스들은 전체 응답이 수신되기 전에 응답에서의 콘텐츠 아이템들을 점진적으로 렌더링할 수 있다. 이것은 유리한데, 이는, 저 대역폭 연결 상에서, 전체 응답을 수신하는 것이, 수 회의 라운드트립(roundtrip)들, 즉, 전체 응답 페이로드를 전달하기 위해 TCP 연결을 취하는 다수 회의 라운드트립들이 소요될 수 있기 때문이다.
한편, 고 대역폭 연결 상의 사용자 디바이스들은 단일 라운드트립으로 작은 응답과 큰 응답 양측 모두를 수신 및 렌더링할 수 있다. 다시 말해, 본 명세서에서 설명되는 청구 대상은 사용자의 대역폭에 관계없이 응답 시간을 최적화한다.
본 명세서의 청구 대상의 하나 이상의 실시예의 세부사항들이 아래의 설명 및 첨부 도면들에 제시된다. 청구 대상의 다른 피처(feature)들, 양태들 및 이점들은 이 설명, 도면들, 및 청구범위로부터 명백해질 것이다.
도 1은 예시적인 소셜 메시징 플랫폼의 다이어그램이다.
도 2는 콘텐츠 요청들에 대한 응답들을 구조화하기 위한 예시적인 프로세스의 흐름도이다.
도 3은 콘텐츠 요청에 대한 응답의 프래그먼트들을 증분적으로 수신 및 렌더링하기 위한 예시적인 프로세스의 흐름도이다.
도 4는 응답의 2개 이상의 프래그먼트들에 걸쳐 있는 콘텐츠 아이템을 수신 및 렌더링하기 위한 예시적인 프로세스의 흐름도이다.
다양한 도면들에서의 동일한 참조 번호들 및 명칭들은 동일한 요소들을 표시한다.
도 1은 예시적인 온라인 소셜 메시징 플랫폼(100), 및 하나 이상의 유선 또는 무선 데이터 통신 네트워크(120)를 통해 그 플랫폼과 상호작용하도록 구성되는 예시적인 사용자 디바이스들(104a 내지 104n)을 예시한다. 클라이언트 소프트웨어(106a 내지 106n)에서 구현되는 점진적 렌더링 모듈들(108a 내지 108n)은, 추후에 설명되는 바와 같이, 플랫폼 서버들로부터 콘텐츠 아이템들, 예를 들어, 메시지들을 증분적으로 수신 및 렌더링하도록 구성된다.
플랫폼의 사용자들(102a 내지 102n)은 클라이언트 소프트웨어가 설치되는 사용자 디바이스들(104a 내지 104n)을 사용하여, 플랫폼을 사용한다. 사용자들은 이들의 개개의 사용자 디바이스들 상의 개개의 클라이언트 소프트웨어를 사용하여 소셜 메시징 플랫폼과 상호작용할 수 있다.
사용자는, 플랫폼 상에서, 계정의 계정 보유자(account holder), 또는 계정의 인가된 사용자일 수도 있다. 플랫폼은 개인들, 기업들, 또는 다른 엔티티들(entities)의 수백만 개의 계정들을 가질 수도 있다.
일부 구현들에서, 플랫폼은, 계정 보유자들이 아니거나 또는 플랫폼의 계정에 로그인하지 않은 사용자들에 의한 플랫폼의 사용을 허용한다. 플랫폼이 그러한 사용자들에 의한 사용을 허용하는 경우, 플랫폼은 사용자를 임시 계정 또는 식별자와 연관시킴으로써 그러한 사용자가 메시지들을 포스팅하게 하거나 또는 플랫폼의 다른 기능성을 사용하게 할 수도 있다.
사용자 디바이스는 임의의 인터넷-연결된 디바이스, 예를 들어, 랩톱 또는 데스크톱 컴퓨터, 스마트폰, 또는 전자 태블릿일 수 있다. 사용자 디바이스는 모바일 네트워크를 통해, 인터넷 서비스 제공자(Internet service provider)(ISP), 또는 다른 것을 통해 인터넷에 연결될 수 있다.
각각의 사용자 디바이스는, 클라이언트라고 또는 클라이언트 소프트웨어(106a 내지 106n)라고 지칭되는 소프트웨어로 구성되는데, 이 소프트웨어는, 동작 시에, 사용자가 메시지들을 포스팅 및 수신하고, 사용자의 스트림들을 뷰잉 및 큐레이팅하며, 콘텐츠 아이템들의 리스트들을 뷰잉하고 이들과 상호작용할 수 있도록 플랫폼에 액세스할 수 있다. 임의의 특정 사용자 디바이스 상에서, 클라이언트는, 웹 브라우저 또는 웹 브라우저에 의해 렌더링되는 HTML(hypertext markup language) 문서일 수도 있다. 또는 클라이언트는 자바스크립트 코드(JavaScript code) 또는 자바 코드(Java code)이거나 또는 이를 포함할 수도 있다. 또는 클라이언트는 또한, 구체적으로 플랫폼과 함께 작동하도록 설계되는 전용 소프트웨어, 예를 들어, 설치된 앱 또는 설치된 애플리케이션일 수도 있다. 또는 클라이언트는, 예를 들어, 단문 메시징 서비스(Short Messaging Service)(SMS) 인터페이스, 인스턴트 메시징 인터페이스, 이메일 기반 인터페이스, 또는 API 기능 기반 인터페이스이거나 또는 이를 포함할 수도 있다.
클라이언트는, 사용자 디바이스의 디스플레이 상의 그래픽 사용자 인터페이스의 윈도우에, 플랫폼으로부터의 메시지들 및 스트림들을 포함하여, 디스플레이 버퍼의 전부 또는 일부를 디스플레이한다. 디스플레이 버퍼는 사용자 디바이스의 디스플레이를 구동하는 데 사용되는 데이터, 예를 들어, 비트맵을 포함하는 메모리의 일부분이다. 디스플레이 버퍼에서의 메시지들 및 스트림들은 렌더링된 비트맵 형식으로 될 수도 있거나, 또는 이들은 이들이 디스플레이 뷰포트로 이동될 때 온 더 플라이(on the fly)로 렌더링될 수 있는 부분적으로 렌더링된 또는 프리프로세싱된(preprocessed) 형식으로 될 수도 있다.
클라이언트의 그래픽 사용자 인터페이스는 스크롤 요소 또는 스크롤 기능성을 포함할 수 있다. 스크롤 요소는, 클라이언트의 사용자로부터 입력을 수신하는 컨트롤이다. 예를 들어, 사용자 디바이스가 마우스를 갖는 데스크톱 컴퓨터인 경우, 사용자는 스크롤 요소를 클릭 및 드래그할 수 있다. 사용자 디바이스가 스마트폰인 경우, 사용자는 손가락으로 사용자 디바이스의 스크린을 단순히 스와이프(swipe)할 수 있다. 클릭 및 드래그 또는 스와이프에 응답하여, 클라이언트는, 클라이언트에 의해 디스플레이되는 디스플레이 버퍼의 일부를 변경한다.
클라이언트는 점진적 렌더링 모듈들(108a 내지 108n)을 포함한다. 점진적 렌더링 모듈들은 콘텐츠 아이템들의 프래그먼트들이 수신될 때 이들 프래그먼트들을 증분적으로 수신하고 점진적으로 렌더링하도록 구성된다.
온라인 소셜 메시징 플랫폼은 많은 상이한 종류들의 사용자 디바이스들로부터 유선 또는 무선 네트워크들(120)을 통한 연결들을 지원하는 하나 이상의 서버로서 동작하는 하나 이상의 위치들에 있는 하나 이상의 컴퓨터 상에서 구현된다. 플랫폼은 수백만 개의 계정들을 가질 수도 있고, 어디에서나 수십만 개에서 수백만 개의 연결들이 임의의 주어진 순간에 클라이언트들과 플랫폼 사이에서 확립되거나 또는 사용 중일 수도 있다.
플랫폼 및 클라이언트는, 사용자들이, 플랫폼을 사용하여 메시지들을 플랫폼에 포스팅(122)하고 플랫폼을 사용하여 다른 사용자들에 의해 포스팅된 메시지들을 수신(124)하는 것을 가능하게 하도록 구성된다.
일부 구현들에서, 플랫폼은 사용자들이 플랫폼의 하나 이상의 다른 사용자에게 직접 메시지들을 전송하기 위한 설비들을 제공하여, 전송자와 수신자들이 메시지들의 비공개 교환(private exchange)을 유지하게 한다.
플랫폼은 홈 피드 메시지 스트림(home feed message stream)으로 사용자에게 콘텐츠, 일반적으로는 메시지들을 제공하도록 구성된다. 메시지들은 일반적으로, 사용자가 팔로우하고 있는 계정들로부터의 메시지들일 것인데, 이는 수신자가 팔로우된 계정에 의해 포스팅된 메시지들, 그리고 임의로 그러한 계정들이 관여한, 예컨대, 추천한 콘텐츠를 수신하도록 등록하였다는 것을 의미한다. 임의로, 플랫폼은, 플랫폼이 수신자에게 관심있을 가능성이 있는 것으로 결정한 수신자 사용자의 홈 피드 스트림 메시지들에, 예를 들어, 플랫폼 사용자들에 의해 토픽들에 대해 포스팅된 다수의 메시지들에 의해 나타낸 바와 같은, 특정된 현재 관심있는 토픽들에 대한 메시지들, 또는 수신자가 포스팅한 또는 관여한 메시지들에 의해 나타낸 바와 같은, 수신자에게 명백히 관심있는 토픽들에 대해 포스팅된 메시지들뿐만 아니라, 선택된 광고들, 공공 서비스 공고(public service announcement)들, 홍보 콘텐츠, 또는 이와 유사한 것을 포함시키도록 구성된다.
플랫폼은, 사용자들이, 실시간으로, 즉, 최소 딜레이로 메시지들을 교환하는 것을 가능하게 하도록 구성된다. 플랫폼은, 사용자들이, 대략 몇 시간 또는 며칠 또는 심지어 그 이상, 보다 앞서 포스팅된 메시지들에 응답하는 것을 가능하게 하도록 또한 구성된다. 플랫폼은 본질적으로 사용자들 사이의 실시간 대화(live conversation)가 될 수 있는 것을 용이하게 하도록 짧은 시간 프레임 내에 하나 이상의 다른 사용자에게 포스팅된 메시지들을 디스플레이하도록 구성된다.
플랫폼은 사용자들이 플랫폼 상에서 콘텐츠를 검색하게 하도록 또한 구성된다. 검색은 하나 이상의 검색 기준, 예를 들어, 하나 이상의 검색 용어 또는 핵심 어구를 충족시키는 다수의 팔로우된 또는 공개 계정들로부터의 메시지들을 반환할 수 있다. 플랫폼은 사용자들이 다른 사용자의 계정들을 검색하게 하도록 또한 구성된다.
따라서, 플랫폼의 기본 메시징 기능성은, 적어도 새로운 메시지들을 포스팅하는 것, 클라이언트 요청에 대해 메시지 스트림들을 제공하는 것, 계정들을 관리하는 것, 계정들, 메시지들, 및 스트림들 사이의 연결들을 관리하는 것, 및 클라이언트들의 사용자들이 메시지들 그리고 가능하다면 다른 콘텐츠에 관여한 방법을 표시하는 클라이언트들로부터의 관여 데이터를 수신하는 것을 포함한다. 플랫폼은 또한, 콘텐츠에의 사용자들의 액세스를 특성화하는 액세스 데이터 및 콘텐츠 아이템들을 인덱싱하고, 인덱싱된 데이터를 계정 보유자들에게 제공할 수 있다.
일반적으로, 플랫폼에 포스팅된 메시지는, 메시지의 저작자에 의해 제공된 콘텐츠를 나타내는 데이터를 포함한다. 메시지는, 콘텐츠 데이터를 저장하는 콘테이너 데이터 타입의 인스턴스일 수도 있다. 메시지에 저장될 수도 있는 데이터의 타입들은, 예를 들어, 텍스트, 그래픽들, 이미지들, 비디오, 및 컴퓨터 코드, 예를 들어, 유니폼 리소스 로케이터(uniform resource locator)(URL)들을 포함한다. 메시지들은, 메시지들을 카테고리화하는 것 또는 메시지들을 토픽들과 관련시키는 것을 도울 수 있는 핵심 어구들, 예를 들어, 해시태그들을 또한 포함할 수 있다. 메시지들은, 플랫폼이 허용하는 것에 따라, 메시지 저작자 계정 보유자에 의해 편집가능할 수도 있거나 또는 편집가능하지 않을 수도 있는 메타데이터를 또한 포함할 수 있다. 메시지 메타데이터의 예들은, 사용자 디바이스가 메시지를 제출하였을 때 그 사용자 디바이스의 지리적 위치 및 저작물의 시간과 날짜를 포함한다. 일부 구현들에서, 클라이언트에 의해 플랫폼에 제공되는 메타데이터는, 사용자 또는 계정 보유자에 의해 제어되는 프라이버시 설정들에 의해 결정된다.
하나의 계정 보유자에 의해 작성된 메시지들은 다른 계정들, 다른 메시지들, 또는 이들 양측 모두를 참조할 수도 있다. 예를 들어, 다른 계정에 의해 작성된 다른 메시지에 대한 응답으로 메시지가 작성될 수도 있다. 사용자에 의해 원래 포스팅된 메시지에 대한 응답으로 메시지가 사용자에 의해 또한 작성될 수도 있다. 메시지들은 또한, 다른 계정에 의해 작성되고 이로부터 수신된 메시지의 재발행들일 수도 있다. 일반적으로, 메시지에서 참조된 계정은, 메시지에서의 가시적인 콘텐츠, 예를 들어, 계정의 명칭으로서 보일 수도 있고, 또한 메시지에서의 메타데이터로서 보일 수도 있다. 그 결과, 참조된 계정들은 플랫폼에서 상호작용할 수 있다. 예를 들어, 사용자들은 이들의 메시지 스트림에서 보이는 계정 명칭들과 상호작용하여, 이들 계정들의 메시지 스트림들에 대해 내비게이팅할 수도 있다. 플랫폼은 또한 사용자들이 특정 메시지들을 비공개로서 지정하게 하고; 비공개 메시지는 작성 및 수신자 계정들의 메시지 스트림들에서만 단지 보일 것이다.
일반적으로, 메시지들은 마이크로블로그 포스트들인데, 이는, 예를 들어, 마이크로블로그 포스트의 저작자가 메시지의 수신자들이 누구인지를 반드시 특정할 필요가 없거나 또는 심지어 알 필요가 없다는 점에서, 이메일 메시지들과는 다수의 방식들에 있어서 상이하다.
스트림은, 하나 이상의 스트림 기준을 충족시키는 플랫폼 상의 메시지들의 스트림이다. 스트림은 하나 이상의 계정에 의해 포스팅된 메시지들을 포함하도록 스트림 기준들에 의해 정의될 수 있다. 예를 들어, 요청 계정 보유자에 대한 스트림의 콘텐츠들은, (i) 그 계정 보유자에 의해 작성된 메시지들, (ii) 요청된 계정 보유자가 팔로우한 다른 계정들에 의해 작성된 메시지들, (iii) 요청된 계정 보유자를 참조하는 다른 계정들에 의해 저작된 메시지들, 또는 (iv) 계정 보유자의 메시지 스트림에의 포함을 위해 제3자들에 의해 후원되는 메시지들 중 하나 이상을 포함할 수도 있다. 스트림의 메시지들은 저작물의 시간과 날짜에 따라 연대순으로, 또는 역 연대순으로 순서화될 수도 있다. 스트림들은 또한 다른 방식들로, 예를 들어, 계정 보유자에 대한 계산적으로 예측된 관련성에 따라, 또는 시간 및 관련성 스코어의 일부 조합에 따라, 순서화될 수도 있다.
스트림은 잠재적으로, 다수의 메시지들을 포함할 수도 있다. 프로세싱 효율성과 요청 계정 보유자의 뷰잉 편의성 양측 모두를 위해, 플랫폼은 일반적으로, 일단 스트림이 생성되면 요청 클라이언트에 전송할 스트림 기준들을 충족시키는 메시지들의 서브세트를 식별한다. 스트림에서의 메시지들의 나머지는 스트림 리포지토리(stream repository)에서 유지되고 클라이언트 요청에 의해 액세스될 수 있다.
플랫폼 서버들(110a 내지 110m) 상의 전달 모듈들(112a 내지 112m)은 메시지 스트림들을 구축하고, 예를 들어, 프론트 엔드 서버를 통해, 이들을 요청 클라이언트들에게 제공한다. 스트림에 대한 요청에 응답하여, 개개의 전달 모듈은 실시간으로 스트림을 구축하거나, 또는 이미 생성된 스트림의 일부 또는 전부를 스트림 리포지토리로부터 액세스한다. 전달 모듈은 생성된 스트림들을 스트림 리포지토리에 저장한다. 계정 보유자는, 이들 자신의 스트림들 중 임의의 것, 또는 보안 설정들에 기초하여 액세스가 허용된 임의의 다른 계정의 스트림들을 요청할 수도 있다. 스트림이 다수의 메시지들을 포함하는 경우, 전달 모듈은 일반적으로, 요청 클라이언트에 전송할 메시지들의 서브세트를 식별하는데, 그 경우에 메시지들의 나머지는 스트림 리포지토리에 유지되고 클라이언트 요청 시에 전송된다.
전달 모듈들은 클라이언트에 의해 응답들의 프래그먼트들이 증분적으로 수신, 렌더링, 및 디스플레이될 수 있도록 하는 방식으로 콘텐츠 요청들에 대한 응답들을 구조화할 수 있다. 이 프로세스는 도 2를 참조하여 더 상세히 설명될 것이다.
도 2는 콘텐츠 요청들에 대한 응답들을 구조화하기 위한 예시적인 프로세스(200)의 흐름도이다. 이 프로세스는 도 1의 온라인 소셜 메시징 플랫폼의 플랫폼 서버에 의해 수행될 수 있다. 더 구체적으로는, 이 프로세스는 플랫폼 서버 상의 전달 모듈에 의해 수행될 수 있다.
전달 모듈은 클라이언트로부터의 콘텐츠 요청에 응답하는 콘텐츠 아이템들 및 이들 콘텐츠 아이템들을 설명하는 메타데이터를 획득한다(210).
전달 모듈은 콘텐츠 아이템들을 설명하는 메타데이터를 응답의 초기 프래그먼트에 배치시킨다(220). 메타데이터는 각각의 콘텐츠 아이템에 대한 시퀀스 식별자를 포함할 수 있다. 시퀀스 식별자는, 다른 콘텐츠 아이템들과 관련하여 콘텐츠 아이템이 렌더링되어야 하는 사용자 디바이스의 디스플레이 버퍼에서의 위치를 특정한다. 메타데이터가 응답의 초기 프래그먼트에 있기 때문에, 클라이언트가 응답에서의 모든 콘텐츠 아이템들을 수신하기 전에 클라이언트는 디스플레이 버퍼에서의 지정된 장소들에 있는 콘텐츠 아이템들을 렌더링할 수 있다.
전달 모듈은 메타데이터 뒤에 콘텐츠 아이템들을 배치시킨다(230). 더 구체적으로는, 그것은, 각각의 콘텐츠 아이템을 렌더링하는 데 필요한 데이터를, 콘텐츠 아이템들을 정의하는 하나 이상의 데이터 객체에 또는 응답에서 콘텐츠 아이템에 선행하는 콘텐츠 아이템들을 정의하는 데이터 객체들에 배치시킨다. 이러한 방식으로 데이터를 구조화함으로써, 전달 모듈은, 클라이언트가 임의의 주어진 콘텐츠 아이템을 수신할 때까지 클라이언트가 그것이 그 콘텐츠 아이템을 렌더링하는 데 필요한 모든 데이터를 수신한다는 것을 보장한다. 결과적으로, 클라이언트는 모든 콘텐츠 아이템들이 수신되기 전에 하나 이상의 콘텐츠 아이템을 렌더링 및 디스플레이할 수 있다.
도 3은 콘텐츠 아이템들을 증분적으로 렌더링하기 위한 예시적인 프로세스(300)의 흐름도이다. 이 프로세스는 사용자 디바이스 상의 클라이언트에 의해 수행될 수 있다.
클라이언트는 호스트 서버에 콘텐츠에 대한 요청을 전송한다(310).
호스트 서버는 구조화된 응답을 클라이언트에 전송한다. 관심있는 시나리오에서, 클라이언트는 전체 응답을 함께 구성하는 다수의 프래그먼트들로 응답을 수신한다(320). 클라이언트는 사용자 디바이스 상의 네트워크 스택으로부터, 예를 들어, 전송 계층으로부터, 그 네트워크 스택이 클라이언트에 전체 응답을 제공하기 전에, 프래그먼트들을 획득한다.
네트워크 스택의 전송 계층은, 사용자 디바이스 상에서 실행되는 애플리케이션들에 데이터 통신 서비스들을 함께 제공하는 소프트웨어의 수 개의 계층들 중 하나이다. 특히, 전송 계층은 애플리케이션들에 대한 호스트 간 통신 서비스(host-to-host communication service)들을 제공하는 프로토콜들의 세트를 구현한다. 전송 계층 프로토콜의 일 예는 송신 제어 프로토콜(Transmission Control Protocol)(TCP)이다. 다른 예는 사용자 데이터그램 프로토콜(User Datagram Protocol)(UDP)이다. 클라이언트에 의해 획득된 프래그먼트들은, 사용되는 특정 프로토콜에 따라, 하나 이상의 세그먼트 또는 하나 이상의 데이터그램으로 구성된다.
응답의 프래그먼트들은, 콘텐츠 아이템들 및 그 콘텐츠 아이템들을 설명하는 메타데이터를 포함한다. 각각의 콘텐츠 아이템은 디스플레이를 위해 렌더링가능하고 하나 이상의 데이터 객체에 의해 정의된다. 예를 들어, 특정 콘텐츠 아이템은 자바스크립트 객체 표기법(JavaScript Object Notation)("JSON") 객체에 의해 정의될 수 있다. JSON은 구조화된 데이터의 직렬화를 위한 텍스트 포맷이다. 그것은 인간 판독가능 텍스트를 사용하여, 속성-값 쌍들 및 어레이 데이터 타입들로 구성되는 데이터 객체들을 송신한다.
콘텐츠 아이템들을 설명하는 메타데이터는, 각각의 콘텐츠 아이템에 대해, 시퀀스 식별자를 포함할 수 있다. 특정 콘텐츠 아이템에 대한 시퀀스 식별자는, 응답에서의 다른 콘텐츠 아이템들과 관련하여 그리고 디스플레이 버퍼에서 이전에 렌더링된 응답들에서의 콘텐츠 아이템들과 관련하여 콘텐츠 아이템의 디스플레이 버퍼에서의 장소를 특정한다. 예를 들어, 시퀀스 식별자는 콘텐츠 아이템이 디스플레이 버퍼에서 제1 콘텐츠 아이템 "아래에서" 그리고 제2 콘텐츠 아이템 "위에서" 렌더링되어야 한다는 것을 특정할 수도 있다. 일부 구현들에서, 시퀀스 식별자는 콘텐츠 아이템과 연관된 타임스탬프에 기초하거나 또는 그 타임스탬프이다. 타임스탬프는 다른 콘텐츠 아이템들과 관련하여 콘텐츠 아이템이 생성된 시간을 표시할 수 있다. 이 경우에, 콘텐츠 아이템들은 연대순 또는 역 연대순 순서로 디스플레이 버퍼에 배치될 수 있다.
대안적으로, 콘텐츠 아이템에 대한 시퀀스 식별자는, 사용자가 콘텐츠 아이템을 좋아하거나 또는 이와 상호작용할 가능성이 얼마나 있는지의 추정에 기초할 수 있다. 예를 들어, 소셜 메시징 플랫폼의 플랫폼 서버는 특정 사용자가 제2 콘텐츠 아이템보다 제1 콘텐츠 아이템을 좋아하거나 또는 이와 상호작용할 가능성이 더 높다고 결정할 수 있다. 그러한 경우에, 제1 콘텐츠 아이템에 대한 시퀀스 식별자는, 사용자가 그것을 보거나, 또는 그것을 먼저 볼 가능성이 더 높아지도록 그것이 제2 콘텐츠 아이템 "위에" 배치되어야 한다는 것을 특정할 수도 있다. 호스트 서버는 유사한 콘텐츠 아이템들과의 사용자의 이전 상호작용들을 분석함으로써 사용자가 특정 콘텐츠 아이템을 좋아하고 이와 상호작용할 가능성을 결정할 수 있다.
클라이언트는 프래그먼트들이 메타데이터에 의해 결정된 디스플레이 버퍼에서의 순서로 획득될 때 디스플레이 버퍼 내에서 프래그먼트들로 콘텐츠 아이템들을 증분적으로 렌더링한다(330).
콘텐츠 아이템들 각각은 개별적으로 렌더링가능하다. 다시 말해, 응답에서의 각각의 콘텐츠 아이템을 렌더링하는 데 필요한 데이터는, 응답에서 보다 앞서, 예를 들어, 응답의 이전에 수신된 프래그먼트에서 또는 현재 프래그먼트에서 보다 앞서 발견된 데이터에 또는 콘텐츠 아이템을 정의하는 하나 이상의 데이터 객체에 포함된다. 결과적으로, 클라이언트는 그것이 전체 응답을 수신하기 전에 개별 콘텐츠 아이템들을 렌더링할 수 있다.
일부 구현들에서, 클라이언트는 응답의 초기 프래그먼트에서 메타데이터를 수신하고, 응답에서의 각각의 콘텐츠 아이템에 대한 개개의 시퀀스 식별자에 부가적으로, 응답에 콘텐츠 아이템들의 총 카운트를 포함시킨다. 이 정보를 이용하여, 클라이언트는 초기 프래그먼트에서의 콘텐츠 아이템들을 렌더링하고, 응답의 후속 프래그먼트들에서의 각각의 콘텐츠 아이템에 대한 개개의 플레이스홀더(placeholder)를 디스플레이 버퍼에 포함시킬 수 있다. 추후에, 클라이언트는 후속 프래그먼트들로부터의 콘텐츠 아이템들을 렌더링할 때 개개의 플레이스홀더들을 대체시킬 수 있다. 클라이언트는, 대응하는 콘텐츠 아이템들이 보이는 디스플레이 버퍼, 예를 들어, 콘텐츠 아이템들의 시퀀스 식별자들에 의해 정의된 장소들에 플레이스홀더들을 생성할 수 있다.
콘텐츠 아이템을 렌더링함에 있어서, 클라이언트는 일반적으로, 콘텐츠 아이템을 정의하는 데이터 객체 또는 객체들의 시작부를 식별하고 이에 후속하여 콘텐츠 아이템을 정의하는 데이터 객체 또는 객체들의 종단부를 식별한다. 일부 경우들에서, 특정 콘텐츠 아이템을 정의하는 데이터 객체 또는 객체들이 응답의 단일 프래그먼트에 완전히 포함된다. 다른 경우들에서, 이들은 2개 이상의 프래그먼트들에 걸쳐 있다.
최종적으로, 클라이언트는 사용자 디바이스의 디스플레이 상에 디스플레이 버퍼의 전체 또는 일부를 디스플레이한다(340). 디스플레이 버퍼가 플레이스홀더들을 갖는 구현들에서, 클라이언트는 일부 콘텐츠 아이템들이 여전히 렌더링되어야 함을 사용자에게 표시하기 위해 이들 플레이스홀더들을 디스플레이할 수 있다. 플레이스홀더들은 디스플레이될 때 고정된 수직 높이로 된 것이 바람직하지만, 유입 콘텐츠 아이템들은 일반적으로 가변 수직 높이로 된다. 클라이언트가 플레이스홀더들을 콘텐츠 아이템들로 대체시킬 때, 클라이언트는 디스플레이 버퍼의 사이즈를 뷰포트로부터 멀어지는 방향으로 확장시킴으로써 뷰포트에서의 아이템들이 수직으로 시프트하지 않는다는 것을 보장할 수 있다. 즉, 플레이스홀더가 뷰포트 위에 있는 경우, 클라이언트는 디스플레이 버퍼를 위로 확장시키게 할 수 있다. 플레이스홀더가 뷰포트 아래에 있는 경우, 클라이언트는 디스플레이 버퍼를 아래로 확장시키게 할 수 있다. 클라이언트는, 사용자 입력에 기초하여, 예를 들어, 클라이언트의 사용자 인터페이스에 대한 스크롤링 입력에 기초하여, 디스플레이 버퍼의 어떤 부분을 디스플레이할지를 결정할 수 있다.
일부 구현들에서, 클라이언트는 다수의 인접한 플레이스홀더 대신에 단일 플레이스홀더를 삽입 및 디스플레이한다.
도 4는 응답의 2개 이상의 프래그먼트들에 걸쳐 있는 콘텐츠 아이템들을 렌더링하기 위한 예시적인 프로세스(400)의 흐름도이다. 프로세스(400)는 사용자 디바이스 상에서 실행되는 클라이언트에 의해 수행될 수 있다.
클라이언트는 응답의 다음 프래그먼트를 획득한다(410). 클라이언트는 프래그먼트가 새로운 콘텐츠 아이템의 초기 부분을 포함하는지를 결정한다(420). 클라이언트는 프래그먼트에서 데이터 객체 식별자들을 검색함으로써 그 결정을 행할 수 있다. 예를 들어, 콘텐츠 아이템들이 JSON 객체들에 의해 정의된 경우, 클라이언트는 JSON 객체의 시작부를 표시하는 여는 중괄호(opening curly brace)에 대해 프래그먼트를 검색할 수 있다. 프래그먼트가 새로운 콘텐츠 아이템의 초기 부분을 포함하지 않는 경우, 클라이언트는 응답의 다음 프래그먼트를 획득한다(410).
프래그먼트가 새로운 콘텐츠 아이템의 초기 부분을 포함하고 있는 경우, 클라이언트는 획득된 프래그먼트, 즉, 현재 프래그먼트와 이전에 획득된 프래그먼트들이 전체의 새로운 콘텐츠 아이템을 포함하는지를 결정한다(430). 즉, 클라이언트는 그것이 새로운 콘텐츠 아이템의 모든 부분들을 획득하였는지를 결정한다. 클라이언트는 이 결정을 행하기 위해 데이터 객체 식별자들에 대해 프래그먼트를 검색할 수 있다.
클라이언트가 그것이 새로운 콘텐츠 아이템의 모든 부분들을 획득하지 못하였다고 결정하는 경우, 그것은 응답의 다음 프래그먼트를 획득하고(440) 그 다음 프래그먼트와 이전에 획득된 프래그먼트들이 전체의 새로운 콘텐츠 아이템을 포함하는지를 다시 결정한다(430). 콘텐츠 아이템들이 응답의 2개 이상의 프래그먼트들에 걸쳐 있을 수 있기 때문에, 클라이언트는 이 프로세스를 수 회 반복할 수도 있다.
클라이언트가 그것이 새로운 콘텐츠 아이템의 모든 부분들을 획득하였다고 결정하는 경우, 그것은 이들 부분들을 어셈블링(assemble)한다(450). 클라이언트는 그 부분들을 그것이 이들을 수신할 때 어셈블링할 수 있거나, 또는 그것은 그것이 모든 부분들을 수신한 후에 모두 한꺼번에 이들을 어셈블링할 수 있다. 일부 경우들에서, 콘텐츠 아이템은 응답의 단일 프래그먼트에 완전히 포함될 수도 있다. 그러한 경우들에서, 어떠한 어셈블리도 요구되지 않는다.
클라이언트는 사용자 디바이스 상의 디스플레이 버퍼에서 어셈블링된 콘텐츠 아이템을 렌더링한다(460). 그 후, 클라이언트는, 단일 프래그먼트가 다수의 콘텐츠 아이템들을 포함할 수 있기 때문에, 현재 프래그먼트가 새로운 콘텐츠 아이템의 임의의 부분을 포함하는지를 결정한다(420). 그렇지 않은 경우, 클라이언트는 응답의 다음 프래그먼트를 획득한다(410).
일부 경우들에서, 클라이언트가 데이터를 증분적으로 수신 및 렌더링하는 동안, 응답이 부분적으로 실패할 수도 있다. 예를 들어, 100개의 콘텐츠 아이템들을 갖는 응답은 클라이언트가 단지 20개의 콘텐츠 아이템들만을 수신한 후에 실패할 수도 있다. 예를 들어, 전송 계층 프로토콜이 UDP인 경우, 그러한 실패가 발생할 수 있다. UDP는 통신 채널들을 요구하지 않으며 따라서 기본 네트워크의 비신뢰도에 영향받기 쉽다.
이것이 발생할 때, 일부 구현들에서, 에러가 인라인(inline)으로 나타난다, 즉, 나머지 80개의 콘텐츠 아이템들이 다른 경우라면 디스플레이되었을 곳에 에러가 디스플레이된다. 클라이언트의 사용자는 그래픽 사용자 인터페이스에서 그 에러 메시지와 상호작용하여 나머지 80개의 콘텐츠 아이템들을 로딩하려고 재시도할 수 있다.
클라이언트가 잘못된 콘텐츠 아이템을 수신하는 경우, 예를 들어, 클라이언트가 누락된 데이터를 갖는 콘텐츠 아이템을 수신하는 경우, 클라이언트는 콘텐츠를 조용히 드롭시킬 수 있다.
본 명세서에서 설명되는 액션들 및 동작들 및 청구 대상의 실시예들은 디지털 전자 회로부로, 유형으로 구체화되는(tangibly-embodied) 컴퓨터 소프트웨어 또는 펌웨어로, 본 명세서에 개시된 구조체들 및 이들의 구조적 등가물들을 포함하는 컴퓨터 하드웨어로, 또는 이들 중 하나 이상의 것의 조합들로 구현될 수 있다. 본 명세서에서 설명되는 청구 대상의 실시예들은 데이터 프로세싱 장치에 의한 실행을 위해 또는 데이터 프로세싱 장치의 동작을 제어하기 위해, 유형의 비일시적 저장 매체 상에서 인코딩되는 하나 이상의 컴퓨터 프로그램, 즉, 컴퓨터 프로그램 명령어들의 하나 이상의 모듈로서 구현될 수 있다. 대안적으로 또는 부가적으로, 프로그램 명령어들은, 인공적으로 생성된 전파 신호, 예를 들어, 데이터 프로세싱 장치에 의한 실행을 위해 적합한 수신기 장치에의 송신을 위한 정보를 인코딩하도록 생성되는 머신 생성 전기, 광학, 또는 전자기 신호 상에서 인코딩될 수 있다. 컴퓨터 저장 매체는 머신 판독가능 저장 디바이스, 머신 판독가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 디바이스, 또는 이들 중 하나 이상의 것의 조합일 수 있거나 또는 그 일부일 수 있다. 컴퓨터 저장 매체는 전파된 신호가 아니다.
용어 "데이터 프로세싱 장치(data processing apparatus)"는, 예로서 프로그래밍가능 프로세서, 컴퓨터, 또는 다수의 프로세서들 또는 컴퓨터들을 포함하는, 데이터를 프로세싱하기 위한 모든 종류들의 장치, 디바이스들, 및 머신들을 포괄한다. 데이터 프로세싱 장치는 특수 목적 로직 회로부, 예를 들어, FPGA(field programmable gate array), ASIC(application-specific integrated circuit), 또는 GPU(graphics processing unit)를 포함할 수 있다. 장치는 또한, 하드웨어에 부가적으로, 컴퓨터 프로그램들을 위한 실행 환경을 생성하는 코드, 예를 들어, 프로세서 펌웨어를 구성하는 코드, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 또는 이들 중 하나 이상의 것의 조합을 포함할 수 있다.
프로그램, 소프트웨어, 소프트웨어 애플리케이션, 앱, 모듈, 소프트웨어 모듈, 엔진, 스크립트, 또는 코드로도 또한 지칭 또는 설명될 수도 있는 컴퓨터 프로그램은, 컴파일된 또는 인터프리트(interpret)된 언어들, 또는 선언적 또는 절차적 언어들을 포함하는 임의의 형태의 프로그래밍 언어로 작성될 수 있고; 그것은 독립형 프로그램으로서 또는 컴퓨팅 환경에서 실행하기에 적합한 모듈, 컴포넌트, 엔진, 서브루틴, 또는 다른 유닛으로서 포함하는 임의의 형태로 배치될 수 있는데, 그 환경은, 하나 이상의 위치에서 데이터 통신 네트워크에 의해 상호연결되는 하나 이상의 컴퓨터를 포함할 수도 있다.
컴퓨터 프로그램은 파일 시스템 내의 파일에 대응할 수도 있지만, 그러할 필요가 없을 수도 있다. 컴퓨터 프로그램은 다른 프로그램들 또는 데이터, 예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트를 보유하는 파일의 일부분에, 문제의 프로그램에 전용된 단일 파일에, 또는 다수의 조정된 파일들, 예를 들어, 하나 이상의 모듈, 서브 프로그램, 또는 코드의 부분을 저장하는 파일들에 저장될 수 있다.
본 명세서에서 설명되는 프로세스들 및 로직 흐름들은 입력 데이터에 대해 동작하고 출력을 생성함으로써 동작들을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 컴퓨터에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한, 특수 목적 로직 회로부, 예를 들어, FPGA, ASIC, 또는 GPU에 의해, 또는 특수 목적 로직 회로부와 하나 이상의 프로그래밍된 컴퓨터의 조합에 의해 수행될 수 있다.
컴퓨터 프로그램의 실행에 적합한 컴퓨터들은 범용 또는 특수 목적 마이크로프로세서들 또는 이들 양측 모두, 또는 임의의 다른 종류의 중앙 프로세싱 유닛에 기초할 수 있다. 일반적으로, 중앙 프로세싱 유닛은 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 이들 양측 모두로부터 명령어들 및 데이터를 수신할 것이다. 컴퓨터의 필수 요소들은, 명령어들을 실행하기 위한 중앙 프로세싱 유닛, 및 명령어들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스이다. 중앙 프로세싱 유닛 및 메모리는 특수 목적 로직 회로부에 의해 보충되거나 또는 그에 포함될 수 있다.
일반적으로, 컴퓨터는 또한, 하나 이상의 대용량 저장 디바이스로부터 데이터를 수신하거나 또는 이들로 데이터를 전송하도록 동작가능하게 커플링되거나 또는 이들을 포함할 것이다. 대용량 저장 디바이스들은, 예를 들어, 자기, 광자기, 또는 광 디스크들 또는 솔리드 스테이트 드라이브들일 수 있다. 그러나, 컴퓨터는 그러한 디바이스들을 가질 필요가 없다. 더욱이, 컴퓨터는 다른 디바이스, 예를 들어, 몇 가지만 예로 들자면, 모바일 전화기, 개인 휴대 정보 단말기(personal digital assistant)(PDA), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, 글로벌 포지셔닝 시스템(Global Positioning System)(GPS) 수신기, 또는 휴대용 저장 디바이스, 예를 들어, 범용 직렬 버스(universal serial bus)(USB) 플래시 드라이브에 내장될 수 있다.
사용자와의 상호작용을 제공하기 위해, 본 명세서에서 설명되는 청구 대상의 실시예들은 정보를 사용자에게 디스플레이하기 위한 디스플레이 디바이스, 예를 들어, LCD(liquid crystal display) 모니터, 및 사용자가 컴퓨터에 입력을 제공할 수 있게 하는 입력 디바이스, 예를 들어, 키보드 및 포인팅 디바이스, 예를 들어, 마우스, 트랙볼 또는 터치패드를 갖는 컴퓨터 상에서 구현되거나 또는 그 컴퓨터와 통신하도록 구성될 수 있다. 다른 종류들의 디바이스들이 또한 사용자와의 상호작용을 제공하는 데 사용될 수 있고; 예를 들어, 사용자에게 제공되는 피드백은 임의의 형태의 감각 피드백, 예를 들어, 시각 피드백, 청각 피드백, 또는 촉각 피드백일 수 있고; 사용자로부터의 입력은 음향, 음성, 또는 촉각 입력을 포함하는 임의의 형태로 수신될 수 있다. 부가적으로, 컴퓨터는 사용자에 의해 사용되는 디바이스로 문서들을 전송하고 디바이스로부터 문서들을 수신함으로써; 예를 들어, 웹 브라우저로부터 수신된 요청들에 응답하여 사용자의 디바이스 상의 웹 브라우저에 웹 페이지들을 전송함으로써, 또는 사용자 디바이스, 예를 들어, 스마트폰 또는 전자 태블릿 상에서 실행되는 앱과 상호작용함으로써 사용자와 상호작용할 수 있다. 또한, 컴퓨터는 텍스트 메시지들 또는 다른 형태들의 메시지를 퍼스널 디바이스, 예를 들어, 메시징 애플리케이션을 실행하고 있는 스마트폰에 전송하고, 리턴으로 사용자로부터 응답 메시지들을 수신함으로써 사용자와 상호작용할 수 있다.
본 명세서에서 설명되는 청구 대상의 실시예들은 백 엔드 컴포넌트를, 예를 들어, 데이터 서버로서 포함하거나, 또는 미들웨어 컴포넌트, 예를 들어, 애플리케이션 서버를 포함하거나, 또는 프론트 엔드 컴포넌트, 예를 들어, 본 명세서에서 설명되는 청구 대상의 구현으로 사용자가 상호작용할 수 있게 하는 그래픽 사용자 인터페이스, 웹 브라우저, 또는 앱을 갖는 클라이언트 컴퓨터를 포함하는 컴퓨팅 시스템으로, 또는 하나 이상의 그러한 백 엔드, 미들웨어, 또는 프론트 엔드 컴포넌트의 임의의 조합으로 구현될 수 있다. 시스템의 컴포넌트들은 디지털 데이터 통신의 임의의 형태 또는 매체, 예를 들어, 통신 네트워크에 의해 상호연결될 수 있다. 통신 네트워크들의 예들은 근거리 네트워크(local area network)(LAN) 및 광역 네트워크(wide area network)(WAN), 예를 들어, 인터넷을 포함한다.
컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로 원거리에 있고 전형적으로 통신 네트워크를 통해 상호작용한다. 클라이언트와 서버의 관계는 각각의 컴퓨터들 상에서 실행되고 서로 클라이언트-서버 관계를 갖는 컴퓨터 프로그램들에 의해 발생한다. 일부 실시예들에서, 서버는, 예를 들어, 클라이언트로서 작용하는 디바이스와 상호작용하는 사용자에게 데이터를 디스플레이하고 사용자로부터 사용자 입력을 수신하는 목적들을 위해, 사용자 디바이스에 데이터, 예를 들어, HTML 페이지를 송신한다. 사용자 디바이스에서 생성된 데이터, 예를 들어, 사용자 상호작용의 결과는 디바이스로부터 서버에서 수신될 수 있다.
상술된 실시예들에 부가적으로, 다음의 실시예들이 또한 혁신적이다:
실시예 1은 사용자 디바이스 상에서 실행되는 소셜 메시징 플랫폼의 클라이언트 소프트웨어에 의해 수행되는 방법인데, 이 방법은:
하나 이상의 컴퓨터 및 하나 이상의 저장 디바이스를 포함하는 서버에 콘텐츠 요청을 전송하는 단계 - 서버는 소셜 메시징 플랫폼을 구현하도록 구성됨 -;
사용자 디바이스 상의 네트워크 스택의 전송 계층으로부터 서버로부터의 콘텐츠 요청에 대한 응답을 다수의 프래그먼트들로 증분적으로 수신하는 단계 - 여기서 다수의 프래그먼트들은 전체 응답을 구성하고, 여기서 응답은, 콘텐츠 아이템들 및 그 콘텐츠 아이템들을 설명하는 메타데이터를 포함하고, 여기서 각각의 콘텐츠 아이템은 렌더링가능하고 하나 이상의 데이터 객체에 의해 정의됨 -;
메타데이터에 의해 결정된 순서로 디스플레이 버퍼에 콘텐츠 아이템들을 배치시키는 단계를 포함하는, 디스플레이 버퍼 내에서, 프래그먼트들이 수신될 때 프래그먼트들로 콘텐츠 아이템들을 증분적으로 렌더링하는 단계 - 디스플레이 버퍼는 사용자 디바이스의 메모리에서의 데이터 구조체임 -; 및
사용자 디바이스의 디스플레이 상에 디스플레이 버퍼의 전부 또는 일부를 디스플레이하는 단계
를 포함한다.
실시예 2는 실시예 1의 방법이고, 여기서 클라이언트 소프트웨어는, 사용자 디바이스 상에 설치되는 웹 브라우저에서 실행되는 자바스크립트 프로그램 또는 독립형 앱이다.
실시예 3은 실시예 1 및 실시예 2 중 어느 한 실시예의 방법이고, 여기서 콘텐츠 아이템들을 설명하는 메타데이터는, 각각의 콘텐츠 아이템에 대해, 응답에서의 다른 콘텐츠 아이템들과 관련하여 그리고 디스플레이 버퍼에서 이전에 렌더링된 응답들에서의 콘텐츠 아이템들과 관련하여 콘텐츠 아이템의 디스플레이 버퍼에서의 장소를 특정하는 시퀀스 식별자를 포함한다.
실시예 4는 실시예 3의 방법이고, 여기서 개개의 콘텐츠 아이템에 대한 시퀀스 식별자는, 다른 콘텐츠 아이템들과 관련하여 콘텐츠 아이템이 생성된 시간에 대응한다.
실시예 5는 실시예 1 내지 실시예 4 중 어느 한 실시예의 방법이고, 여기서 메타데이터는 응답의 초기 프래그먼트에서 수신되고, 응답에서의 콘텐츠 아이템들의 총 카운트를 포함하고, 여기서 방법은:
초기 프래그먼트에서의 콘텐츠 아이템들을 디스플레이 버퍼에서 렌더링하고, 응답의 후속 프래그먼트들에서의 각각의 콘텐츠 아이템에 대한 개개의 플레이스홀더를 디스플레이 버퍼에 포함시키는 단계; 및
후속 프래그먼트들에서의 콘텐츠 아이템들을 렌더링할 때 개개의 플레이스홀더들을 대체시키는 단계
를 더 포함한다.
실시예 6은 실시예 5의 방법이고, 여기서 메타데이터는, 각각의 콘텐츠 아이템에 대해, 시퀀스 식별자를 더 포함하고, 여기서 개개의 플레이스홀더는, 그의 대응하는 콘텐츠 아이템의 시퀀스 식별자에 의해 특정되는 디스플레이 버퍼에서의 장소에 생성된다.
실시예 7은 실시예 1 내지 실시예 6 중 어느 한 실시예의 방법이고, 여기서 프래그먼트들이 수신될 때 프래그먼트들로 콘텐츠 아이템들을 증분적으로 렌더링하는 단계는:
제1 프래그먼트가 특정 콘텐츠 아이템의 초기 부분만을 단지 포함한다는 것을 결정하는 단계;
특정 콘텐츠 아이템의 나머지를 포함하는 제2 프래그먼트를 수신하는 단계;
특정 콘텐츠 아이템의 초기 부분과 나머지를 어셈블링하는 단계; 및
디스플레이 버퍼에서 어셈블링된 콘텐츠 아이템을 렌더링하는 단계
를 포함한다.
실시예 8은 실시예 7의 방법이고, 여기서 하나 이상의 데이터 객체는 JSON 객체들이고, 여기서 프래그먼트들이 수신될 때 프래그먼트들로 콘텐츠 아이템들을 증분적으로 렌더링하는 단계는, 각각의 콘텐츠 아이템에 대해:
콘텐츠 아이템을 정의하는 JSON 객체의 시작부를 식별하는 단계; 및
콘텐츠 아이템을 정의하는 JSON 객체의 종단부를 식별하는 단계
를 포함한다.
실시예 9는 실시예 1 내지 실시예 8 중 어느 한 실시예의 방법이고, 여기서 응답의 프래그먼트들 각각은, 전송 계층 프로토콜에 의해 클라이언트 소프트웨어에 제공되는 하나 이상의 전송 계층 세그먼트를 포함한다.
실시예 10은 실시예 1 내지 실시예 9 중 어느 한 실시예의 방법이고, 여기서 각각의 응답에서, 응답에서의 각각의 콘텐츠 아이템을 렌더링하는 데 필요한 데이터는, 콘텐츠 아이템을 정의하는 하나 이상의 데이터 객체에 또는 응답에서 이전에 수신된 콘텐츠 아이템들을 정의하는 하나 이상의 데이터 객체에 포함된다.
실시예 11은 실시예 1 내지 실시예 10 중 어느 한 실시예의 방법이고, 여기서 서버는 원격 서버이다.
실시예 12는 시스템인데, 이 시스템은:
하나 이상의 컴퓨터 및 하나 이상의 저장 디바이스를 포함하는 서버 - 서버는 소셜 메시징 플랫폼을 구현하도록 구성됨 -;
사용자 디바이스; 및
사용자 디바이스 상에서 실행되는 소셜 메시징 플랫폼의 클라이언트 소프트웨어
를 포함하고,
여기서 클라이언트 소프트웨어는 실시예 1 내지 실시예 11 중 어느 한 실시예의 방법을 수행하도록 구성된다.
실시예 13은, 하나 이상의 컴퓨터에 의해 실행될 때, 하나 이상의 컴퓨터로 하여금 실시예 1 내지 실시예 11 중 어느 한 실시예의 방법을 수행하게 하도록 동작가능한 명령어들을 저장하는 하나 이상의 컴퓨터 저장 매체이다.
실시예 14는 시스템인데, 이 시스템은:
소셜 메시징 플랫폼을 구현하도록 구성되는 하나 이상의 저장 디바이스 및 하나 이상의 컴퓨터를 포함하고,
하나 이상의 저장 디바이스는, 하나 이상의 컴퓨터에 의해 실행될 때, 하나 이상의 컴퓨터로 하여금 동작들을 수행하게 하는 명령어들을 저장하고, 동작들은:
소셜 메시징 플랫폼의 클라이언트 소프트웨어로부터 콘텐츠 요청을 수신하는 동작 - 클라이언트 소프트웨어는 사용자 디바이스 상에서 실행됨 -;
(i) 콘텐츠 요청에 대응하는 콘텐츠 아이템들, (ii) 콘텐츠 아이템들을 설명하는 메타데이터, 및 (iii) 콘텐츠 아이템들을 렌더링하는 데 필요한 데이터를 획득하는 동작 - 여기서 콘텐츠 아이템들을 설명하는 메타데이터는, 각각의 콘텐츠 아이템에 대해, 다른 콘텐츠 아이템들과 관련하여 콘텐츠 아이템이 렌더링되어야 하는 사용자 디바이스의 디스플레이 버퍼에서의 위치를 특정하는 시퀀스 식별자를 포함함 -;
콘텐츠 요청에 대한 응답을 생성하는 동작 - 그 콘텐츠 요청에 대한 응답을 생성하는 동작은:
응답의 초기 프래그먼트에 메타데이터를 배치시키는 동작, 및
각각의 콘텐츠 아이템을 렌더링하는 데 필요한 데이터를, 콘텐츠 아이템을 정의하는 하나 이상의 데이터 객체에 또는 응답에서 콘텐츠 아이템에 선행하는 콘텐츠 아이템을 정의하는 하나 이상의 데이터 객체에 배치시키는 동작
을 포함함 -; 및
클라이언트 소프트웨어에 응답을 전송하는 동작
을 포함한다.
본 명세서는 많은 특정 구현 세부사항들을 포함하지만, 이들은 임의의 발명의 범주에 대한 또는 청구되고 있거나 또는 청구될 수도 있는 것의 범주에 대한 제한들로서 해석되어서는 안 되고, 오히려 특정 발명들의 특정 실시예들에 특정될 수도 있는 피처들의 설명들로서 해석되어야 한다. 별개의 실시예들의 맥락에서 본 명세서에서 설명되는 특정 피처들은 또한 단일 실시예에서 조합하여 구현될 수 있다. 역으로, 단일 실시예의 맥락에서 설명되는 다양한 피처들은 또한 다수의 실시예들에서 별개로 또는 임의의 적합한 하위 조합으로 구현될 수 있다. 더욱이, 피처들은 특정 조합들로 작용하는 것으로서 상술되고 심지어 초기에는 그와 같이 청구될 수도 있지만, 청구된 조합으로부터의 하나 이상의 피처는 일부 경우들에서 그 조합으로부터 삭제될 수 있고, 청구범위가 하위 조합 또는 하위 조합의 변형으로 유도될 수도 있다.
유사하게, 동작들이 특정 순서로 도면들에 도시되고 청구범위에 열거되지만, 이것은, 바람직한 결과들을 달성하기 위해, 그러한 동작들이 도시된 특정 순서로 또는 순차적인 순서로 수행되는 것, 또는 예시된 모든 동작들이 수행되는 것을 요구하는 것으로서 이해되어서는 안 된다. 특정 상황들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수도 있다. 더욱이, 상술된 실시예들에서의 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시예들에서 그러한 분리를 요구하는 것으로서 이해되어서는 안 되고, 설명된 프로그램 컴포넌트들 및 시스템들이 일반적으로 단일 소프트웨어 제품으로 함께 통합되거나 또는 다수의 소프트웨어 제품들로 패키징될 수 있다는 것이 이해되어야 한다.
청구 대상의 특정 실시예들이 설명되었다. 다른 실시예들이 다음의 청구범위의 범주 내에 있다. 예를 들어, 청구범위에서 열거된 액션들은 상이한 순서로 수행되고 여전히 바람직한 결과들을 달성할 수 있다. 일 예로서, 첨부 도면들에 도시된 프로세스들은 바람직한 결과들을 달성하기 위해 도시된 특정 순서, 또는 순차적인 순서를 반드시 요구하지는 않는다. 일부 경우들에서, 멀티태스킹 및 병렬 프로세싱이 이로울 수도 있다.

Claims (24)

  1. 시스템으로서,
    하나 이상의 컴퓨터 및 하나 이상의 저장 디바이스를 포함하는 서버 - 상기 서버는 소셜 메시징 플랫폼을 구현하도록 구성됨 -;
    사용자 디바이스; 및
    상기 사용자 디바이스 상에서 실행되는 상기 소셜 메시징 플랫폼의 클라이언트 소프트웨어
    를 포함하고,
    상기 클라이언트 소프트웨어는 동작들을 수행하도록 구성되고, 상기 동작들은:
    상기 서버에 콘텐츠 요청을 전송하는 동작;
    상기 사용자 디바이스 상의 네트워크 스택의 전송 계층으로부터 상기 서버로부터의 상기 콘텐츠 요청에 대한 응답을 다수의 프래그먼트(fragment)들로 증분적으로(incrementally) 수신하는 동작 - 상기 다수의 프래그먼트들은 전체 응답을 구성하고, 상기 응답은 콘텐츠 아이템들 및 상기 콘텐츠 아이템들을 설명하는 메타데이터를 포함하고, 각각의 콘텐츠 아이템은 렌더링가능하고 하나 이상의 데이터 객체에 의해 정의됨 -;
    상기 메타데이터에 의해 결정된 순서로 디스플레이 버퍼에 상기 콘텐츠 아이템들을 배치시키는 것을 포함하는, 상기 디스플레이 버퍼 내에서, 상기 프래그먼트들이 수신될 때 상기 프래그먼트들로 상기 콘텐츠 아이템들을 증분적으로 렌더링하는 동작 - 상기 디스플레이 버퍼는 상기 사용자 디바이스의 메모리에서의 데이터 구조체임 -; 및
    상기 사용자 디바이스의 디스플레이 상에 상기 디스플레이 버퍼의 전부 또는 일부를 디스플레이하는 동작
    을 포함하는, 시스템.
  2. 제1항에 있어서,
    상기 클라이언트 소프트웨어는 상기 사용자 디바이스 상에 설치되는 웹 브라우저에서 실행되는 자바스크립트 프로그램(JavaScript program) 또는 독립형 앱(stand-alone app)인, 시스템.
  3. 제1항에 있어서,
    상기 콘텐츠 아이템들을 설명하는 메타데이터는, 각각의 콘텐츠 아이템에 대해, 상기 응답에서의 다른 콘텐츠 아이템들과 관련하여 그리고 상기 디스플레이 버퍼에서 이전에 렌더링된 응답들에서의 콘텐츠 아이템들과 관련하여 상기 콘텐츠 아이템의 디스플레이 버퍼에서의 장소를 특정하는 시퀀스 식별자를 포함하는, 시스템.
  4. 제3항에 있어서,
    개개의 콘텐츠 아이템에 대한 시퀀스 식별자는 다른 콘텐츠 아이템들과 관련하여 상기 콘텐츠 아이템이 생성된 시간에 대응하는, 시스템.
  5. 제1항에 있어서,
    상기 메타데이터는 상기 응답의 초기 프래그먼트에서 수신되고, 상기 응답에서의 콘텐츠 아이템들의 총 카운트를 포함하고, 상기 동작들은:
    상기 초기 프래그먼트에서의 상기 콘텐츠 아이템들을 상기 디스플레이 버퍼에서 렌더링하고, 상기 응답의 후속 프래그먼트들에서의 각각의 콘텐츠 아이템에 대한 개개의 플레이스홀더(placeholder)를 상기 디스플레이 버퍼에 포함시키는 동작; 및
    상기 후속 프래그먼트들에서의 상기 콘텐츠 아이템들을 렌더링할 때 상기 개개의 플레이스홀더들을 대체시키는 동작
    을 더 포함하는, 시스템.
  6. 제5항에 있어서,
    상기 메타데이터는, 각각의 콘텐츠 아이템에 대해, 시퀀스 식별자를 더 포함하고, 개개의 플레이스홀더는 그의 대응하는 콘텐츠 아이템의 시퀀스 식별자에 의해 특정되는 상기 디스플레이 버퍼에서의 장소에 생성되는, 시스템.
  7. 제1항에 있어서,
    상기 프래그먼트들이 수신될 때 상기 프래그먼트들로 상기 콘텐츠 아이템들을 증분적으로 렌더링하는 동작은:
    제1 프래그먼트가 특정 콘텐츠 아이템의 초기 부분만을 단지 포함한다는 것을 결정하는 동작;
    상기 특정 콘텐츠 아이템의 나머지를 포함하는 제2 프래그먼트를 수신하는 동작;
    상기 특정 콘텐츠 아이템의 초기 부분과 나머지를 어셈블링(assembling)하는 동작; 및
    상기 디스플레이 버퍼에서 상기 어셈블링된 콘텐츠 아이템을 렌더링하는 동작
    을 포함하는, 시스템.
  8. 제7항에 있어서,
    상기 하나 이상의 데이터 객체는 JSON 객체들이고, 상기 프래그먼트들이 수신될 때 상기 프래그먼트들로 상기 콘텐츠 아이템들을 증분적으로 렌더링하는 동작은, 각각의 콘텐츠 아이템에 대해:
    상기 콘텐츠 아이템을 정의하는 JSON 객체의 시작부를 식별하는 동작; 및
    상기 콘텐츠 아이템을 정의하는 상기 JSON 객체의 종단부를 식별하는 동작
    을 포함하는, 시스템.
  9. 제1항에 있어서,
    상기 응답의 프래그먼트들 각각은 전송 계층 프로토콜에 의해 상기 클라이언트 소프트웨어에 제공되는 하나 이상의 전송 계층 세그먼트를 포함하는, 시스템.
  10. 제1항에 있어서,
    각각의 응답에서, 상기 응답에서의 각각의 콘텐츠 아이템을 렌더링하는 데 필요한 데이터는 상기 콘텐츠 아이템을 정의하는 하나 이상의 데이터 객체에 또는 상기 응답에서 이전에 수신된 콘텐츠 아이템들을 정의하는 하나 이상의 데이터 객체에 포함되는, 시스템.
  11. 제1항에 있어서,
    상기 서버는 원격 서버인, 시스템.
  12. 사용자 디바이스 상에서 실행되는 소셜 메시징 플랫폼의 클라이언트 소프트웨어에 의해 수행되는 방법으로서,
    하나 이상의 컴퓨터 및 하나 이상의 저장 디바이스를 포함하는 서버에 콘텐츠 요청을 전송하는 단계 - 상기 서버는 상기 소셜 메시징 플랫폼을 구현하도록 구성됨 -;
    상기 사용자 디바이스 상의 네트워크 스택의 전송 계층으로부터 상기 서버로부터의 상기 콘텐츠 요청에 대한 응답을 다수의 프래그먼트들로 증분적으로 수신하는 단계 - 상기 다수의 프래그먼트들은 전체 응답을 구성하고, 상기 응답은 콘텐츠 아이템들 및 상기 콘텐츠 아이템들을 설명하는 메타데이터를 포함하고, 각각의 콘텐츠 아이템은 렌더링가능하고 하나 이상의 데이터 객체에 의해 정의됨 -;
    상기 메타데이터에 의해 결정된 순서로 디스플레이 버퍼에 상기 콘텐츠 아이템들을 배치시키는 단계를 포함하는, 상기 디스플레이 버퍼 내에서, 상기 프래그먼트들이 수신될 때 상기 프래그먼트들로 상기 콘텐츠 아이템들을 증분적으로 렌더링하는 단계 - 상기 디스플레이 버퍼는 상기 사용자 디바이스의 메모리에서의 데이터 구조체임 -; 및
    상기 사용자 디바이스의 디스플레이 상에 상기 디스플레이 버퍼의 전부 또는 일부를 디스플레이하는 단계
    를 포함하는, 방법.
  13. 제12항에 있어서,
    상기 클라이언트 소프트웨어는 상기 사용자 디바이스 상에 설치되는 웹 브라우저에서 실행되는 자바스크립트 프로그램 또는 독립형 앱인, 방법.
  14. 제12항에 있어서,
    상기 콘텐츠 아이템들을 설명하는 메타데이터는, 각각의 콘텐츠 아이템에 대해, 상기 응답에서의 다른 콘텐츠 아이템들과 관련하여 그리고 상기 디스플레이 버퍼에서 이전에 렌더링된 응답들에서의 콘텐츠 아이템들과 관련하여 상기 콘텐츠 아이템의 디스플레이 버퍼에서의 장소를 특정하는 시퀀스 식별자를 포함하는, 방법.
  15. 제14항에 있어서,
    개개의 콘텐츠 아이템에 대한 시퀀스 식별자는 다른 콘텐츠 아이템들과 관련하여 상기 콘텐츠 아이템이 생성된 시간에 대응하는, 방법.
  16. 제12항에 있어서,
    상기 메타데이터는 상기 응답의 초기 프래그먼트에서 수신되고, 상기 응답에서의 콘텐츠 아이템들의 총 카운트를 포함하고, 상기 방법은:
    상기 초기 프래그먼트에서의 상기 콘텐츠 아이템들을 상기 디스플레이 버퍼에서 렌더링하고, 상기 응답의 후속 프래그먼트들에서의 각각의 콘텐츠 아이템에 대한 개개의 플레이스홀더를 상기 디스플레이 버퍼에 포함시키는 단계; 및
    상기 후속 프래그먼트들에서의 상기 콘텐츠 아이템들을 렌더링할 때 상기 개개의 플레이스홀더들을 대체시키는 단계
    를 더 포함하는, 방법.
  17. 제16항에 있어서,
    상기 메타데이터는, 각각의 콘텐츠 아이템에 대해, 시퀀스 식별자를 더 포함하고, 개개의 플레이스홀더는 그의 대응하는 콘텐츠 아이템의 시퀀스 식별자에 의해 특정되는 상기 디스플레이 버퍼에서의 장소에 생성되는, 방법.
  18. 제12항에 있어서,
    상기 프래그먼트들이 수신될 때 상기 프래그먼트들로 상기 콘텐츠 아이템들을 증분적으로 렌더링하는 단계는:
    제1 프래그먼트가 특정 콘텐츠 아이템의 초기 부분만을 단지 포함한다는 것을 결정하는 단계;
    상기 특정 콘텐츠 아이템의 나머지를 포함하는 제2 프래그먼트를 수신하는 단계;
    상기 특정 콘텐츠 아이템의 초기 부분과 나머지를 어셈블링하는 단계; 및
    상기 디스플레이 버퍼에서 상기 어셈블링된 콘텐츠 아이템을 렌더링하는 단계
    를 포함하는, 방법.
  19. 제18항에 있어서,
    상기 하나 이상의 데이터 객체는 JSON 객체들이고, 상기 프래그먼트들이 수신될 때 상기 프래그먼트들로 상기 콘텐츠 아이템들을 증분적으로 렌더링하는 단계는, 각각의 콘텐츠 아이템에 대해:
    상기 콘텐츠 아이템을 정의하는 JSON 객체의 시작부를 식별하는 단계; 및
    상기 콘텐츠 아이템을 정의하는 상기 JSON 객체의 종단부를 식별하는 단계
    를 포함하는, 방법.
  20. 제12항에 있어서,
    상기 응답의 프래그먼트들 각각은 전송 계층 프로토콜에 의해 상기 클라이언트 소프트웨어에 제공되는 하나 이상의 전송 계층 세그먼트를 포함하는, 방법.
  21. 제12항에 있어서,
    각각의 응답에서, 상기 응답에서의 각각의 콘텐츠 아이템을 렌더링하는 데 필요한 데이터는 상기 콘텐츠 아이템을 정의하는 하나 이상의 데이터 객체에 또는 상기 응답에서 이전에 수신된 콘텐츠 아이템들을 정의하는 하나 이상의 데이터 객체에 포함되는, 방법.
  22. 제12항에 있어서,
    상기 서버는 원격 서버인, 방법.
  23. 하나 이상의 컴퓨터에 의해 실행될 때, 상기 하나 이상의 컴퓨터로 하여금 동작들을 수행하게 하도록 동작가능한 명령어들을 저장하는 하나 이상의 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 동작들은:
    하나 이상의 컴퓨터 및 하나 이상의 저장 디바이스를 포함하는 서버에 콘텐츠 요청을 전송하는 동작 - 상기 서버는 소셜 메시징 플랫폼을 구현하도록 구성됨 -;
    상기 하나 이상의 컴퓨터 상의 네트워크 스택의 전송 계층으로부터 상기 서버로부터의 상기 콘텐츠 요청에 대한 응답을 다수의 프래그먼트들로 증분적으로 수신하는 동작 - 상기 다수의 프래그먼트들은 전체 응답을 구성하고, 상기 응답은 콘텐츠 아이템들 및 상기 콘텐츠 아이템들을 설명하는 메타데이터를 포함하고, 각각의 콘텐츠 아이템은 렌더링가능하고 하나 이상의 데이터 객체에 의해 정의됨 -;
    상기 메타데이터에 의해 결정된 순서로 디스플레이 버퍼에 상기 콘텐츠 아이템들을 배치시키는 것을 포함하는, 상기 디스플레이 버퍼 내에서, 상기 프래그먼트들이 수신될 때 상기 프래그먼트들로 상기 콘텐츠 아이템들을 증분적으로 렌더링하는 동작 - 상기 디스플레이 버퍼는 상기 하나 이상의 컴퓨터의 메모리에서의 데이터 구조체임 -; 및
    상기 하나 이상의 컴퓨터의 디스플레이 상에 상기 디스플레이 버퍼의 전부 또는 일부를 디스플레이하는 동작
    을 포함하는, 하나 이상의 비일시적 컴퓨터 판독가능 저장 매체.
  24. 시스템으로서,
    소셜 메시징 플랫폼을 구현하도록 구성되는 하나 이상의 저장 디바이스 및 하나 이상의 컴퓨터를 포함하고,
    상기 하나 이상의 저장 디바이스는, 상기 하나 이상의 컴퓨터에 의해 실행될 때, 상기 하나 이상의 컴퓨터로 하여금 동작들을 수행하게 하는 명령어들을 저장하고, 상기 동작들은:
    상기 소셜 메시징 플랫폼의 클라이언트 소프트웨어로부터 콘텐츠 요청을 수신하는 동작 - 상기 클라이언트 소프트웨어는 사용자 디바이스 상에서 실행됨 -;
    (i) 상기 콘텐츠 요청에 대응하는 콘텐츠 아이템들, (ii) 상기 콘텐츠 아이템들을 설명하는 메타데이터, 및 (iii) 상기 콘텐츠 아이템들을 렌더링하는 데 필요한 데이터를 획득하는 동작 - 상기 콘텐츠 아이템들을 설명하는 메타데이터는, 각각의 콘텐츠 아이템에 대해, 다른 콘텐츠 아이템들과 관련하여 상기 콘텐츠 아이템이 렌더링되어야 하는 상기 사용자 디바이스의 디스플레이 버퍼에서의 위치를 특정하는 시퀀스 식별자를 포함함 -;
    상기 콘텐츠 요청에 대한 응답을 생성하는 동작 - 상기 콘텐츠 요청에 대한 응답을 생성하는 동작은:
    상기 응답의 초기 프래그먼트에 상기 메타데이터를 배치시키는 동작; 및
    각각의 콘텐츠 아이템을 렌더링하는 데 필요한 데이터를, 상기 콘텐츠 아이템을 정의하는 하나 이상의 데이터 객체에 또는 상기 응답에서 상기 콘텐츠 아이템에 선행하는 콘텐츠 아이템을 정의하는 하나 이상의 데이터 객체에 배치시키는 동작
    을 포함함 -; 및
    상기 클라이언트 소프트웨어에 상기 응답을 전송하는 동작
    을 포함하는, 시스템.
KR1020217011503A 2018-09-19 2019-09-19 점진적인 api 응답들 KR20210089145A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/136,093 US20200089779A1 (en) 2018-09-19 2018-09-19 Progressive API Responses
US16/136,093 2018-09-19
PCT/US2019/052019 WO2020061373A1 (en) 2018-09-19 2019-09-19 Progressive api responses

Publications (1)

Publication Number Publication Date
KR20210089145A true KR20210089145A (ko) 2021-07-15

Family

ID=68136541

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217011503A KR20210089145A (ko) 2018-09-19 2019-09-19 점진적인 api 응답들

Country Status (8)

Country Link
US (2) US20200089779A1 (ko)
EP (1) EP3854036A1 (ko)
JP (1) JP7217342B2 (ko)
KR (1) KR20210089145A (ko)
CN (1) CN112913195A (ko)
BR (1) BR112021004736A8 (ko)
DE (1) DE202019005788U1 (ko)
WO (1) WO2020061373A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11170064B2 (en) * 2019-03-05 2021-11-09 Corinne David Method and system to filter out unwanted content from incoming social media data

Family Cites Families (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5977977A (en) * 1995-08-04 1999-11-02 Microsoft Corporation Method and system for multi-pass rendering
JP2004287631A (ja) 2003-03-20 2004-10-14 Konami Co Ltd ダウンロードサービスシステム、端末、指令列の実行方法、ならびに、プログラム
US20040237082A1 (en) * 2003-05-22 2004-11-25 Alcazar Mark A. System, method, and API for progressively installing software application
US8180029B2 (en) * 2007-06-28 2012-05-15 Voxer Ip Llc Telecommunication and multimedia management method and apparatus
US9990439B2 (en) * 2007-08-14 2018-06-05 Nbcuniversal Media, Llc Flexible method and system for providing digital content
US20090049373A1 (en) * 2007-08-14 2009-02-19 Nbc Universal, Inc. Method and system for user receipt of digital content
US9852219B2 (en) * 2007-08-20 2017-12-26 Nokia Technologies Oy Segmented metadata and indexes for streamed multimedia data
US20090089448A1 (en) * 2007-09-28 2009-04-02 David Sze Mobile browser with zoom operations using progressive image download
US20100070643A1 (en) * 2008-09-11 2010-03-18 Yahoo! Inc. Delivery of synchronized metadata using multiple transactions
US9043276B2 (en) * 2008-10-03 2015-05-26 Microsoft Technology Licensing, Llc Packaging and bulk transfer of files and metadata for synchronization
US8996547B2 (en) * 2008-10-31 2015-03-31 Microsoft Technology Licensing, Llc Dynamic fragmentation of digital media
US20100115575A1 (en) * 2008-11-03 2010-05-06 At&T Intellectual Property I, L.P. System and method for recording and distributing media content
US8412841B1 (en) * 2009-08-17 2013-04-02 Adobe Systems Incorporated Media content streaming using stream message fragments
US9917874B2 (en) * 2009-09-22 2018-03-13 Qualcomm Incorporated Enhanced block-request streaming using block partitioning or request controls for improved client-side handling
US8631436B2 (en) * 2009-11-25 2014-01-14 Nokia Corporation Method and apparatus for presenting media segments
EP2507941A4 (en) * 2009-12-04 2013-12-04 Streamocean Inc SYSTEM AND METHOD FOR DELIVERING MULTIMEDIA CONTENT TO DISPLAY VIA A NETWORK
US8321426B2 (en) * 2010-04-30 2012-11-27 Hewlett-Packard Development Company, L.P. Electronically linking and rating text fragments
US20130080268A1 (en) * 2011-09-26 2013-03-28 Unicorn Media, Inc. Multi-platform media syndication customization
US8863165B2 (en) * 2010-11-01 2014-10-14 Gracenote, Inc. Method and system for presenting additional content at a media system
US20120131609A1 (en) * 2010-11-19 2012-05-24 Media Patents, S.L. Methods, apparatus and systems for delivering and receiving data
JP5905957B2 (ja) * 2011-06-08 2016-04-20 コニンクリーケ・ケイピーエヌ・ナムローゼ・フェンノートシャップ 空間的にセグメント化されたコンテンツの配信
US9256859B2 (en) * 2011-07-26 2016-02-09 Salesforce.Com, Inc. Systems and methods for fragmenting newsfeed objects
US20130080579A1 (en) * 2011-09-26 2013-03-28 Unicorn Media, Inc. Dynamically-executed syndication services
WO2013130988A1 (en) * 2012-03-02 2013-09-06 Care Cam Innovations, Llc Apparatus, method and computer-readable storage medium for media processing and delivery
US9276989B2 (en) * 2012-03-30 2016-03-01 Adobe Systems Incorporated Buffering in HTTP streaming client
US20130290848A1 (en) * 2012-04-27 2013-10-31 Mobitv, Inc. Connected multi-screen video
US20140123159A1 (en) * 2012-10-31 2014-05-01 Telefonaktiebolaget L M Ericsson (Publ) Providing Content On Demand
TW201427354A (zh) 2012-12-19 2014-07-01 Hon Hai Prec Ind Co Ltd 漸進式資料編碼傳輸系統及方法
US11233841B2 (en) * 2013-03-15 2022-01-25 Yottaa, Inc. Systems and methods for configuration-based optimization by an intermediary
US9710469B2 (en) * 2013-03-15 2017-07-18 Comcast Cable Communications, Llc Efficient data distribution to multiple devices
US9432427B2 (en) * 2013-07-25 2016-08-30 Futurewei Technologies, Inc. System and method for effectively controlling client behavior in adaptive streaming
KR20150029913A (ko) * 2013-09-11 2015-03-19 한국전자통신연구원 청크 단위로 콘텐트를 전달하는 콘텐트 시스템 및 방법
US20150088970A1 (en) * 2013-09-20 2015-03-26 Yottaa Inc. Systems and methods for managing loading priority or sequencing of fragments of a web object
US10178147B1 (en) 2014-01-02 2019-01-08 Instart Logic, Inc. Client-side location address translation
WO2015121342A1 (en) * 2014-02-13 2015-08-20 Koninklijke Kpn N.V. Requesting multiple chunks from a network node on the basis of a single request message
US10423481B2 (en) * 2014-03-14 2019-09-24 Cisco Technology, Inc. Reconciling redundant copies of media content
US9483780B2 (en) * 2014-03-27 2016-11-01 Google Inc. Providing content using integrated objects
FR3019428A1 (fr) * 2014-03-31 2015-10-02 Orange Dispositif et procede de commande a distance de la restitution de contenus multimedia
WO2016057188A1 (en) * 2014-10-09 2016-04-14 Wrap Media, LLC Active receipt wrapped packages accompanying the sale of products and/or services
US11303691B2 (en) * 2015-02-02 2022-04-12 Vmware, Inc. Streaming progress updates and results of rest API operations
US10223136B2 (en) * 2016-09-30 2019-03-05 Salesforce.Com, Inc. Generating content objects using an integrated development environment
US10157102B2 (en) * 2016-12-29 2018-12-18 Whatsapp Inc. Techniques to scan and reorganize media files to remove gaps
JP6747303B2 (ja) 2017-01-13 2020-08-26 富士通株式会社 通信装置、通信システム、通信方法、および、通信プログラム
US10999391B2 (en) * 2017-10-30 2021-05-04 Sony Interactive Entertainment LLC Dynamic filtering and amelioration of content stream manifests

Also Published As

Publication number Publication date
EP3854036A1 (en) 2021-07-28
US20200089779A1 (en) 2020-03-19
WO2020061373A1 (en) 2020-03-26
US20230021023A1 (en) 2023-01-19
BR112021004736A8 (pt) 2022-11-22
BR112021004736A2 (pt) 2021-06-01
JP7217342B2 (ja) 2023-02-02
DE202019005788U1 (de) 2022-01-31
JP2022500785A (ja) 2022-01-04
CN112913195A (zh) 2021-06-04

Similar Documents

Publication Publication Date Title
US10972585B2 (en) Establishing a trust association
US8582801B2 (en) Assisting the authoring of posts to an asymmetric social network
US9087020B1 (en) Managing and retrieving content from a shared storage
US10785183B2 (en) Composing social media messages referencing multiple messages
KR102324565B1 (ko) 내장된 미디어에 관련하여 부가 콘텐트를 제공
US20230021023A1 (en) Progressive api responses
US9256343B1 (en) Dynamically modifying an electronic article based on commentary
KR20220006504A (ko) 미디어 콘텐츠 캡처 및 프레젠테이션
US9444776B2 (en) Intelligent, dynamic E-mail signature
US11316952B2 (en) Client software back off
US11438399B1 (en) Fast loading and display of image previews
US20150026266A1 (en) Share to stream
WO2021176858A1 (ja) システム、情報処理方法、情報処理装置、端末、プログラム
US20160342457A1 (en) Processing a request for a web resource
US9497251B2 (en) Serving of web pages according to web site launch times

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E601 Decision to refuse application